已合并
回退glslang版本 #28
lxt1创建于 2024年3月24日
回退glslang版本 #28
已合并
lxt1创建于 2024年3月24日
从refs/pull/28/head合入到OpenHarmony-4.1-Release
共 1258 个文件变更+48280-112625
@@ -96,7 +96,6 @@ LOCAL_MODULE:=glslang
96LOCAL_CXXFLAGS:=-std=c++11 -fno-exceptions -fno-rtti $(GLSLANG_DEFINES)96LOCAL_CXXFLAGS:=-std=c++11 -fno-exceptions -fno-rtti $(GLSLANG_DEFINES)
97LOCAL_EXPORT_C_INCLUDES:=$(LOCAL_PATH)97LOCAL_EXPORT_C_INCLUDES:=$(LOCAL_PATH)
98LOCAL_SRC_FILES:= \98LOCAL_SRC_FILES:= \
99- glslang/CInterface/glslang_c_interface.cpp \
100 glslang/GenericCodeGen/CodeGen.cpp \99 glslang/GenericCodeGen/CodeGen.cpp \
101 glslang/GenericCodeGen/Link.cpp \100 glslang/GenericCodeGen/Link.cpp \
102 glslang/HLSL/hlslAttributes.cpp \101 glslang/HLSL/hlslAttributes.cpp \
@@ -126,7 +125,6 @@ LOCAL_SRC_FILES:= \
126 glslang/MachineIndependent/RemoveTree.cpp \125 glslang/MachineIndependent/RemoveTree.cpp \
127 glslang/MachineIndependent/Scan.cpp \126 glslang/MachineIndependent/Scan.cpp \
128 glslang/MachineIndependent/ShaderLang.cpp \127 glslang/MachineIndependent/ShaderLang.cpp \
129- glslang/MachineIndependent/SpirvIntrinsics.cpp \
130 glslang/MachineIndependent/SymbolTable.cpp \128 glslang/MachineIndependent/SymbolTable.cpp \
131 glslang/MachineIndependent/Versions.cpp \129 glslang/MachineIndependent/Versions.cpp \
132 glslang/MachineIndependent/preprocessor/PpAtom.cpp \130 glslang/MachineIndependent/preprocessor/PpAtom.cpp \
@@ -150,7 +148,6 @@ $(LOCAL_PATH)/SPIRV/GlslangToSpv.cpp: \
150LOCAL_MODULE:=SPIRV148LOCAL_MODULE:=SPIRV
151LOCAL_CXXFLAGS:=-std=c++11 -fno-exceptions -fno-rtti -Werror $(GLSLANG_DEFINES)149LOCAL_CXXFLAGS:=-std=c++11 -fno-exceptions -fno-rtti -Werror $(GLSLANG_DEFINES)
152LOCAL_SRC_FILES:= \150LOCAL_SRC_FILES:= \
153- SPIRV/CInterface/spirv_c_interface.cpp \
154 SPIRV/GlslangToSpv.cpp \151 SPIRV/GlslangToSpv.cpp \
155 SPIRV/InReadableOrder.cpp \152 SPIRV/InReadableOrder.cpp \
156 SPIRV/Logger.cpp \153 SPIRV/Logger.cpp \
@@ -49,28 +49,14 @@ py_binary(
49 srcs = ["build_info.py"],49 srcs = ["build_info.py"],
50)50)
51 51 
52-py_binary(
53- name = "gen_extension_headers",
54- srcs = ["gen_extension_headers.py"],
55-)
56- 
57genrule(52genrule(
58 name = "gen_build_info_h",53 name = "gen_build_info_h",
59 srcs = ["CHANGES.md", "build_info.h.tmpl"],54 srcs = ["CHANGES.md", "build_info.h.tmpl"],
60 outs = ["glslang/build_info.h"],55 outs = ["glslang/build_info.h"],
61- cmd_bash = "$(location build_info) $$(dirname $(location CHANGES.md)) -i $(location build_info.h.tmpl) -o $(location glslang/build_info.h)",56+ cmd = "$(location build_info) $$(dirname $(location CHANGES.md)) -i $(location build_info.h.tmpl) -o $(location glslang/build_info.h)",
62- cmd_bat = "for %F in ($(location CHANGES.md)) do $(location build_info) %~dpF -i $(location build_info.h.tmpl) -o $(location glslang/build_info.h)",
63 tools = [":build_info"],57 tools = [":build_info"],
64)58)
65 59 
66-genrule(
67- name = "gen_extension_headers_h",
68- srcs = ["glslang/ExtensionHeaders", "gen_extension_headers.py"],
69- outs = ["glslang/glsl_intrinsic_header.h"],
70- cmd_bash = "$(location gen_extension_headers) -i $(location glslang/ExtensionHeaders) -o $(location glslang/glsl_intrinsic_header.h)",
71- tools = [":gen_extension_headers"],
72-)
73- 
74COMMON_COPTS = select({60COMMON_COPTS = select({
75 "@bazel_tools//src/conditions:windows": [""],61 "@bazel_tools//src/conditions:windows": [""],
76 "//conditions:default": [62 "//conditions:default": [
@@ -144,10 +130,8 @@ genrule(
144 "SPIRV/GLSL.ext.EXT.h",130 "SPIRV/GLSL.ext.EXT.h",
145 "SPIRV/GLSL.ext.KHR.h",131 "SPIRV/GLSL.ext.KHR.h",
146 "SPIRV/GLSL.ext.NV.h",132 "SPIRV/GLSL.ext.NV.h",
147- "SPIRV/GLSL.ext.ARM.h",
148 "SPIRV/GLSL.std.450.h",133 "SPIRV/GLSL.std.450.h",
149 "SPIRV/NonSemanticDebugPrintf.h",134 "SPIRV/NonSemanticDebugPrintf.h",
150- "SPIRV/NonSemanticShaderDebugInfo100.h",
151 "SPIRV/spirv.hpp",135 "SPIRV/spirv.hpp",
152 ],136 ],
153 outs = [137 outs = [
@@ -155,14 +139,11 @@ genrule(
155 "include/SPIRV/GLSL.ext.EXT.h",139 "include/SPIRV/GLSL.ext.EXT.h",
156 "include/SPIRV/GLSL.ext.KHR.h",140 "include/SPIRV/GLSL.ext.KHR.h",
157 "include/SPIRV/GLSL.ext.NV.h",141 "include/SPIRV/GLSL.ext.NV.h",
158- "include/SPIRV/GLSL.ext.ARM.h",
159 "include/SPIRV/GLSL.std.450.h",142 "include/SPIRV/GLSL.std.450.h",
160 "include/SPIRV/NonSemanticDebugPrintf.h",143 "include/SPIRV/NonSemanticDebugPrintf.h",
161- "include/SPIRV/NonSemanticShaderDebugInfo100.h",
162 "include/SPIRV/spirv.hpp",144 "include/SPIRV/spirv.hpp",
163 ],145 ],
164- cmd_bash = "mkdir -p $(@D)/include/SPIRV && cp $(SRCS) $(@D)/include/SPIRV/",146+ cmd = "mkdir -p $(@D)/include/SPIRV && cp $(SRCS) $(@D)/include/SPIRV/",
165- cmd_bat = "(if not exist $(@D)\\include\\SPIRV mkdir $(@D)\\include\\SPIRV) && (for %S in ($(SRCS)) do @xcopy /q %S $(@D)\\include\\SPIRV\\ >NUL)",
166)147)
167 148 
168cc_library(149cc_library(
@@ -212,7 +193,7 @@ cc_library(
212cc_library(193cc_library(
213 name = "glslang-default-resource-limits",194 name = "glslang-default-resource-limits",
214 srcs = ["StandAlone/ResourceLimits.cpp"],195 srcs = ["StandAlone/ResourceLimits.cpp"],
215- hdrs = ["glslang/Public/ResourceLimits.h"],196+ hdrs = ["StandAlone/ResourceLimits.h"],
216 copts = COMMON_COPTS,197 copts = COMMON_COPTS,
217 linkstatic = 1,198 linkstatic = 1,
218 deps = [":glslang"],199 deps = [":glslang"],
@@ -223,7 +204,6 @@ cc_binary(
223 srcs = [204 srcs = [
224 "StandAlone/StandAlone.cpp",205 "StandAlone/StandAlone.cpp",
225 "StandAlone/Worklist.h",206 "StandAlone/Worklist.h",
226- ":glslang/glsl_intrinsic_header.h"
227 ],207 ],
228 copts = COMMON_COPTS,208 copts = COMMON_COPTS,
229 deps = [209 deps = [
MBUILD.gn+16-41
@@ -31,7 +31,7 @@
31# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE31# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32# POSSIBILITY OF SUCH DAMAGE.32# POSSIBILITY OF SUCH DAMAGE.
33 33 
34-import("//build_overrides/glslang.gni")34+import("build_overrides/glslang.gni")
35 35 
36# Both Chromium and Fuchsia use by default a set of warning errors36# Both Chromium and Fuchsia use by default a set of warning errors
37# that is far too strict to compile this project. These are also37# that is far too strict to compile this project. These are also
@@ -69,29 +69,10 @@ action("glslang_build_info") {
69 ]69 ]
70}70}
71 71 
72-action("glslang_extension_headers") {
73- script = "gen_extension_headers.py"
74- 
75- out_file = "${target_gen_dir}/include/glslang/glsl_intrinsic_header.h"
76- 
77- # Fuchsia GN build rules require all GN actions to be hermetic and they
78- # should correctly and fully state their inputs and outpus (see
79- # https://fuchsia.dev/fuchsia-src/development/build/hermetic_actions
80- # for details). All input files of the script should be added to the
81- # |sources| list.
82- sources = [ "glslang/ExtensionHeaders/GL_EXT_shader_realtime_clock.glsl" ]
83- 
84- inputs = [ script ]
85- outputs = [ out_file ]
86- args = [
87- "-i",
88- rebase_path("glslang/ExtensionHeaders", root_build_dir),
89- "-o",
90- rebase_path(out_file, root_build_dir),
91- ]
92-}
93- 
94spirv_tools_dir = glslang_spirv_tools_dir72spirv_tools_dir = glslang_spirv_tools_dir
73+if (!defined(glslang_angle)) {
74+ glslang_angle = false
75+}
95 76 
96config("glslang_public") {77config("glslang_public") {
97 include_dirs = [ "." ]78 include_dirs = [ "." ]
@@ -116,7 +97,6 @@ template("glslang_sources_common") {
116 "OGLCompilersDLL/InitializeDll.cpp",97 "OGLCompilersDLL/InitializeDll.cpp",
117 "OGLCompilersDLL/InitializeDll.h",98 "OGLCompilersDLL/InitializeDll.h",
118 "SPIRV/GLSL.ext.AMD.h",99 "SPIRV/GLSL.ext.AMD.h",
119- "SPIRV/GLSL.ext.ARM.h",
120 "SPIRV/GLSL.ext.EXT.h",100 "SPIRV/GLSL.ext.EXT.h",
121 "SPIRV/GLSL.ext.KHR.h",101 "SPIRV/GLSL.ext.KHR.h",
122 "SPIRV/GLSL.ext.NV.h",102 "SPIRV/GLSL.ext.NV.h",
@@ -127,7 +107,6 @@ template("glslang_sources_common") {
127 "SPIRV/Logger.cpp",107 "SPIRV/Logger.cpp",
128 "SPIRV/Logger.h",108 "SPIRV/Logger.h",
129 "SPIRV/NonSemanticDebugPrintf.h",109 "SPIRV/NonSemanticDebugPrintf.h",
130- "SPIRV/NonSemanticShaderDebugInfo100.h",
131 "SPIRV/SPVRemapper.cpp",110 "SPIRV/SPVRemapper.cpp",
132 "SPIRV/SPVRemapper.h",111 "SPIRV/SPVRemapper.h",
133 "SPIRV/SpvBuilder.cpp",112 "SPIRV/SpvBuilder.cpp",
@@ -152,7 +131,6 @@ template("glslang_sources_common") {
152 "glslang/Include/PoolAlloc.h",131 "glslang/Include/PoolAlloc.h",
153 "glslang/Include/ResourceLimits.h",132 "glslang/Include/ResourceLimits.h",
154 "glslang/Include/ShHandle.h",133 "glslang/Include/ShHandle.h",
155- "glslang/Include/SpirvIntrinsics.h",
156 "glslang/Include/Types.h",134 "glslang/Include/Types.h",
157 "glslang/Include/arrays.h",135 "glslang/Include/arrays.h",
158 "glslang/Include/intermediate.h",136 "glslang/Include/intermediate.h",
@@ -173,7 +151,6 @@ template("glslang_sources_common") {
173 "glslang/MachineIndependent/Scan.h",151 "glslang/MachineIndependent/Scan.h",
174 "glslang/MachineIndependent/ScanContext.h",152 "glslang/MachineIndependent/ScanContext.h",
175 "glslang/MachineIndependent/ShaderLang.cpp",153 "glslang/MachineIndependent/ShaderLang.cpp",
176- "glslang/MachineIndependent/SpirvIntrinsics.cpp",
177 "glslang/MachineIndependent/SymbolTable.cpp",154 "glslang/MachineIndependent/SymbolTable.cpp",
178 "glslang/MachineIndependent/SymbolTable.h",155 "glslang/MachineIndependent/SymbolTable.h",
179 "glslang/MachineIndependent/Versions.cpp",156 "glslang/MachineIndependent/Versions.cpp",
@@ -236,6 +213,9 @@ template("glslang_sources_common") {
236 sources += [ "SPIRV/SpvTools.cpp" ]213 sources += [ "SPIRV/SpvTools.cpp" ]
237 defines += [ "ENABLE_OPT=1" ]214 defines += [ "ENABLE_OPT=1" ]
238 }215 }
216+ if (invoker.is_angle) {
217+ defines += [ "GLSLANG_ANGLE" ]
218+ }
239 219 
240 if (is_win) {220 if (is_win) {
241 sources += [ "glslang/OSDependent/Windows/ossource.cpp" ]221 sources += [ "glslang/OSDependent/Windows/ossource.cpp" ]
@@ -266,8 +246,6 @@ template("glslang_sources_common") {
266 ]246 ]
267 }247 }
268 248 
269- include_dirs = [ "${target_gen_dir}/include" ]
270- 
271 deps = [ ":glslang_build_info" ]249 deps = [ ":glslang_build_info" ]
272 250 
273 if (invoker.enable_opt) {251 if (invoker.enable_opt) {
@@ -275,29 +253,32 @@ template("glslang_sources_common") {
275 "${spirv_tools_dir}:spvtools_opt",253 "${spirv_tools_dir}:spvtools_opt",
276 "${spirv_tools_dir}:spvtools_val",254 "${spirv_tools_dir}:spvtools_val",
277 ]255 ]
278- include_dirs += [ "${spirv_tools_dir}/include" ]
279 }256 }
280 257 
258+ include_dirs = [ "${target_gen_dir}/include" ]
259+ 
281 configs -= _configs_to_remove260 configs -= _configs_to_remove
282 configs += _configs_to_add261 configs += _configs_to_add
283 }262 }
284}263}
285 264 
286glslang_sources_common("glslang_lib_sources") {265glslang_sources_common("glslang_lib_sources") {
287- enable_opt = true266+ enable_opt = false
288- enable_hlsl = true267+ enable_hlsl = !glslang_angle
268+ is_angle = glslang_angle
289}269}
290 270 
291glslang_sources_common("glslang_sources") {271glslang_sources_common("glslang_sources") {
292- enable_opt = true272+ enable_opt = false
293 enable_hlsl = true273 enable_hlsl = true
274+ is_angle = false
294}275}
295 276 
296source_set("glslang_default_resource_limits_sources") {277source_set("glslang_default_resource_limits_sources") {
297 sources = [278 sources = [
298 "StandAlone/ResourceLimits.cpp",279 "StandAlone/ResourceLimits.cpp",
280+ "StandAlone/ResourceLimits.h",
299 "glslang/Include/ResourceLimits.h",281 "glslang/Include/ResourceLimits.h",
300- "glslang/Public/ResourceLimits.h",
301 ]282 ]
302 public_configs = [ ":glslang_public" ]283 public_configs = [ ":glslang_public" ]
303 284 
@@ -317,15 +298,11 @@ executable("glslang_validator") {
317 deps = [298 deps = [
318 ":glslang_build_info",299 ":glslang_build_info",
319 ":glslang_default_resource_limits_sources",300 ":glslang_default_resource_limits_sources",
320- ":glslang_extension_headers",
321 ":glslang_sources",301 ":glslang_sources",
322 ]302 ]
323 public_configs = [ ":glslang_hlsl" ]303 public_configs = [ ":glslang_hlsl" ]
324 304 
325- include_dirs = [305+ include_dirs = [ "${target_gen_dir}/include" ]
326- "${target_gen_dir}/include",
327- "${spirv_tools_dir}/include",
328- ]
329 306 
330 configs -= _configs_to_remove307 configs -= _configs_to_remove
331 configs += _configs_to_add308 configs += _configs_to_add
@@ -336,8 +313,6 @@ executable("spirv-remap") {
336 defines = [ "ENABLE_OPT=1" ]313 defines = [ "ENABLE_OPT=1" ]
337 deps = [ ":glslang_sources" ]314 deps = [ ":glslang_sources" ]
338 315 
339- include_dirs = [ "${spirv_tools_dir}/include" ]
340- 
341 configs -= _configs_to_remove316 configs -= _configs_to_remove
342 configs += _configs_to_add317 configs += _configs_to_add
343}318}
MCHANGES.md+0-103
@@ -3,109 +3,6 @@
3All notable changes to this project will be documented in this file.3All notable changes to this project will be documented in this file.
4This project adheres to [Semantic Versioning](https://semver.org/).4This project adheres to [Semantic Versioning](https://semver.org/).
5 5 
6-## 11.13.0 2022-12-06
7- 
8-### Other changes
9-* Make HelperInvocation accesses volatile for SPIR-V 1.6.
10-* Improve forward compatibility of ResourceLimits interface
11-* Remove GLSLANG_ANGLE
12- 
13-## 11.12.0 2022-10-12
14- 
15-### Other changes
16-* Update generator version
17-* Add support for GL_EXT_mesh_shader
18-* Add support for NonSemantic.Shader.DebugInfo.100
19-* Make OpEmitMeshTasksEXT a terminal instruction
20-* Make gl_SubGroupARB a flat in int in Vulkan
21-* Add support for GL_EXT_opacity_micromap
22-* Add preamble support to C interface
23- 
24-## 11.11.0 2022-08-11
25- 
26-### Other changes
27-* Add OpSource support to C interface
28-* Deprecate samplerBuffer for spirv1.6 and later
29-* Add support for SPV_AMD_shader_early_and_late_fragment_tests
30- 
31-## 11.10.0 2022-06-02
32- 
33-### Other changes
34-* Generate OpLine before OpFunction
35-* Add support for VK_EXT_fragment_shader_barycentric
36-* Add whitelist filtering for debug comments in SPIRV-Remap
37-* Add support for GL_EXT_ray_cull_mask
38- 
39-## 11.9.0 2022-04-06
40- 
41-### Other changes
42-* Add GLSL version override functionality
43-* Add eliminate-dead-input-components to -Os
44-* Add enhanced-msgs option
45-* Explicitly use Python 3 for builds
46- 
47-## 11.8.0 2022-01-27
48- 
49-### Other changes
50-* Add support for SPIR-V 1.6
51-* Add support for Vulkan 1.3
52-* Add --hlsl-dx-position-w option
53- 
54-## 11.7.0 2021-11-11
55- 
56-### Other changes
57-* Add support for targeting Vulkan 1.2 in the C API
58- 
59-## 11.6.0 2021-08-25
60- 
61-### Other changes
62-* Atomic memory function only for shader storage block member or shared variable
63-* Add support for gl_MaxVaryingVectors for ogl
64-* Fix loading bool arrays from interface blocks
65-* Generate separate stores for partially swizzled memory stores
66-* Allow layout(std430) uniform with GL_EXT_scalar_block_layout
67-* Support for pragma STDGL invariant(all)
68-* Support for GL_NV_ray_tracing_motion_blur
69- 
70-## 11.5.0 2021-06-23
71- 
72-### Other changes
73-* Implement GLSL_EXT_shader_atomic_float2
74-* Implement GL_EXT_spirv_intrinsics
75-* Fixed SPIR-V remapper not remapping OpExtInst instruction set IDs
76-* only declare compatibility gl_ variables in compatibility mode
77-* Add support for float spec const vector initialization
78-* Implement GL_EXT_subgroup_uniform_control_flow.
79-* Fix arrays dimensioned with spec constant sized gl_WorkGroupSize
80-* Add support for 64bit integer scalar and vector types to bitCount() builtin
81- 
82-## 11.4.0 2021-04-22
83- 
84-### Other changes
85-* Fix to keep source compatible with CMake 3.10.2
86- 
87-## 11.3.0 2021-04-21
88- 
89-### Other changes
90-* Added --depfile
91-* Added --auto-sampled-textures
92-* Now supports InterpolateAt-based functions
93-* Supports cross-stage automatic IO mapping
94-* Supports GL_EXT_vulkan_glsl_relaxed (-R option)
95- 
96-## 11.2.0 2021-02-18
97- 
98-### Other changes
99-* Removed Python requirement when not building with spirv-tools
100-* Add support for GL_EXT_shared_memory_block
101-* Implement GL_EXT_null_initializer
102-* Add CMake support for Fuschia
103- 
104-## 11.1.0 2020-12-07
105- 
106-### Other changes
107-* Added ray-tracing extension support
108- 
109## 11.0.0 2020-07-206## 11.0.0 2020-07-20
110 7 
111### Breaking changes8### Breaking changes
@@ -31,18 +31,15 @@
31# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE31# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32# POSSIBILITY OF SUCH DAMAGE.32# POSSIBILITY OF SUCH DAMAGE.
33 33 
34+project(glslang
35+ LANGUAGES CXX)
36+ 
34# increase to 3.1 once all major distributions37# increase to 3.1 once all major distributions
35# include a version of CMake >= 3.138# include a version of CMake >= 3.1
36-cmake_minimum_required(VERSION 3.14.0)39+cmake_minimum_required(VERSION 2.8.12)
37if (POLICY CMP0048)40if (POLICY CMP0048)
38 cmake_policy(SET CMP0048 NEW)41 cmake_policy(SET CMP0048 NEW)
39endif()42endif()
40-if(POLICY CMP0054)
41- cmake_policy(SET CMP0054 NEW)
42-endif()
43- 
44-project(glslang LANGUAGES CXX)
45- 
46set_property(GLOBAL PROPERTY USE_FOLDERS ON)43set_property(GLOBAL PROPERTY USE_FOLDERS ON)
47 44 
48# Enable compile commands database45# Enable compile commands database
@@ -50,7 +47,6 @@ set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
50 47 
51# Adhere to GNU filesystem layout conventions48# Adhere to GNU filesystem layout conventions
52include(GNUInstallDirs)49include(GNUInstallDirs)
53-include(CMakePackageConfigHelpers)
54 50 
55# Needed for CMAKE_DEPENDENT_OPTION macro51# Needed for CMAKE_DEPENDENT_OPTION macro
56include(CMakeDependentOption)52include(CMakeDependentOption)
@@ -107,17 +103,10 @@ CMAKE_DEPENDENT_OPTION(ENABLE_HLSL
107option(ENABLE_RTTI "Enables RTTI" OFF)103option(ENABLE_RTTI "Enables RTTI" OFF)
108option(ENABLE_EXCEPTIONS "Enables Exceptions" OFF)104option(ENABLE_EXCEPTIONS "Enables Exceptions" OFF)
109option(ENABLE_OPT "Enables spirv-opt capability if present" ON)105option(ENABLE_OPT "Enables spirv-opt capability if present" ON)
110- 106+option(ENABLE_PCH "Enables Precompiled header" ON)
111-if(MINGW OR (CMAKE_SYSTEM_NAME STREQUAL "Darwin" AND ${CMAKE_CXX_COMPILER_ID} MATCHES "GNU"))
112- # Workaround for CMake behavior on Mac OS with gcc, cmake generates -Xarch_* arguments
113- # which gcc rejects
114- option(ENABLE_PCH "Enables Precompiled header" OFF)
115-else()
116- option(ENABLE_PCH "Enables Precompiled header" ON)
117-endif()
118option(ENABLE_CTEST "Enables testing" ON)107option(ENABLE_CTEST "Enables testing" ON)
119 108 
120-if(ENABLE_GLSLANG_INSTALL AND CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT AND WIN32)109+if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT AND WIN32)
121 set(CMAKE_INSTALL_PREFIX "install" CACHE STRING "..." FORCE)110 set(CMAKE_INSTALL_PREFIX "install" CACHE STRING "..." FORCE)
122endif()111endif()
123 112 
@@ -126,7 +115,7 @@ if(USE_CCACHE)
126 find_program(CCACHE_FOUND ccache)115 find_program(CCACHE_FOUND ccache)
127 if(CCACHE_FOUND)116 if(CCACHE_FOUND)
128 set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache)117 set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache)
129- endif()118+ endif(CCACHE_FOUND)
130endif()119endif()
131 120 
132if(ENABLE_CTEST)121if(ENABLE_CTEST)
@@ -135,27 +124,26 @@ endif()
135 124 
136if(ENABLE_HLSL)125if(ENABLE_HLSL)
137 add_definitions(-DENABLE_HLSL)126 add_definitions(-DENABLE_HLSL)
138-endif()127+endif(ENABLE_HLSL)
139 128 
140if(ENABLE_GLSLANG_WEBMIN)129if(ENABLE_GLSLANG_WEBMIN)
141 add_definitions(-DGLSLANG_WEB)130 add_definitions(-DGLSLANG_WEB)
142 if(ENABLE_GLSLANG_WEBMIN_DEVEL)131 if(ENABLE_GLSLANG_WEBMIN_DEVEL)
143 add_definitions(-DGLSLANG_WEB_DEVEL)132 add_definitions(-DGLSLANG_WEB_DEVEL)
144- endif()133+ endif(ENABLE_GLSLANG_WEBMIN_DEVEL)
145-endif()134+endif(ENABLE_GLSLANG_WEBMIN)
146 135 
147if(WIN32)136if(WIN32)
148 set(CMAKE_DEBUG_POSTFIX "d")137 set(CMAKE_DEBUG_POSTFIX "d")
149- option(OVERRIDE_MSVCCRT "Overrides runtime of MSVC " ON)138+ if(MSVC)
150- if(MSVC AND OVERRIDE_MSVCCRT)
151 include(ChooseMSVCCRT.cmake)139 include(ChooseMSVCCRT.cmake)
152- endif()140+ endif(MSVC)
153 add_definitions(-DGLSLANG_OSINCLUDE_WIN32)141 add_definitions(-DGLSLANG_OSINCLUDE_WIN32)
154elseif(UNIX)142elseif(UNIX)
155 add_definitions(-DGLSLANG_OSINCLUDE_UNIX)143 add_definitions(-DGLSLANG_OSINCLUDE_UNIX)
156-else()144+else(WIN32)
157 message("unknown platform")145 message("unknown platform")
158-endif()146+endif(WIN32)
159 147 
160if(${CMAKE_CXX_COMPILER_ID} MATCHES "GNU")148if(${CMAKE_CXX_COMPILER_ID} MATCHES "GNU")
161 add_compile_options(-Wall -Wmaybe-uninitialized -Wuninitialized -Wunused -Wunused-local-typedefs149 add_compile_options(-Wall -Wmaybe-uninitialized -Wuninitialized -Wunused -Wunused-local-typedefs
@@ -171,7 +159,7 @@ if(${CMAKE_CXX_COMPILER_ID} MATCHES "GNU")
171 add_compile_options(-Werror=deprecated-copy)159 add_compile_options(-Werror=deprecated-copy)
172 endif()160 endif()
173 161 
174- if(NOT CMAKE_VERSION VERSION_LESS "3.13" AND NOT CMAKE_SYSTEM_NAME STREQUAL "Darwin")162+ if(NOT CMAKE_VERSION VERSION_LESS "3.13")
175 # Error if there's symbols that are not found at link time.163 # Error if there's symbols that are not found at link time.
176 # add_link_options() was added in CMake 3.13 - if using an earlier164 # add_link_options() was added in CMake 3.13 - if using an earlier
177 # version don't set this - it should be caught by presubmits anyway.165 # version don't set this - it should be caught by presubmits anyway.
@@ -192,26 +180,19 @@ elseif(${CMAKE_CXX_COMPILER_ID} MATCHES "Clang" AND NOT MSVC)
192 # Error if there's symbols that are not found at link time.180 # Error if there's symbols that are not found at link time.
193 # add_link_options() was added in CMake 3.13 - if using an earlier181 # add_link_options() was added in CMake 3.13 - if using an earlier
194 # version don't set this - it should be caught by presubmits anyway.182 # version don't set this - it should be caught by presubmits anyway.
195- if (WIN32)183+ add_link_options("-Wl,-undefined,error")
196- add_link_options("-Wl,--no-undefined")
197- else()
198- add_link_options("-Wl,-undefined,error")
199- endif()
200 endif()184 endif()
201elseif(MSVC)185elseif(MSVC)
202 if(NOT ENABLE_RTTI)186 if(NOT ENABLE_RTTI)
203 string(FIND "${CMAKE_CXX_FLAGS}" "/GR" MSVC_HAS_GR)187 string(FIND "${CMAKE_CXX_FLAGS}" "/GR" MSVC_HAS_GR)
204 if(MSVC_HAS_GR)188 if(MSVC_HAS_GR)
205- string(REGEX REPLACE "/GR" "/GR-" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")189+ string(REGEX REPLACE /GR /GR- CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})
206 else()190 else()
207 add_compile_options(/GR-) # Disable RTTI191 add_compile_options(/GR-) # Disable RTTI
208 endif()192 endif()
209 endif()193 endif()
210 if(ENABLE_EXCEPTIONS)194 if(ENABLE_EXCEPTIONS)
211 add_compile_options(/EHsc) # Enable Exceptions195 add_compile_options(/EHsc) # Enable Exceptions
212- else()
213- string(REGEX REPLACE "/EHsc" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") # Try to remove default /EHsc cxx_flag
214- add_compile_options(/D_HAS_EXCEPTIONS=0)
215 endif()196 endif()
216endif()197endif()
217 198 
@@ -225,7 +206,7 @@ if(ENABLE_GLSLANG_JS)
225 add_compile_options(-Wno-unused-variable -Wno-unused-const-variable)206 add_compile_options(-Wno-unused-variable -Wno-unused-const-variable)
226 endif()207 endif()
227 endif()208 endif()
228-endif()209+endif(ENABLE_GLSLANG_JS)
229 210 
230# Request C++11211# Request C++11
231if(${CMAKE_VERSION} VERSION_LESS 3.1)212if(${CMAKE_VERSION} VERSION_LESS 3.1)
@@ -253,33 +234,55 @@ if(NOT COMMAND find_host_package)
253 endmacro()234 endmacro()
254endif()235endif()
255 236 
237+# CMake needs to find the right version of python, right from the beginning,
238+# otherwise, it will find the wrong version and fail later
239+find_host_package(PythonInterp 3 REQUIRED)
240+ 
256# Root directory for build-time generated include files241# Root directory for build-time generated include files
257set(GLSLANG_GENERATED_INCLUDEDIR "${CMAKE_BINARY_DIR}/include")242set(GLSLANG_GENERATED_INCLUDEDIR "${CMAKE_BINARY_DIR}/include")
258 243 
259################################################################################244################################################################################
260# Build version information generation245# Build version information generation
261################################################################################246################################################################################
262-include(parse_version.cmake)
263set(GLSLANG_CHANGES_FILE "${CMAKE_CURRENT_SOURCE_DIR}/CHANGES.md")247set(GLSLANG_CHANGES_FILE "${CMAKE_CURRENT_SOURCE_DIR}/CHANGES.md")
248+set(GLSLANG_BUILD_INFO_PY "${CMAKE_CURRENT_SOURCE_DIR}/build_info.py")
264set(GLSLANG_BUILD_INFO_H_TMPL "${CMAKE_CURRENT_SOURCE_DIR}/build_info.h.tmpl")249set(GLSLANG_BUILD_INFO_H_TMPL "${CMAKE_CURRENT_SOURCE_DIR}/build_info.h.tmpl")
265set(GLSLANG_BUILD_INFO_H "${GLSLANG_GENERATED_INCLUDEDIR}/glslang/build_info.h")250set(GLSLANG_BUILD_INFO_H "${GLSLANG_GENERATED_INCLUDEDIR}/glslang/build_info.h")
266 251 
267-parse_version(${GLSLANG_CHANGES_FILE} GLSLANG)252+# Command to build the build_info.h file
253+add_custom_command(
254+ OUTPUT ${GLSLANG_BUILD_INFO_H}
255+ COMMAND ${PYTHON_EXECUTABLE} "${GLSLANG_BUILD_INFO_PY}"
256+ ${CMAKE_CURRENT_SOURCE_DIR}
257+ "-i" ${GLSLANG_BUILD_INFO_H_TMPL}
258+ "-o" ${GLSLANG_BUILD_INFO_H}
259+ DEPENDS ${GLSLANG_BUILD_INFO_PY}
260+ ${GLSLANG_CHANGES_FILE}
261+ ${GLSLANG_BUILD_INFO_H_TMPL}
262+ COMMENT "Generating ${GLSLANG_BUILD_INFO_H}")
268 263 
269-function(configurate_version)264+# Target to build the build_info.h file
270- set(major ${GLSLANG_VERSION_MAJOR})265+add_custom_target(glslang-build-info DEPENDS ${GLSLANG_BUILD_INFO_H})
271- set(minor ${GLSLANG_VERSION_MINOR})
272- set(patch ${GLSLANG_VERSION_PATCH})
273- set(flavor ${GLSLANG_VERSION_FLAVOR})
274- configure_file(${GLSLANG_BUILD_INFO_H_TMPL} ${GLSLANG_BUILD_INFO_H} @ONLY)
275-endfunction()
276 266 
277-configurate_version()267+# Populate the CMake GLSLANG_VERSION* variables with the build version
268+# information.
269+execute_process(
270+ COMMAND ${PYTHON_EXECUTABLE} "${GLSLANG_BUILD_INFO_PY}"
271+ ${CMAKE_CURRENT_SOURCE_DIR} "<major>.<minor>.<patch><-flavor>;<major>;<minor>;<patch>;<flavor>"
272+ OUTPUT_VARIABLE "GLSLANG_VERSIONS"
273+ OUTPUT_STRIP_TRAILING_WHITESPACE)
274+list(GET "GLSLANG_VERSIONS" 0 "GLSLANG_VERSION")
275+list(GET "GLSLANG_VERSIONS" 1 "GLSLANG_VERSION_MAJOR")
276+list(GET "GLSLANG_VERSIONS" 2 "GLSLANG_VERSION_MINOR")
277+list(GET "GLSLANG_VERSIONS" 3 "GLSLANG_VERSION_PATCH")
278+list(GET "GLSLANG_VERSIONS" 4 "GLSLANG_VERSION_FLAVOR")
279+configure_file(${GLSLANG_CHANGES_FILE} "${CMAKE_CURRENT_BINARY_DIR}/CHANGES.md") # Required to re-run cmake on version change
278 280 
279# glslang_add_build_info_dependency() adds the glslang-build-info dependency and281# glslang_add_build_info_dependency() adds the glslang-build-info dependency and
280# generated include directories to target.282# generated include directories to target.
281function(glslang_add_build_info_dependency target)283function(glslang_add_build_info_dependency target)
282 target_include_directories(${target} PUBLIC $<BUILD_INTERFACE:${GLSLANG_GENERATED_INCLUDEDIR}>)284 target_include_directories(${target} PUBLIC $<BUILD_INTERFACE:${GLSLANG_GENERATED_INCLUDEDIR}>)
285+ add_dependencies(${target} glslang-build-info)
283endfunction()286endfunction()
284 287 
285# glslang_only_export_explicit_symbols() makes the symbol visibility hidden by288# glslang_only_export_explicit_symbols() makes the symbol visibility hidden by
@@ -313,8 +316,6 @@ else()
313endif()316endif()
314 317 
315if(BUILD_EXTERNAL AND IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/External)318if(BUILD_EXTERNAL AND IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/External)
316- find_host_package(PythonInterp 3 REQUIRED)
317- 
318 # We depend on these for later projects, so they should come first.319 # We depend on these for later projects, so they should come first.
319 add_subdirectory(External)320 add_subdirectory(External)
320endif()321endif()
@@ -341,7 +342,7 @@ endif()
341add_subdirectory(SPIRV)342add_subdirectory(SPIRV)
342if(ENABLE_HLSL)343if(ENABLE_HLSL)
343 add_subdirectory(hlsl)344 add_subdirectory(hlsl)
344-endif()345+endif(ENABLE_HLSL)
345if(ENABLE_CTEST)346if(ENABLE_CTEST)
346 add_subdirectory(gtests)347 add_subdirectory(gtests)
347endif()348endif()
@@ -358,48 +359,13 @@ if(ENABLE_CTEST AND BUILD_TESTING)
358 set(RESULTS_PATH ${CMAKE_CURRENT_BINARY_DIR}/$<CONFIGURATION>/localResults)359 set(RESULTS_PATH ${CMAKE_CURRENT_BINARY_DIR}/$<CONFIGURATION>/localResults)
359 set(VALIDATOR_PATH ${CMAKE_CURRENT_BINARY_DIR}/StandAlone/$<CONFIGURATION>/glslangValidator)360 set(VALIDATOR_PATH ${CMAKE_CURRENT_BINARY_DIR}/StandAlone/$<CONFIGURATION>/glslangValidator)
360 set(REMAP_PATH ${CMAKE_CURRENT_BINARY_DIR}/StandAlone/$<CONFIGURATION>/spirv-remap)361 set(REMAP_PATH ${CMAKE_CURRENT_BINARY_DIR}/StandAlone/$<CONFIGURATION>/spirv-remap)
361- else()362+ else(CMAKE_CONFIGURATION_TYPES)
362 set(RESULTS_PATH ${CMAKE_CURRENT_BINARY_DIR}/localResults)363 set(RESULTS_PATH ${CMAKE_CURRENT_BINARY_DIR}/localResults)
363 set(VALIDATOR_PATH ${CMAKE_CURRENT_BINARY_DIR}/StandAlone/glslangValidator)364 set(VALIDATOR_PATH ${CMAKE_CURRENT_BINARY_DIR}/StandAlone/glslangValidator)
364 set(REMAP_PATH ${CMAKE_CURRENT_BINARY_DIR}/StandAlone/spirv-remap)365 set(REMAP_PATH ${CMAKE_CURRENT_BINARY_DIR}/StandAlone/spirv-remap)
365- endif()366+ endif(CMAKE_CONFIGURATION_TYPES)
366 367 
367 add_test(NAME glslang-testsuite368 add_test(NAME glslang-testsuite
368 COMMAND bash ${IGNORE_CR_FLAG} runtests ${RESULTS_PATH} ${VALIDATOR_PATH} ${REMAP_PATH}369 COMMAND bash ${IGNORE_CR_FLAG} runtests ${RESULTS_PATH} ${VALIDATOR_PATH} ${REMAP_PATH}
369 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/Test/)370 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/Test/)
370endif()371endif()
371- 
372-if(ENABLE_GLSLANG_INSTALL)
373- file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/glslang-config.cmake.in" [=[
374- @PACKAGE_INIT@
375- include("@PACKAGE_PATH_EXPORT_TARGETS@")
376- ]=])
377-
378- set(PATH_EXPORT_TARGETS "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}/glslang-targets.cmake")
379- configure_package_config_file(
380- "${CMAKE_CURRENT_BINARY_DIR}/glslang-config.cmake.in"
381- "${CMAKE_CURRENT_BINARY_DIR}/glslang-config.cmake"
382- PATH_VARS
383- PATH_EXPORT_TARGETS
384- INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}
385- )
386-
387- write_basic_package_version_file("${CMAKE_CURRENT_BINARY_DIR}/glslang-config-version.cmake"
388- VERSION ${GLSLANG_VERSION}
389- COMPATIBILITY SameMajorVersion
390- )
391-
392- install(
393- EXPORT glslang-targets
394- NAMESPACE "glslang::"
395- DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}"
396- )
397-
398- install(
399- FILES
400- "${CMAKE_CURRENT_BINARY_DIR}/glslang-config.cmake"
401- "${CMAKE_CURRENT_BINARY_DIR}/glslang-config-version.cmake"
402- DESTINATION
403- "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}"
404- )
405-endif()
MLICENSE.txt+30-662
MOAT.xml+2-10
@@ -56,15 +56,10 @@ Note:If the text contains special characters, please escape them according to th
56-->56-->
57<configuration>57<configuration>
58 <oatconfig>58 <oatconfig>
59- <licensefile>LICENSE.txt</licensefile>59+ <licensefile>COPYING</licensefile>
60- <policylist>
61- <policy name="projectPolicy" desc="">
62- <policyitem type="compatibility" name="Khronos License" path="SPIRV/.*" desc="宽松型许可证,实际兼容"/>
63- </policy>
64- </policylist>
65- 
66 <filefilterlist>60 <filefilterlist>
67 <filefilter name="defaultFilter" desc="Files not to check">61 <filefilter name="defaultFilter" desc="Files not to check">
62+ <filteritem type="filepath" name=".*" desc="third party"/>
68 </filefilter>63 </filefilter>
69 <filefilter name="defaultPolicyFilter" desc="Filters for compatibility,license header policies">64 <filefilter name="defaultPolicyFilter" desc="Filters for compatibility,license header policies">
70 <filteritem type="filename" name="README.OpenSource"/>65 <filteritem type="filename" name="README.OpenSource"/>
@@ -73,8 +68,6 @@ Note:If the text contains special characters, please escape them according to th
73 <filteritem type="filename" name="doxygen.ini.in" desc="not used in ohos"/>68 <filteritem type="filename" name="doxygen.ini.in" desc="not used in ohos"/>
74 <filteritem type="filename" name="COPYING" desc="data/COPYING not used in ohos"/>69 <filteritem type="filename" name="COPYING" desc="data/COPYING not used in ohos"/>
75 <filteritem type="filename" name="DCO-1.1.txt" desc="not used in ohos"/>70 <filteritem type="filename" name="DCO-1.1.txt" desc="not used in ohos"/>
76- <filteritem type="filename" name="LICENSE.txt" desc="测试套使用不在产品里面,同时该文件是GPL3 bison exception"/>
77- <filteritem type="filepath" name="glslang/MachineIndependent/.*" desc="测试套使用不在产品里面,同时该文件是GPL3 bison exception"/>
78 </filefilter>71 </filefilter>
79 <filefilter name="copyrightPolicyFilter" desc="Filters for copyright header policies" >72 <filefilter name="copyrightPolicyFilter" desc="Filters for copyright header policies" >
80 <filteritem type="filename" name="README.OpenSource"/>73 <filteritem type="filename" name="README.OpenSource"/>
@@ -82,7 +75,6 @@ Note:If the text contains special characters, please escape them according to th
82 </filefilter>75 </filefilter>
83 <filefilter name="binaryFileTypePolicyFilter" desc="Filters for binary file policies">76 <filefilter name="binaryFileTypePolicyFilter" desc="Filters for binary file policies">
84 <filteritem type="filename" name="*.bmp|*.png|*.jpg" desc="binary not used and belonged to weston"/>77 <filteritem type="filename" name="*.bmp|*.png|*.jpg" desc="binary not used and belonged to weston"/>
85- <filteritem type="filepath" name="Test/.*" desc="上游原生二进制"/>
86 </filefilter>78 </filefilter>
87 </filefilterlist>79 </filefilterlist>
88 </oatconfig>80 </oatconfig>
@@ -41,19 +41,8 @@ if(WIN32)
41 source_group("Source" FILES ${SOURCES})41 source_group("Source" FILES ${SOURCES})
42endif(WIN32)42endif(WIN32)
43 43 
44-if(ENABLE_GLSLANG_INSTALL AND NOT BUILD_SHARED_LIBS)44+if(ENABLE_GLSLANG_INSTALL)
45- install(TARGETS OGLCompiler EXPORT glslang-targets)45+ install(TARGETS OGLCompiler EXPORT OGLCompilerTargets
46- 46+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
47- # Backward compatibility47+ install(EXPORT OGLCompilerTargets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake)
48- file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/OGLCompilerTargets.cmake" "48+endif(ENABLE_GLSLANG_INSTALL)
49- message(WARNING \"Using `OGLCompilerTargets.cmake` is deprecated: use `find_package(glslang)` to find glslang CMake targets.\")
50- 
51- if (NOT TARGET glslang::OGLCompiler)
52- include(\"\${CMAKE_CURRENT_LIST_DIR}/../../${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}/glslang-targets.cmake\")
53- endif()
54- 
55- add_library(OGLCompiler ALIAS glslang::OGLCompiler)
56- ")
57- install(FILES "${CMAKE_CURRENT_BINARY_DIR}/OGLCompilerTargets.cmake" DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake)
58- 
59-endif()
@@ -102,7 +102,7 @@ bool InitThread()
102 return false;102 return false;
103 }103 }
104 104 
105- if (OS_GetTLSValue(ThreadInitializeIndex) != nullptr)105+ if (OS_GetTLSValue(ThreadInitializeIndex) != 0)
106 return true;106 return true;
107 107 
108 if (! OS_SetTLSValue(ThreadInitializeIndex, (void *)1)) {108 if (! OS_SetTLSValue(ThreadInitializeIndex, (void *)1)) {
@@ -130,8 +130,8 @@ bool DetachThread()
130 //130 //
131 // Function is re-entrant and this thread may not have been initialized.131 // Function is re-entrant and this thread may not have been initialized.
132 //132 //
133- if (OS_GetTLSValue(ThreadInitializeIndex) != nullptr) {133+ if (OS_GetTLSValue(ThreadInitializeIndex) != 0) {
134- if (!OS_SetTLSValue(ThreadInitializeIndex, nullptr)) {134+ if (!OS_SetTLSValue(ThreadInitializeIndex, (void *)0)) {
135 assert(0 && "DetachThread(): Unable to clear init flag.");135 assert(0 && "DetachThread(): Unable to clear init flag.");
136 success = false;136 success = false;
137 }137 }
@@ -3,7 +3,7 @@
3 "Name": "glslang",3 "Name": "glslang",
4 "License": "Apache-2.0",4 "License": "Apache-2.0",
5 "License File": "LICENSE",5 "License File": "LICENSE",
6- "Version Number": "11.13.0",6+ "Version Number": "11.0.0",
7 "Owner": "zhangleiyu1@huawei.com",7 "Owner": "zhangleiyu1@huawei.com",
8 "Upstream URL": "https://github.com/KhronosGroup/glslang.git",8 "Upstream URL": "https://github.com/KhronosGroup/glslang.git",
9 "Description": "GLSlang is an advanced shader language."9 "Description": "GLSlang is an advanced shader language."
MREADME.md+5-93
@@ -19,8 +19,8 @@ See issue #1964.
19 19 
20If people are only using this location to get spirv.hpp, I recommend they get that from [SPIRV-Headers](https://github.com/KhronosGroup/SPIRV-Headers) instead.20If people are only using this location to get spirv.hpp, I recommend they get that from [SPIRV-Headers](https://github.com/KhronosGroup/SPIRV-Headers) instead.
21 21 
22-[![appveyor status](https://ci.appveyor.com/api/projects/status/q6fi9cb0qnhkla68/branch/master?svg=true)](https://ci.appveyor.com/project/Khronoswebmaster/glslang/branch/master)22+[![Build Status](https://travis-ci.org/KhronosGroup/glslang.svg?branch=master)](https://travis-ci.org/KhronosGroup/glslang)
23-![Continuous Deployment](https://github.com/KhronosGroup/glslang/actions/workflows/continuous_deployment.yml/badge.svg)23+[![Build status](https://ci.appveyor.com/api/projects/status/q6fi9cb0qnhkla68/branch/master?svg=true)](https://ci.appveyor.com/project/Khronoswebmaster/glslang/branch/master)
24 24 
25# Glslang Components and Status25# Glslang Components and Status
26 26 
@@ -85,15 +85,7 @@ The applied stage-specific rules are based on the file extension:
85* `.frag` for a fragment shader85* `.frag` for a fragment shader
86* `.comp` for a compute shader86* `.comp` for a compute shader
87 87 
88-For ray tracing pipeline shaders:88+There is also a non-shader extension
89-* `.rgen` for a ray generation shader
90-* `.rint` for a ray intersection shader
91-* `.rahit` for a ray any-hit shader
92-* `.rchit` for a ray closest-hit shader
93-* `.rmiss` for a ray miss shader
94-* `.rcall` for a callable shader
95- 
96-There is also a non-shader extension:
97* `.conf` for a configuration file of limits, see usage statement for example89* `.conf` for a configuration file of limits, see usage statement for example
98 90 
99## Building (CMake)91## Building (CMake)
@@ -133,15 +125,6 @@ cd <the directory glslang was cloned to, "External" will be a subdirectory>
133git clone https://github.com/google/googletest.git External/googletest125git clone https://github.com/google/googletest.git External/googletest
134```126```
135 127 
136-TEMPORARY NOTICE: additionally perform the following to avoid a current
137-breakage in googletest:
138- 
139-```bash
140-cd External/googletest
141-git checkout 0c400f67fcf305869c5fb113dd296eca266c9725
142-cd ../..
143-```
144- 
145If you wish to assure that SPIR-V generated from HLSL is legal for Vulkan,128If you wish to assure that SPIR-V generated from HLSL is legal for Vulkan,
146wish to invoke -Os to reduce SPIR-V size from HLSL or GLSL, or wish to run the129wish to invoke -Os to reduce SPIR-V size from HLSL or GLSL, or wish to run the
147integrated test suite, install spirv-tools with this:130integrated test suite, install spirv-tools with this:
@@ -169,8 +152,8 @@ cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX="$(pwd)/install" $SOURCE
169 152 
170For building on Android:153For building on Android:
171```bash154```bash
172-cmake $SOURCE_DIR -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$(pwd)/install" -DANDROID_ABI=arm64-v8a -DCMAKE_BUILD_TYPE=Release -DANDROID_STL=c++_static -DANDROID_PLATFORM=android-24 -DCMAKE_SYSTEM_NAME=Android -DANDROID_TOOLCHAIN=clang -DANDROID_ARM_MODE=arm -DCMAKE_MAKE_PROGRAM=$ANDROID_NDK_HOME/prebuilt/linux-x86_64/bin/make -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_HOME/build/cmake/android.toolchain.cmake155+cmake $SOURCE_DIR -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$(pwd)/install" -DANDROID_ABI=arm64-v8a -DCMAKE_BUILD_TYPE=Release -DANDROID_STL=c++_static -DANDROID_PLATFORM=android-24 -DCMAKE_SYSTEM_NAME=Android -DANDROID_TOOLCHAIN=clang -DANDROID_ARM_MODE=arm -DCMAKE_MAKE_PROGRAM=$ANDROID_NDK_ROOT/prebuilt/linux-x86_64/bin/make -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_ROOT/build/cmake/android.toolchain.cmake
173-# If on Windows will be -DCMAKE_MAKE_PROGRAM=%ANDROID_NDK_HOME%\prebuilt\windows-x86_64\bin\make.exe156+# If on Windows will be -DCMAKE_MAKE_PROGRAM=%ANDROID_NDK_ROOT%\prebuilt\windows-x86_64\bin\make.exe
174# -G is needed for building on Windows157# -G is needed for building on Windows
175# -DANDROID_ABI can also be armeabi-v7a for 32 bit158# -DANDROID_ABI can also be armeabi-v7a for 32 bit
176```159```
@@ -429,77 +412,6 @@ ShCompile(shader, compiler) -> compiler(AST) -> <back end>
429In practice, `ShCompile()` takes shader strings, default version, and412In practice, `ShCompile()` takes shader strings, default version, and
430warning/error and other options for controlling compilation.413warning/error and other options for controlling compilation.
431 414 
432-### C Functional Interface (new)
433- 
434-This interface is located `glslang_c_interface.h` and exposes functionality similar to the C++ interface. The following snippet is a complete example showing how to compile GLSL into SPIR-V 1.5 for Vulkan 1.2.
435- 
436-```cxx
437-std::vector<uint32_t> compileShaderToSPIRV_Vulkan(glslang_stage_t stage, const char* shaderSource, const char* fileName)
438-{
439- const glslang_input_t input = {
440- .language = GLSLANG_SOURCE_GLSL,
441- .stage = stage,
442- .client = GLSLANG_CLIENT_VULKAN,
443- .client_version = GLSLANG_TARGET_VULKAN_1_2,
444- .target_language = GLSLANG_TARGET_SPV,
445- .target_language_version = GLSLANG_TARGET_SPV_1_5,
446- .code = shaderSource,
447- .default_version = 100,
448- .default_profile = GLSLANG_NO_PROFILE,
449- .force_default_version_and_profile = false,
450- .forward_compatible = false,
451- .messages = GLSLANG_MSG_DEFAULT_BIT,
452- .resource = reinterpret_cast<const glslang_resource_t*>(&glslang::DefaultTBuiltInResource),
453- };
454- 
455- glslang_shader_t* shader = glslang_shader_create(&input);
456- 
457- if (!glslang_shader_preprocess(shader, &input)) {
458- printf("GLSL preprocessing failed %s\n", fileName);
459- printf("%s\n", glslang_shader_get_info_log(shader));
460- printf("%s\n", glslang_shader_get_info_debug_log(shader));
461- printf("%s\n", input.code);
462- glslang_shader_delete(shader);
463- return std::vector<uint32_t>();
464- }
465- 
466- if (!glslang_shader_parse(shader, &input)) {
467- printf("GLSL parsing failed %s\n", fileName);
468- printf("%s\n", glslang_shader_get_info_log(shader));
469- printf("%s\n", glslang_shader_get_info_debug_log(shader));
470- printf("%s\n", glslang_shader_get_preprocessed_code(shader));
471- glslang_shader_delete(shader);
472- return std::vector<uint32_t>();
473- }
474- 
475- glslang_program_t* program = glslang_program_create();
476- glslang_program_add_shader(program, shader);
477- 
478- if (!glslang_program_link(program, GLSLANG_MSG_SPV_RULES_BIT | GLSLANG_MSG_VULKAN_RULES_BIT)) {
479- printf("GLSL linking failed %s\n", fileName);
480- printf("%s\n", glslang_program_get_info_log(program));
481- printf("%s\n", glslang_program_get_info_debug_log(program));
482- glslang_program_delete(program);
483- glslang_shader_delete(shader);
484- return std::vector<uint32_t>();
485- }
486- 
487- glslang_program_SPIRV_generate(program, stage);
488- 
489- std::vector<uint32_t> outShaderModule(glslang_program_SPIRV_get_size(program));
490- glslang_program_SPIRV_get(program, outShaderModule.data());
491- 
492- const char* spirv_messages = glslang_program_SPIRV_get_messages(program);
493- if (spirv_messages)
494- printf("(%s) %s\b", fileName, spirv_messages);
495- 
496- glslang_program_delete(program);
497- glslang_shader_delete(shader);
498- 
499- return outShaderModule;
500-}
501-```
502- 
503## Basic Internal Operation415## Basic Internal Operation
504 416 
505* Initial lexical analysis is done by the preprocessor in417* Initial lexical analysis is done by the preprocessor in
@@ -29,8 +29,6 @@ config("SPIRV_config") {
29 "-fno-rtti",29 "-fno-rtti",
30 "-fno-exceptions",30 "-fno-exceptions",
31 "-Wno-sign-compare",31 "-Wno-sign-compare",
32- "-Wno-unused-parameter",
33- "-std=c++11",
34 ]32 ]
35 33 
36 defines = deqp_common_defines34 defines = deqp_common_defines
@@ -36,8 +36,6 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36#include "SPIRV/Logger.h"36#include "SPIRV/Logger.h"
37#include "SPIRV/SpvTools.h"37#include "SPIRV/SpvTools.h"
38 38 
39-static_assert(sizeof(glslang_spv_options_t) == sizeof(glslang::SpvOptions), "");
40- 
41typedef struct glslang_program_s {39typedef struct glslang_program_s {
42 glslang::TProgram* program;40 glslang::TProgram* program;
43 std::vector<unsigned int> spirv;41 std::vector<unsigned int> spirv;
@@ -59,22 +57,22 @@ static EShLanguage c_shader_stage(glslang_stage_t stage)
59 return EShLangFragment;57 return EShLangFragment;
60 case GLSLANG_STAGE_COMPUTE:58 case GLSLANG_STAGE_COMPUTE:
61 return EShLangCompute;59 return EShLangCompute;
62- case GLSLANG_STAGE_RAYGEN:60+ case GLSLANG_STAGE_RAYGEN_NV:
63 return EShLangRayGen;61 return EShLangRayGen;
64- case GLSLANG_STAGE_INTERSECT:62+ case GLSLANG_STAGE_INTERSECT_NV:
65 return EShLangIntersect;63 return EShLangIntersect;
66- case GLSLANG_STAGE_ANYHIT:64+ case GLSLANG_STAGE_ANYHIT_NV:
67 return EShLangAnyHit;65 return EShLangAnyHit;
68- case GLSLANG_STAGE_CLOSESTHIT:66+ case GLSLANG_STAGE_CLOSESTHIT_NV:
69 return EShLangClosestHit;67 return EShLangClosestHit;
70- case GLSLANG_STAGE_MISS:68+ case GLSLANG_STAGE_MISS_NV:
71 return EShLangMiss;69 return EShLangMiss;
72- case GLSLANG_STAGE_CALLABLE:70+ case GLSLANG_STAGE_CALLABLE_NV:
73 return EShLangCallable;71 return EShLangCallable;
74- case GLSLANG_STAGE_TASK:72+ case GLSLANG_STAGE_TASK_NV:
75- return EShLangTask;73+ return EShLangTaskNV;
76- case GLSLANG_STAGE_MESH:74+ case GLSLANG_STAGE_MESH_NV:
77- return EShLangMesh;75+ return EShLangMeshNV;
78 default:76 default:
79 break;77 break;
80 }78 }
@@ -83,25 +81,13 @@ static EShLanguage c_shader_stage(glslang_stage_t stage)
83 81 
84GLSLANG_EXPORT void glslang_program_SPIRV_generate(glslang_program_t* program, glslang_stage_t stage)82GLSLANG_EXPORT void glslang_program_SPIRV_generate(glslang_program_t* program, glslang_stage_t stage)
85{83{
86- glslang_spv_options_t spv_options;
87- spv_options.generate_debug_info = false;
88- spv_options.strip_debug_info = false;
89- spv_options.emit_nonsemantic_shader_debug_info = false;
90- spv_options.emit_nonsemantic_shader_debug_source = false;
91- spv_options.disable_optimizer = true;
92- spv_options.optimize_size = false;
93- spv_options.disassemble = false;
94- spv_options.validate = true;
95- 
96- glslang_program_SPIRV_generate_with_options(program, stage, &spv_options);
97-}
98- 
99-GLSLANG_EXPORT void glslang_program_SPIRV_generate_with_options(glslang_program_t* program, glslang_stage_t stage, glslang_spv_options_t* spv_options) {
100 spv::SpvBuildLogger logger;84 spv::SpvBuildLogger logger;
85+ glslang::SpvOptions spvOptions;
86+ spvOptions.validate = true;
101 87 
102 const glslang::TIntermediate* intermediate = program->program->getIntermediate(c_shader_stage(stage));88 const glslang::TIntermediate* intermediate = program->program->getIntermediate(c_shader_stage(stage));
103 89 
104- glslang::GlslangToSpv(*intermediate, program->spirv, &logger, reinterpret_cast<glslang::SpvOptions*>(spv_options));90+ glslang::GlslangToSpv(*intermediate, program->spirv, &logger, &spvOptions);
105 91 
106 program->loggerMessages = logger.getAllMessages();92 program->loggerMessages = logger.getAllMessages();
107}93}
@@ -62,9 +62,7 @@ set(HEADERS
62 disassemble.h62 disassemble.h
63 GLSL.ext.AMD.h63 GLSL.ext.AMD.h
64 GLSL.ext.NV.h64 GLSL.ext.NV.h
65- GLSL.ext.ARM.h65+ NonSemanticDebugPrintf.h)
66- NonSemanticDebugPrintf.h
67- NonSemanticShaderDebugInfo100.h)
68 66 
69set(SPVREMAP_HEADERS67set(SPVREMAP_HEADERS
70 SPVRemapper.h68 SPVRemapper.h
@@ -103,44 +101,38 @@ if(ENABLE_OPT)
103 $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/External>)101 $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/External>)
104else()102else()
105 target_link_libraries(SPIRV PRIVATE MachineIndependent)103 target_link_libraries(SPIRV PRIVATE MachineIndependent)
106-endif()104+endif(ENABLE_OPT)
107 105 
108if(WIN32)106if(WIN32)
109 source_group("Source" FILES ${SOURCES} ${HEADERS})107 source_group("Source" FILES ${SOURCES} ${HEADERS})
110 source_group("Source" FILES ${SPVREMAP_SOURCES} ${SPVREMAP_HEADERS})108 source_group("Source" FILES ${SPVREMAP_SOURCES} ${SPVREMAP_HEADERS})
111-endif()109+endif(WIN32)
112 110 
113if(ENABLE_GLSLANG_INSTALL)111if(ENABLE_GLSLANG_INSTALL)
114- if (ENABLE_SPVREMAPPER)112+ if(BUILD_SHARED_LIBS)
115- install(TARGETS SPVRemapper EXPORT glslang-targets)113+ if (ENABLE_SPVREMAPPER)
116- endif()114+ install(TARGETS SPVRemapper EXPORT SPVRemapperTargets
117- 115+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
118- install(TARGETS SPIRV EXPORT glslang-targets)116+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
119- 
120- # Backward compatibility
121- if (ENABLE_SPVREMAPPER)
122- file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/SPVRemapperTargets.cmake" "
123- message(WARNING \"Using `SPVRemapperTargets.cmake` is deprecated: use `find_package(glslang)` to find glslang CMake targets.\")
124- 
125- if (NOT TARGET glslang::SPVRemapper)
126- include(\"\${CMAKE_CURRENT_LIST_DIR}/../../${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}/glslang-targets.cmake\")
127- endif()
128- 
129- add_library(SPVRemapper ALIAS glslang::SPVRemapper)
130- ")
131- install(FILES "${CMAKE_CURRENT_BINARY_DIR}/SPVRemapperTargets.cmake" DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake)
132- endif()
133- 
134- file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/SPIRVTargets.cmake" "
135- message(WARNING \"Using `SPIRVTargets.cmake` is deprecated: use `find_package(glslang)` to find glslang CMake targets.\")
136- 
137- if (NOT TARGET glslang::SPIRV)
138- include(\"\${CMAKE_CURRENT_LIST_DIR}/../../${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}/glslang-targets.cmake\")
139 endif()117 endif()
118+ install(TARGETS SPIRV EXPORT SPIRVTargets
119+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
120+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
121+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
122+ else()
123+ if (ENABLE_SPVREMAPPER)
124+ install(TARGETS SPVRemapper EXPORT SPVRemapperTargets
125+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
126+ endif()
127+ install(TARGETS SPIRV EXPORT SPIRVTargets
128+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
129+ endif()
140 130 
141- add_library(SPIRV ALIAS glslang::SPIRV)131+ if (ENABLE_SPVREMAPPER)
142- ")132+ install(EXPORT SPVRemapperTargets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake)
143- install(FILES "${CMAKE_CURRENT_BINARY_DIR}/SPIRVTargets.cmake" DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake)133+ endif()
134+ 
135+ install(EXPORT SPIRVTargets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake)
144 136 
145 install(FILES ${HEADERS} ${SPVREMAP_HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/glslang/SPIRV/)137 install(FILES ${HEADERS} ${SPVREMAP_HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/glslang/SPIRV/)
146-endif()138+endif(ENABLE_GLSLANG_INSTALL)
@@ -1,35 +0,0 @@
1-/*
2-** Copyright (c) 2022 ARM Limited
3-**
4-** Permission is hereby granted, free of charge, to any person obtaining a copy
5-** of this software and/or associated documentation files (the "Materials"),
6-** to deal in the Materials without restriction, including without limitation
7-** the rights to use, copy, modify, merge, publish, distribute, sublicense,
8-** and/or sell copies of the Materials, and to permit persons to whom the
9-** Materials are furnished to do so, subject to the following conditions:
10-**
11-** The above copyright notice and this permission notice shall be included in
12-** all copies or substantial portions of the Materials.
13-**
14-** MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS
15-** STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND
16-** HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/
17-**
18-** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
19-** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20-** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
21-** THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22-** LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
23-** FROM,OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS
24-** IN THE MATERIALS.
25-*/
26- 
27-#ifndef GLSLextARM_H
28-#define GLSLextARM_H
29- 
30-static const int GLSLextARMVersion = 100;
31-static const int GLSLextARMRevision = 1;
32- 
33-static const char * const E_SPV_ARM_core_builtins = "SPV_ARM_core_builtins";
34- 
35-#endif // #ifndef GLSLextARM_H
@@ -36,9 +36,5 @@ static const char* const E_SPV_EXT_fragment_fully_covered = "SPV_EXT_fragment_fu
36static const char* const E_SPV_EXT_fragment_invocation_density = "SPV_EXT_fragment_invocation_density";36static const char* const E_SPV_EXT_fragment_invocation_density = "SPV_EXT_fragment_invocation_density";
37static const char* const E_SPV_EXT_demote_to_helper_invocation = "SPV_EXT_demote_to_helper_invocation";37static const char* const E_SPV_EXT_demote_to_helper_invocation = "SPV_EXT_demote_to_helper_invocation";
38static const char* const E_SPV_EXT_shader_atomic_float_add = "SPV_EXT_shader_atomic_float_add";38static const char* const E_SPV_EXT_shader_atomic_float_add = "SPV_EXT_shader_atomic_float_add";
39-static const char* const E_SPV_EXT_shader_atomic_float16_add = "SPV_EXT_shader_atomic_float16_add";
40-static const char* const E_SPV_EXT_shader_atomic_float_min_max = "SPV_EXT_shader_atomic_float_min_max";
41-static const char* const E_SPV_EXT_shader_image_int64 = "SPV_EXT_shader_image_int64";
42-static const char* const E_SPV_EXT_mesh_shader = "SPV_EXT_mesh_shader";
43 39 
44#endif // #ifndef GLSLextEXT_H40#endif // #ifndef GLSLextEXT_H
@@ -29,7 +29,7 @@
29#define GLSLextKHR_H29#define GLSLextKHR_H
30 30 
31static const int GLSLextKHRVersion = 100;31static const int GLSLextKHRVersion = 100;
32-static const int GLSLextKHRRevision = 3;32+static const int GLSLextKHRRevision = 2;
33 33 
34static const char* const E_SPV_KHR_shader_ballot = "SPV_KHR_shader_ballot";34static const char* const E_SPV_KHR_shader_ballot = "SPV_KHR_shader_ballot";
35static const char* const E_SPV_KHR_subgroup_vote = "SPV_KHR_subgroup_vote";35static const char* const E_SPV_KHR_subgroup_vote = "SPV_KHR_subgroup_vote";
@@ -49,10 +49,4 @@ static const char* const E_SPV_KHR_non_semantic_info = "SPV_KHR_non_s
49static const char* const E_SPV_KHR_ray_tracing = "SPV_KHR_ray_tracing";49static const char* const E_SPV_KHR_ray_tracing = "SPV_KHR_ray_tracing";
50static const char* const E_SPV_KHR_ray_query = "SPV_KHR_ray_query";50static const char* const E_SPV_KHR_ray_query = "SPV_KHR_ray_query";
51static const char* const E_SPV_KHR_fragment_shading_rate = "SPV_KHR_fragment_shading_rate";51static const char* const E_SPV_KHR_fragment_shading_rate = "SPV_KHR_fragment_shading_rate";
52-static const char* const E_SPV_KHR_terminate_invocation = "SPV_KHR_terminate_invocation";
53-static const char* const E_SPV_KHR_workgroup_memory_explicit_layout = "SPV_KHR_workgroup_memory_explicit_layout";
54-static const char* const E_SPV_KHR_subgroup_uniform_control_flow = "SPV_KHR_subgroup_uniform_control_flow";
55-static const char* const E_SPV_KHR_fragment_shader_barycentric = "SPV_KHR_fragment_shader_barycentric";
56-static const char* const E_SPV_AMD_shader_early_and_late_fragment_tests = "SPV_AMD_shader_early_and_late_fragment_tests";
57- 
58#endif // #ifndef GLSLextKHR_H52#endif // #ifndef GLSLextKHR_H
@@ -69,9 +69,6 @@ const char* const E_SPV_NV_mesh_shader = "SPV_NV_mesh_shader";
69//SPV_NV_raytracing69//SPV_NV_raytracing
70const char* const E_SPV_NV_ray_tracing = "SPV_NV_ray_tracing";70const char* const E_SPV_NV_ray_tracing = "SPV_NV_ray_tracing";
71 71 
72-//SPV_NV_ray_tracing_motion_blur
73-const char* const E_SPV_NV_ray_tracing_motion_blur = "SPV_NV_ray_tracing_motion_blur";
74- 
75//SPV_NV_shading_rate72//SPV_NV_shading_rate
76const char* const E_SPV_NV_shading_rate = "SPV_NV_shading_rate";73const char* const E_SPV_NV_shading_rate = "SPV_NV_shading_rate";
77 74 
@@ -1,171 +0,0 @@
1-// Copyright (c) 2018 The Khronos Group Inc.
2-//
3-// Permission is hereby granted, free of charge, to any person obtaining a copy
4-// of this software and/or associated documentation files (the "Materials"),
5-// to deal in the Materials without restriction, including without limitation
6-// the rights to use, copy, modify, merge, publish, distribute, sublicense,
7-// and/or sell copies of the Materials, and to permit persons to whom the
8-// Materials are furnished to do so, subject to the following conditions:
9-//
10-// The above copyright notice and this permission notice shall be included in
11-// all copies or substantial portions of the Materials.
12-//
13-// MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS
14-// STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND
15-// HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/
16-//
17-// THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
18-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
20-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
22-// FROM,OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS
23-// IN THE MATERIALS.
24- 
25-#ifndef SPIRV_UNIFIED1_NonSemanticShaderDebugInfo100_H_
26-#define SPIRV_UNIFIED1_NonSemanticShaderDebugInfo100_H_
27- 
28-#ifdef __cplusplus
29-extern "C" {
30-#endif
31- 
32-enum {
33- NonSemanticShaderDebugInfo100Version = 100,
34- NonSemanticShaderDebugInfo100Version_BitWidthPadding = 0x7fffffff
35-};
36-enum {
37- NonSemanticShaderDebugInfo100Revision = 6,
38- NonSemanticShaderDebugInfo100Revision_BitWidthPadding = 0x7fffffff
39-};
40- 
41-enum NonSemanticShaderDebugInfo100Instructions {
42- NonSemanticShaderDebugInfo100DebugInfoNone = 0,
43- NonSemanticShaderDebugInfo100DebugCompilationUnit = 1,
44- NonSemanticShaderDebugInfo100DebugTypeBasic = 2,
45- NonSemanticShaderDebugInfo100DebugTypePointer = 3,
46- NonSemanticShaderDebugInfo100DebugTypeQualifier = 4,
47- NonSemanticShaderDebugInfo100DebugTypeArray = 5,
48- NonSemanticShaderDebugInfo100DebugTypeVector = 6,
49- NonSemanticShaderDebugInfo100DebugTypedef = 7,
50- NonSemanticShaderDebugInfo100DebugTypeFunction = 8,
51- NonSemanticShaderDebugInfo100DebugTypeEnum = 9,
52- NonSemanticShaderDebugInfo100DebugTypeComposite = 10,
53- NonSemanticShaderDebugInfo100DebugTypeMember = 11,
54- NonSemanticShaderDebugInfo100DebugTypeInheritance = 12,
55- NonSemanticShaderDebugInfo100DebugTypePtrToMember = 13,
56- NonSemanticShaderDebugInfo100DebugTypeTemplate = 14,
57- NonSemanticShaderDebugInfo100DebugTypeTemplateParameter = 15,
58- NonSemanticShaderDebugInfo100DebugTypeTemplateTemplateParameter = 16,
59- NonSemanticShaderDebugInfo100DebugTypeTemplateParameterPack = 17,
60- NonSemanticShaderDebugInfo100DebugGlobalVariable = 18,
61- NonSemanticShaderDebugInfo100DebugFunctionDeclaration = 19,
62- NonSemanticShaderDebugInfo100DebugFunction = 20,
63- NonSemanticShaderDebugInfo100DebugLexicalBlock = 21,
64- NonSemanticShaderDebugInfo100DebugLexicalBlockDiscriminator = 22,
65- NonSemanticShaderDebugInfo100DebugScope = 23,
66- NonSemanticShaderDebugInfo100DebugNoScope = 24,
67- NonSemanticShaderDebugInfo100DebugInlinedAt = 25,
68- NonSemanticShaderDebugInfo100DebugLocalVariable = 26,
69- NonSemanticShaderDebugInfo100DebugInlinedVariable = 27,
70- NonSemanticShaderDebugInfo100DebugDeclare = 28,
71- NonSemanticShaderDebugInfo100DebugValue = 29,
72- NonSemanticShaderDebugInfo100DebugOperation = 30,
73- NonSemanticShaderDebugInfo100DebugExpression = 31,
74- NonSemanticShaderDebugInfo100DebugMacroDef = 32,
75- NonSemanticShaderDebugInfo100DebugMacroUndef = 33,
76- NonSemanticShaderDebugInfo100DebugImportedEntity = 34,
77- NonSemanticShaderDebugInfo100DebugSource = 35,
78- NonSemanticShaderDebugInfo100DebugFunctionDefinition = 101,
79- NonSemanticShaderDebugInfo100DebugSourceContinued = 102,
80- NonSemanticShaderDebugInfo100DebugLine = 103,
81- NonSemanticShaderDebugInfo100DebugNoLine = 104,
82- NonSemanticShaderDebugInfo100DebugBuildIdentifier = 105,
83- NonSemanticShaderDebugInfo100DebugStoragePath = 106,
84- NonSemanticShaderDebugInfo100DebugEntryPoint = 107,
85- NonSemanticShaderDebugInfo100DebugTypeMatrix = 108,
86- NonSemanticShaderDebugInfo100InstructionsMax = 0x7fffffff
87-};
88- 
89- 
90-enum NonSemanticShaderDebugInfo100DebugInfoFlags {
91- NonSemanticShaderDebugInfo100None = 0x0000,
92- NonSemanticShaderDebugInfo100FlagIsProtected = 0x01,
93- NonSemanticShaderDebugInfo100FlagIsPrivate = 0x02,
94- NonSemanticShaderDebugInfo100FlagIsPublic = 0x03,
95- NonSemanticShaderDebugInfo100FlagIsLocal = 0x04,
96- NonSemanticShaderDebugInfo100FlagIsDefinition = 0x08,
97- NonSemanticShaderDebugInfo100FlagFwdDecl = 0x10,
98- NonSemanticShaderDebugInfo100FlagArtificial = 0x20,
99- NonSemanticShaderDebugInfo100FlagExplicit = 0x40,
100- NonSemanticShaderDebugInfo100FlagPrototyped = 0x80,
101- NonSemanticShaderDebugInfo100FlagObjectPointer = 0x100,
102- NonSemanticShaderDebugInfo100FlagStaticMember = 0x200,
103- NonSemanticShaderDebugInfo100FlagIndirectVariable = 0x400,
104- NonSemanticShaderDebugInfo100FlagLValueReference = 0x800,
105- NonSemanticShaderDebugInfo100FlagRValueReference = 0x1000,
106- NonSemanticShaderDebugInfo100FlagIsOptimized = 0x2000,
107- NonSemanticShaderDebugInfo100FlagIsEnumClass = 0x4000,
108- NonSemanticShaderDebugInfo100FlagTypePassByValue = 0x8000,
109- NonSemanticShaderDebugInfo100FlagTypePassByReference = 0x10000,
110- NonSemanticShaderDebugInfo100FlagUnknownPhysicalLayout = 0x20000,
111- NonSemanticShaderDebugInfo100DebugInfoFlagsMax = 0x7fffffff
112-};
113- 
114-enum NonSemanticShaderDebugInfo100BuildIdentifierFlags {
115- NonSemanticShaderDebugInfo100IdentifierPossibleDuplicates = 0x01,
116- NonSemanticShaderDebugInfo100BuildIdentifierFlagsMax = 0x7fffffff
117-};
118- 
119-enum NonSemanticShaderDebugInfo100DebugBaseTypeAttributeEncoding {
120- NonSemanticShaderDebugInfo100Unspecified = 0,
121- NonSemanticShaderDebugInfo100Address = 1,
122- NonSemanticShaderDebugInfo100Boolean = 2,
123- NonSemanticShaderDebugInfo100Float = 3,
124- NonSemanticShaderDebugInfo100Signed = 4,
125- NonSemanticShaderDebugInfo100SignedChar = 5,
126- NonSemanticShaderDebugInfo100Unsigned = 6,
127- NonSemanticShaderDebugInfo100UnsignedChar = 7,
128- NonSemanticShaderDebugInfo100DebugBaseTypeAttributeEncodingMax = 0x7fffffff
129-};
130- 
131-enum NonSemanticShaderDebugInfo100DebugCompositeType {
132- NonSemanticShaderDebugInfo100Class = 0,
133- NonSemanticShaderDebugInfo100Structure = 1,
134- NonSemanticShaderDebugInfo100Union = 2,
135- NonSemanticShaderDebugInfo100DebugCompositeTypeMax = 0x7fffffff
136-};
137- 
138-enum NonSemanticShaderDebugInfo100DebugTypeQualifier {
139- NonSemanticShaderDebugInfo100ConstType = 0,
140- NonSemanticShaderDebugInfo100VolatileType = 1,
141- NonSemanticShaderDebugInfo100RestrictType = 2,
142- NonSemanticShaderDebugInfo100AtomicType = 3,
143- NonSemanticShaderDebugInfo100DebugTypeQualifierMax = 0x7fffffff
144-};
145- 
146-enum NonSemanticShaderDebugInfo100DebugOperation {
147- NonSemanticShaderDebugInfo100Deref = 0,
148- NonSemanticShaderDebugInfo100Plus = 1,
149- NonSemanticShaderDebugInfo100Minus = 2,
150- NonSemanticShaderDebugInfo100PlusUconst = 3,
151- NonSemanticShaderDebugInfo100BitPiece = 4,
152- NonSemanticShaderDebugInfo100Swap = 5,
153- NonSemanticShaderDebugInfo100Xderef = 6,
154- NonSemanticShaderDebugInfo100StackValue = 7,
155- NonSemanticShaderDebugInfo100Constu = 8,
156- NonSemanticShaderDebugInfo100Fragment = 9,
157- NonSemanticShaderDebugInfo100DebugOperationMax = 0x7fffffff
158-};
159- 
160-enum NonSemanticShaderDebugInfo100DebugImportedEntity {
161- NonSemanticShaderDebugInfo100ImportedModule = 0,
162- NonSemanticShaderDebugInfo100ImportedDeclaration = 1,
163- NonSemanticShaderDebugInfo100DebugImportedEntityMax = 0x7fffffff
164-};
165- 
166- 
167-#ifdef __cplusplus
168-}
169-#endif
170- 
171-#endif // SPIRV_UNIFIED1_NonSemanticShaderDebugInfo100_H_
@@ -160,29 +160,15 @@ namespace spv {
160 }160 }
161 161 
162 // Is this an opcode we should remove when using --strip?162 // Is this an opcode we should remove when using --strip?
163- bool spirvbin_t::isStripOp(spv::Op opCode, unsigned start) const163+ bool spirvbin_t::isStripOp(spv::Op opCode) const
164 {164 {
165 switch (opCode) {165 switch (opCode) {
166 case spv::OpSource:166 case spv::OpSource:
167 case spv::OpSourceExtension:167 case spv::OpSourceExtension:
168 case spv::OpName:168 case spv::OpName:
169 case spv::OpMemberName:169 case spv::OpMemberName:
170- case spv::OpLine :170+ case spv::OpLine: return true;
171- {171+ default: return false;
172- const std::string name = literalString(start + 2);
173- 
174- std::vector<std::string>::const_iterator it;
175- for (it = stripWhiteList.begin(); it < stripWhiteList.end(); it++)
176- {
177- if (name.find(*it) != std::string::npos) {
178- return false;
179- }
180- }
181- 
182- return true;
183- }
184- default :
185- return false;
186 }172 }
187 }173 }
188 174 
@@ -311,21 +297,15 @@ namespace spv {
311 std::string spirvbin_t::literalString(unsigned word) const297 std::string spirvbin_t::literalString(unsigned word) const
312 {298 {
313 std::string literal;299 std::string literal;
314- const spirword_t * pos = spv.data() + word;
315 300 
316 literal.reserve(16);301 literal.reserve(16);
317 302 
318- do {303+ const char* bytes = reinterpret_cast<const char*>(spv.data() + word);
319- spirword_t word = *pos;304+ 
320- for (int i = 0; i < 4; i++) {305+ while (bytes && *bytes)
321- char c = word & 0xff;306+ literal += *bytes++;
322- if (c == '\0')307+ 
323- return literal;308+ return literal;
324- literal += c;
325- word >>= 8;
326- }
327- pos++;
328- } while (true);
329 }309 }
330 310 
331 void spirvbin_t::applyMap()311 void spirvbin_t::applyMap()
@@ -386,7 +366,7 @@ namespace spv {
386 process(366 process(
387 [&](spv::Op opCode, unsigned start) {367 [&](spv::Op opCode, unsigned start) {
388 // remember opcodes we want to strip later368 // remember opcodes we want to strip later
389- if (isStripOp(opCode, start))369+ if (isStripOp(opCode))
390 stripInst(start);370 stripInst(start);
391 return true;371 return true;
392 },372 },
@@ -564,9 +544,6 @@ namespace spv {
564 // Extended instructions: currently, assume everything is an ID.544 // Extended instructions: currently, assume everything is an ID.
565 // TODO: add whatever data we need for exceptions to that545 // TODO: add whatever data we need for exceptions to that
566 if (opCode == spv::OpExtInst) {546 if (opCode == spv::OpExtInst) {
567- 
568- idFn(asId(word)); // Instruction set is an ID that also needs to be mapped
569- 
570 word += 2; // instruction set, and instruction from set547 word += 2; // instruction set, and instruction from set
571 numOperands -= 2;548 numOperands -= 2;
572 549 
@@ -1508,24 +1485,13 @@ namespace spv {
1508 }1485 }
1509 1486 
1510 // remap from a memory image1487 // remap from a memory image
1511- void spirvbin_t::remap(std::vector<std::uint32_t>& in_spv, const std::vector<std::string>& whiteListStrings,1488+ void spirvbin_t::remap(std::vector<std::uint32_t>& in_spv, std::uint32_t opts)
1512- std::uint32_t opts)
1513 {1489 {
1514- stripWhiteList = whiteListStrings;
1515 spv.swap(in_spv);1490 spv.swap(in_spv);
1516 remap(opts);1491 remap(opts);
1517 spv.swap(in_spv);1492 spv.swap(in_spv);
1518 }1493 }
1519 1494 
1520- // remap from a memory image - legacy interface without white list
1521- void spirvbin_t::remap(std::vector<std::uint32_t>& in_spv, std::uint32_t opts)
1522- {
1523- stripWhiteList.clear();
1524- spv.swap(in_spv);
1525- remap(opts);
1526- spv.swap(in_spv);
1527- }
1528- 
1529} // namespace SPV1495} // namespace SPV
1530 1496 
1531#endif // defined (use_cpp11)1497#endif // defined (use_cpp11)
@@ -118,10 +118,6 @@ public:
118 virtual ~spirvbin_t() { }118 virtual ~spirvbin_t() { }
119 119 
120 // remap on an existing binary in memory120 // remap on an existing binary in memory
121- void remap(std::vector<std::uint32_t>& spv, const std::vector<std::string>& whiteListStrings,
122- std::uint32_t opts = DO_EVERYTHING);
123- 
124- // remap on an existing binary in memory - legacy interface without white list
125 void remap(std::vector<std::uint32_t>& spv, std::uint32_t opts = DO_EVERYTHING);121 void remap(std::vector<std::uint32_t>& spv, std::uint32_t opts = DO_EVERYTHING);
126 122 
127 // Type for error/log handler functions123 // Type for error/log handler functions
@@ -184,8 +180,6 @@ private:
184 unsigned typeSizeInWords(spv::Id id) const;180 unsigned typeSizeInWords(spv::Id id) const;
185 unsigned idTypeSizeInWords(spv::Id id) const;181 unsigned idTypeSizeInWords(spv::Id id) const;
186 182 
187- bool isStripOp(spv::Op opCode, unsigned start) const;
188- 
189 spv::Id& asId(unsigned word) { return spv[word]; }183 spv::Id& asId(unsigned word) { return spv[word]; }
190 const spv::Id& asId(unsigned word) const { return spv[word]; }184 const spv::Id& asId(unsigned word) const { return spv[word]; }
191 spv::Op asOpCode(unsigned word) const { return opOpCode(spv[word]); }185 spv::Op asOpCode(unsigned word) const { return opOpCode(spv[word]); }
@@ -255,8 +249,6 @@ private:
255 249 
256 std::vector<spirword_t> spv; // SPIR words250 std::vector<spirword_t> spv; // SPIR words
257 251 
258- std::vector<std::string> stripWhiteList;
259- 
260 namemap_t nameMap; // ID names from OpName252 namemap_t nameMap; // ID names from OpName
261 253 
262 // Since we want to also do binary ops, we can't use std::vector<bool>. we could use254 // Since we want to also do binary ops, we can't use std::vector<bool>. we could use
@@ -50,10 +50,6 @@
50#include "Logger.h"50#include "Logger.h"
51#include "spirv.hpp"51#include "spirv.hpp"
52#include "spvIR.h"52#include "spvIR.h"
53-namespace spv {
54- #include "GLSL.ext.KHR.h"
55- #include "NonSemanticShaderDebugInfo100.h"
56-}
57 53 
58#include <algorithm>54#include <algorithm>
59#include <map>55#include <map>
@@ -86,7 +82,7 @@ public:
86 82 
87 void setSource(spv::SourceLanguage lang, int version)83 void setSource(spv::SourceLanguage lang, int version)
88 {84 {
89- sourceLang = lang;85+ source = lang;
90 sourceVersion = version;86 sourceVersion = version;
91 }87 }
92 spv::Id getStringId(const std::string& str)88 spv::Id getStringId(const std::string& str)
@@ -103,32 +99,14 @@ public:
103 stringIds[file_c_str] = strId;99 stringIds[file_c_str] = strId;
104 return strId;100 return strId;
105 }101 }
106- spv::Id getSourceFile() const
107- {
108- return sourceFileStringId;
109- }
110 void setSourceFile(const std::string& file)102 void setSourceFile(const std::string& file)
111 {103 {
112 sourceFileStringId = getStringId(file);104 sourceFileStringId = getStringId(file);
113- currentFileId = sourceFileStringId;
114 }105 }
115 void setSourceText(const std::string& text) { sourceText = text; }106 void setSourceText(const std::string& text) { sourceText = text; }
116 void addSourceExtension(const char* ext) { sourceExtensions.push_back(ext); }107 void addSourceExtension(const char* ext) { sourceExtensions.push_back(ext); }
117 void addModuleProcessed(const std::string& p) { moduleProcesses.push_back(p.c_str()); }108 void addModuleProcessed(const std::string& p) { moduleProcesses.push_back(p.c_str()); }
118 void setEmitOpLines() { emitOpLines = true; }109 void setEmitOpLines() { emitOpLines = true; }
119- void setEmitNonSemanticShaderDebugInfo(bool const emit)
120- {
121- emitNonSemanticShaderDebugInfo = emit;
122- 
123- if(emit)
124- {
125- importNonSemanticShaderDebugInfoInstructions();
126- }
127- }
128- void setEmitNonSemanticShaderDebugSource(bool const src)
129- {
130- emitNonSemanticShaderDebugSource = src;
131- }
132 void addExtension(const char* ext) { extensions.insert(ext); }110 void addExtension(const char* ext) { extensions.insert(ext); }
133 void removeExtension(const char* ext)111 void removeExtension(const char* ext)
134 {112 {
@@ -181,11 +159,10 @@ public:
181 void setLine(int line, const char* filename);159 void setLine(int line, const char* filename);
182 // Low-level OpLine. See setLine() for a layered helper.160 // Low-level OpLine. See setLine() for a layered helper.
183 void addLine(Id fileName, int line, int column);161 void addLine(Id fileName, int line, int column);
184- void addDebugScopeAndLine(Id fileName, int line, int column);
185 162 
186 // For creating new types (will return old type if the requested one was already made).163 // For creating new types (will return old type if the requested one was already made).
187 Id makeVoidType();164 Id makeVoidType();
188- Id makeBoolType(bool const compilerGenerated = true);165+ Id makeBoolType();
189 Id makePointer(StorageClass, Id pointee);166 Id makePointer(StorageClass, Id pointee);
190 Id makeForwardPointer(StorageClass);167 Id makeForwardPointer(StorageClass);
191 Id makePointerFromForwardPointer(StorageClass, Id forwardPointerType, Id pointee);168 Id makePointerFromForwardPointer(StorageClass, Id forwardPointerType, Id pointee);
@@ -193,7 +170,7 @@ public:
193 Id makeIntType(int width) { return makeIntegerType(width, true); }170 Id makeIntType(int width) { return makeIntegerType(width, true); }
194 Id makeUintType(int width) { return makeIntegerType(width, false); }171 Id makeUintType(int width) { return makeIntegerType(width, false); }
195 Id makeFloatType(int width);172 Id makeFloatType(int width);
196- Id makeStructType(const std::vector<Id>& members, const char* name, bool const compilerGenerated = true);173+ Id makeStructType(const std::vector<Id>& members, const char*);
197 Id makeStructResultType(Id type0, Id type1);174 Id makeStructResultType(Id type0, Id type1);
198 Id makeVectorType(Id component, int size);175 Id makeVectorType(Id component, int size);
199 Id makeMatrixType(Id component, int cols, int rows);176 Id makeMatrixType(Id component, int cols, int rows);
@@ -204,37 +181,6 @@ public:
204 Id makeSamplerType();181 Id makeSamplerType();
205 Id makeSampledImageType(Id imageType);182 Id makeSampledImageType(Id imageType);
206 Id makeCooperativeMatrixType(Id component, Id scope, Id rows, Id cols);183 Id makeCooperativeMatrixType(Id component, Id scope, Id rows, Id cols);
207- Id makeGenericType(spv::Op opcode, std::vector<spv::IdImmediate>& operands);
208- 
209- // SPIR-V NonSemantic Shader DebugInfo Instructions
210- struct DebugTypeLoc {
211- std::string name {};
212- int line {0};
213- int column {0};
214- };
215- std::unordered_map<Id, DebugTypeLoc> debugTypeLocs;
216- Id makeDebugInfoNone();
217- Id makeBoolDebugType(int const size);
218- Id makeIntegerDebugType(int const width, bool const hasSign);
219- Id makeFloatDebugType(int const width);
220- Id makeSequentialDebugType(Id const baseType, Id const componentCount, NonSemanticShaderDebugInfo100Instructions const sequenceType);
221- Id makeArrayDebugType(Id const baseType, Id const componentCount);
222- Id makeVectorDebugType(Id const baseType, int const componentCount);
223- Id makeMatrixDebugType(Id const vectorType, int const vectorCount, bool columnMajor = true);
224- Id makeMemberDebugType(Id const memberType, DebugTypeLoc const& debugTypeLoc);
225- Id makeCompositeDebugType(std::vector<Id> const& memberTypes, char const*const name,
226- NonSemanticShaderDebugInfo100DebugCompositeType const tag, bool const isOpaqueType = false);
227- Id makeDebugSource(const Id fileName);
228- Id makeDebugCompilationUnit();
229- Id createDebugGlobalVariable(Id const type, char const*const name, Id const variable);
230- Id createDebugLocalVariable(Id type, char const*const name, size_t const argNumber = 0);
231- Id makeDebugExpression();
232- Id makeDebugDeclare(Id const debugLocalVariable, Id const localVariable);
233- Id makeDebugValue(Id const debugLocalVariable, Id const value);
234- Id makeDebugFunctionType(Id returnType, const std::vector<Id>& paramTypes);
235- Id makeDebugFunction(Function* function, Id nameId, Id funcTypeId);
236- Id makeDebugLexicalBlock(uint32_t line);
237- std::string unmangleFunctionName(std::string const& name) const;
238 184 
239 // accelerationStructureNV type185 // accelerationStructureNV type
240 Id makeAccelerationStructureType();186 Id makeAccelerationStructureType();
@@ -256,7 +202,6 @@ public:
256 StorageClass getTypeStorageClass(Id typeId) const { return module.getStorageClass(typeId); }202 StorageClass getTypeStorageClass(Id typeId) const { return module.getStorageClass(typeId); }
257 ImageFormat getImageTypeFormat(Id typeId) const203 ImageFormat getImageTypeFormat(Id typeId) const
258 { return (ImageFormat)module.getInstruction(typeId)->getImmediateOperand(6); }204 { return (ImageFormat)module.getInstruction(typeId)->getImmediateOperand(6); }
259- Id getResultingAccessChainType() const;
260 205 
261 bool isPointer(Id resultId) const { return isPointerType(getTypeId(resultId)); }206 bool isPointer(Id resultId) const { return isPointerType(getTypeId(resultId)); }
262 bool isScalar(Id resultId) const { return isScalarType(getTypeId(resultId)); }207 bool isScalar(Id resultId) const { return isScalarType(getTypeId(resultId)); }
@@ -310,8 +255,6 @@ public:
310 // See if a resultId is valid for use as an initializer.255 // See if a resultId is valid for use as an initializer.
311 bool isValidInitializer(Id resultId) const { return isConstant(resultId) || isGlobalVariable(resultId); }256 bool isValidInitializer(Id resultId) const { return isConstant(resultId) || isGlobalVariable(resultId); }
312 257 
313- bool isRayTracingOpCode(Op opcode) const;
314- 
315 int getScalarTypeWidth(Id typeId) const258 int getScalarTypeWidth(Id typeId) const
316 {259 {
317 Id scalarTypeId = getScalarTypeId(typeId);260 Id scalarTypeId = getScalarTypeId(typeId);
@@ -350,7 +293,6 @@ public:
350 }293 }
351 294 
352 // For making new constants (will return old constant if the requested one was already made).295 // For making new constants (will return old constant if the requested one was already made).
353- Id makeNullConstant(Id typeId);
354 Id makeBoolConstant(bool b, bool specConstant = false);296 Id makeBoolConstant(bool b, bool specConstant = false);
355 Id makeInt8Constant(int i, bool specConstant = false)297 Id makeInt8Constant(int i, bool specConstant = false)
356 { return makeIntConstant(makeIntType(8), (unsigned)i, specConstant); }298 { return makeIntConstant(makeIntType(8), (unsigned)i, specConstant); }
@@ -373,8 +315,6 @@ public:
373 Id makeFloat16Constant(float f16, bool specConstant = false);315 Id makeFloat16Constant(float f16, bool specConstant = false);
374 Id makeFpConstant(Id type, double d, bool specConstant = false);316 Id makeFpConstant(Id type, double d, bool specConstant = false);
375 317 
376- Id importNonSemanticShaderDebugInfoInstructions();
377- 
378 // Turn the array of constants into a proper spv constant of the requested type.318 // Turn the array of constants into a proper spv constant of the requested type.
379 Id makeCompositeConstant(Id type, const std::vector<Id>& comps, bool specConst = false);319 Id makeCompositeConstant(Id type, const std::vector<Id>& comps, bool specConst = false);
380 320 
@@ -397,12 +337,7 @@ public:
397 void addMemberDecoration(Id, unsigned int member, Decoration, const std::vector<const char*>& strings);337 void addMemberDecoration(Id, unsigned int member, Decoration, const std::vector<const char*>& strings);
398 338 
399 // At the end of what block do the next create*() instructions go?339 // At the end of what block do the next create*() instructions go?
400- // Also reset current last DebugScope and current source line to unknown340+ void setBuildPoint(Block* bp) { buildPoint = bp; }
401- void setBuildPoint(Block* bp) {
402- buildPoint = bp;
403- lastDebugScopeId = NoResult;
404- currentLine = 0;
405- }
406 Block* getBuildPoint() const { return buildPoint; }341 Block* getBuildPoint() const { return buildPoint; }
407 342 
408 // Make the entry-point function. The returned pointer is only valid343 // Make the entry-point function. The returned pointer is only valid
@@ -413,36 +348,21 @@ public:
413 // Return the function, pass back the entry.348 // Return the function, pass back the entry.
414 // The returned pointer is only valid for the lifetime of this builder.349 // The returned pointer is only valid for the lifetime of this builder.
415 Function* makeFunctionEntry(Decoration precision, Id returnType, const char* name,350 Function* makeFunctionEntry(Decoration precision, Id returnType, const char* name,
416- const std::vector<Id>& paramTypes, const std::vector<char const*>& paramNames,351+ const std::vector<Id>& paramTypes, const std::vector<std::vector<Decoration>>& precisions, Block **entry = 0);
417- const std::vector<std::vector<Decoration>>& precisions, Block **entry = nullptr);
418 352 
419 // Create a return. An 'implicit' return is one not appearing in the source353 // Create a return. An 'implicit' return is one not appearing in the source
420 // code. In the case of an implicit return, no post-return block is inserted.354 // code. In the case of an implicit return, no post-return block is inserted.
421 void makeReturn(bool implicit, Id retVal = 0);355 void makeReturn(bool implicit, Id retVal = 0);
422 356 
423- // Initialize state and generate instructions for new lexical scope
424- void enterScope(uint32_t line);
425- 
426- // Set state and generate instructions to exit current lexical scope
427- void leaveScope();
428- 
429- // Prepare builder for generation of instructions for a function.
430- void enterFunction(Function const* function);
431- 
432 // Generate all the code needed to finish up a function.357 // Generate all the code needed to finish up a function.
433 void leaveFunction();358 void leaveFunction();
434 359 
435- // Create block terminator instruction for certain statements like360+ // Create a discard.
436- // discard, terminate-invocation, terminateRayEXT, or ignoreIntersectionEXT361+ void makeDiscard();
437- void makeStatementTerminator(spv::Op opcode, const char *name);
438- 
439- // Create block terminator instruction for statements that have input operands
440- // such as OpEmitMeshTasksEXT
441- void makeStatementTerminator(spv::Op opcode, const std::vector<Id>& operands, const char* name);
442 362 
443 // Create a global or function local or IO variable.363 // Create a global or function local or IO variable.
444- Id createVariable(Decoration precision, StorageClass storageClass, Id type, const char* name = nullptr,364+ Id createVariable(Decoration precision, StorageClass, Id type, const char* name = nullptr,
445- Id initializer = NoResult, bool const compilerGenerated = true);365+ Id initializer = NoResult);
446 366 
447 // Create an intermediate with an undefined value.367 // Create an intermediate with an undefined value.
448 Id createUndefined(Id type);368 Id createUndefined(Id type);
@@ -704,7 +624,6 @@ public:
704 CoherentFlags operator |=(const CoherentFlags &other) { return *this; }624 CoherentFlags operator |=(const CoherentFlags &other) { return *this; }
705#else625#else
706 bool isVolatile() const { return volatil; }626 bool isVolatile() const { return volatil; }
707- bool isNonUniform() const { return nonUniform; }
708 bool anyCoherent() const {627 bool anyCoherent() const {
709 return coherent || devicecoherent || queuefamilycoherent || workgroupcoherent ||628 return coherent || devicecoherent || queuefamilycoherent || workgroupcoherent ||
710 subgroupcoherent || shadercallcoherent;629 subgroupcoherent || shadercallcoherent;
@@ -719,7 +638,6 @@ public:
719 unsigned nonprivate : 1;638 unsigned nonprivate : 1;
720 unsigned volatil : 1;639 unsigned volatil : 1;
721 unsigned isImage : 1;640 unsigned isImage : 1;
722- unsigned nonUniform : 1;
723 641 
724 void clear() {642 void clear() {
725 coherent = 0;643 coherent = 0;
@@ -731,7 +649,6 @@ public:
731 nonprivate = 0;649 nonprivate = 0;
732 volatil = 0;650 volatil = 0;
733 isImage = 0;651 isImage = 0;
734- nonUniform = 0;
735 }652 }
736 653 
737 CoherentFlags operator |=(const CoherentFlags &other) {654 CoherentFlags operator |=(const CoherentFlags &other) {
@@ -744,7 +661,6 @@ public:
744 nonprivate |= other.nonprivate;661 nonprivate |= other.nonprivate;
745 volatil |= other.volatil;662 volatil |= other.volatil;
746 isImage |= other.isImage;663 isImage |= other.isImage;
747- nonUniform |= other.nonUniform;
748 return *this;664 return *this;
749 }665 }
750#endif666#endif
@@ -805,12 +721,11 @@ public:
805 }721 }
806 722 
807 // use accessChain and swizzle to store value723 // use accessChain and swizzle to store value
808- void accessChainStore(Id rvalue, Decoration nonUniform,724+ void accessChainStore(Id rvalue, spv::MemoryAccessMask memoryAccess = spv::MemoryAccessMaskNone,
809- spv::MemoryAccessMask memoryAccess = spv::MemoryAccessMaskNone,
810 spv::Scope scope = spv::ScopeMax, unsigned int alignment = 0);725 spv::Scope scope = spv::ScopeMax, unsigned int alignment = 0);
811 726 
812 // use accessChain and swizzle to load an r-value727 // use accessChain and swizzle to load an r-value
813- Id accessChainLoad(Decoration precision, Decoration l_nonUniform, Decoration r_nonUniform, Id ResultType,728+ Id accessChainLoad(Decoration precision, Decoration nonUniform, Id ResultType,
814 spv::MemoryAccessMask memoryAccess = spv::MemoryAccessMaskNone, spv::Scope scope = spv::ScopeMax,729 spv::MemoryAccessMask memoryAccess = spv::MemoryAccessMaskNone, spv::Scope scope = spv::ScopeMax,
815 unsigned int alignment = 0);730 unsigned int alignment = 0);
816 731 
@@ -877,23 +792,13 @@ public:
877 const;792 const;
878 793 
879 unsigned int spvVersion; // the version of SPIR-V to emit in the header794 unsigned int spvVersion; // the version of SPIR-V to emit in the header
880- SourceLanguage sourceLang;795+ SourceLanguage source;
881 int sourceVersion;796 int sourceVersion;
882 spv::Id sourceFileStringId;797 spv::Id sourceFileStringId;
883- spv::Id nonSemanticShaderCompilationUnitId {0};
884- spv::Id nonSemanticShaderDebugInfo {0};
885- spv::Id debugInfoNone {0};
886- spv::Id debugExpression {0}; // Debug expression with zero operations.
887 std::string sourceText;798 std::string sourceText;
888 int currentLine;799 int currentLine;
889 const char* currentFile;800 const char* currentFile;
890- spv::Id currentFileId;
891- std::stack<spv::Id> currentDebugScopeId;
892- spv::Id lastDebugScopeId;
893 bool emitOpLines;801 bool emitOpLines;
894- bool emitNonSemanticShaderDebugInfo;
895- bool restoreNonSemanticShaderDebugInfo;
896- bool emitNonSemanticShaderDebugSource;
897 std::set<std::string> extensions;802 std::set<std::string> extensions;
898 std::vector<const char*> sourceExtensions;803 std::vector<const char*> sourceExtensions;
899 std::vector<const char*> moduleProcesses;804 std::vector<const char*> moduleProcesses;
@@ -927,10 +832,6 @@ public:
927 std::unordered_map<unsigned int, std::vector<Instruction*>> groupedStructConstants;832 std::unordered_map<unsigned int, std::vector<Instruction*>> groupedStructConstants;
928 // map type opcodes to type instructions833 // map type opcodes to type instructions
929 std::unordered_map<unsigned int, std::vector<Instruction*>> groupedTypes;834 std::unordered_map<unsigned int, std::vector<Instruction*>> groupedTypes;
930- // map type opcodes to debug type instructions
931- std::unordered_map<unsigned int, std::vector<Instruction*>> groupedDebugTypes;
932- // list of OpConstantNull instructions
933- std::vector<Instruction*> nullConstants;
934 835 
935 // stack of switches836 // stack of switches
936 std::stack<Block*> switchMerges;837 std::stack<Block*> switchMerges;
@@ -944,12 +845,6 @@ public:
944 // map from include file name ids to their contents845 // map from include file name ids to their contents
945 std::map<spv::Id, const std::string*> includeFiles;846 std::map<spv::Id, const std::string*> includeFiles;
946 847 
947- // map from core id to debug id
948- std::map <spv::Id, spv::Id> debugId;
949- 
950- // map from file name string id to DebugSource id
951- std::unordered_map<spv::Id, spv::Id> debugSourceId;
952- 
953 // The stream for outputting warnings and errors.848 // The stream for outputting warnings and errors.
954 SpvBuildLogger* logger;849 SpvBuildLogger* logger;
955}; // end Builder class850}; // end Builder class
@@ -44,15 +44,16 @@
44#include <algorithm>44#include <algorithm>
45 45 
46#include "SpvBuilder.h"46#include "SpvBuilder.h"
47-#include "spirv.hpp"
48 47 
48+#include "spirv.hpp"
49+#include "GlslangToSpv.h"
50+#include "SpvBuilder.h"
49namespace spv {51namespace spv {
50 #include "GLSL.std.450.h"52 #include "GLSL.std.450.h"
51 #include "GLSL.ext.KHR.h"53 #include "GLSL.ext.KHR.h"
52 #include "GLSL.ext.EXT.h"54 #include "GLSL.ext.EXT.h"
53 #include "GLSL.ext.AMD.h"55 #include "GLSL.ext.AMD.h"
54 #include "GLSL.ext.NV.h"56 #include "GLSL.ext.NV.h"
55- #include "GLSL.ext.ARM.h"
56}57}
57 58 
58namespace spv {59namespace spv {
@@ -112,6 +113,8 @@ void Builder::postProcessType(const Instruction& inst, Id typeId)
112 }113 }
113 }114 }
114 break;115 break;
116+ case OpAccessChain:
117+ case OpPtrAccessChain:
115 case OpCopyObject:118 case OpCopyObject:
116 break;119 break;
117 case OpFConvert:120 case OpFConvert:
@@ -158,43 +161,26 @@ void Builder::postProcessType(const Instruction& inst, Id typeId)
158 switch (inst.getImmediateOperand(1)) {161 switch (inst.getImmediateOperand(1)) {
159 case GLSLstd450Frexp:162 case GLSLstd450Frexp:
160 case GLSLstd450FrexpStruct:163 case GLSLstd450FrexpStruct:
161- if (getSpvVersion() < spv::Spv_1_3 && containsType(typeId, OpTypeInt, 16))164+ if (getSpvVersion() < glslang::EShTargetSpv_1_3 && containsType(typeId, OpTypeInt, 16))
162 addExtension(spv::E_SPV_AMD_gpu_shader_int16);165 addExtension(spv::E_SPV_AMD_gpu_shader_int16);
163 break;166 break;
164 case GLSLstd450InterpolateAtCentroid:167 case GLSLstd450InterpolateAtCentroid:
165 case GLSLstd450InterpolateAtSample:168 case GLSLstd450InterpolateAtSample:
166 case GLSLstd450InterpolateAtOffset:169 case GLSLstd450InterpolateAtOffset:
167- if (getSpvVersion() < spv::Spv_1_3 && containsType(typeId, OpTypeFloat, 16))170+ if (getSpvVersion() < glslang::EShTargetSpv_1_3 && containsType(typeId, OpTypeFloat, 16))
168 addExtension(spv::E_SPV_AMD_gpu_shader_half_float);171 addExtension(spv::E_SPV_AMD_gpu_shader_half_float);
169 break;172 break;
170 default:173 default:
171 break;174 break;
172 }175 }
173 break;176 break;
174- case OpAccessChain:
175- case OpPtrAccessChain:
176- if (isPointerType(typeId))
177- break;
178- if (basicTypeOp == OpTypeInt) {
179- if (width == 16)
180- addCapability(CapabilityInt16);
181- else if (width == 8)
182- addCapability(CapabilityInt8);
183- }
184 default:177 default:
185- if (basicTypeOp == OpTypeInt) {178+ if (basicTypeOp == OpTypeFloat && width == 16)
186- if (width == 16)179+ addCapability(CapabilityFloat16);
187- addCapability(CapabilityInt16);180+ if (basicTypeOp == OpTypeInt && width == 16)
188- else if (width == 8)181+ addCapability(CapabilityInt16);
189- addCapability(CapabilityInt8);182+ if (basicTypeOp == OpTypeInt && width == 8)
190- else if (width == 64)183+ addCapability(CapabilityInt8);
191- addCapability(CapabilityInt64);
192- } else if (basicTypeOp == OpTypeFloat) {
193- if (width == 16)
194- addCapability(CapabilityFloat16);
195- else if (width == 64)
196- addCapability(CapabilityFloat64);
197- }
198 break;184 break;
199 }185 }
200}186}
@@ -450,38 +436,6 @@ void Builder::postProcessFeatures() {
450 }436 }
451 }437 }
452 }438 }
453- 
454- // If any Vulkan memory model-specific functionality is used, update the
455- // OpMemoryModel to match.
456- if (capabilities.find(spv::CapabilityVulkanMemoryModelKHR) != capabilities.end()) {
457- memoryModel = spv::MemoryModelVulkanKHR;
458- addIncorporatedExtension(spv::E_SPV_KHR_vulkan_memory_model, spv::Spv_1_5);
459- }
460- 
461- // Add Aliased decoration if there's more than one Workgroup Block variable.
462- if (capabilities.find(spv::CapabilityWorkgroupMemoryExplicitLayoutKHR) != capabilities.end()) {
463- assert(entryPoints.size() == 1);
464- auto &ep = entryPoints[0];
465- 
466- std::vector<Id> workgroup_variables;
467- for (int i = 0; i < (int)ep->getNumOperands(); i++) {
468- if (!ep->isIdOperand(i))
469- continue;
470- 
471- const Id id = ep->getIdOperand(i);
472- const Instruction *instr = module.getInstruction(id);
473- if (instr->getOpCode() != spv::OpVariable)
474- continue;
475- 
476- if (instr->getImmediateOperand(0) == spv::StorageClassWorkgroup)
477- workgroup_variables.push_back(id);
478- }
479- 
480- if (workgroup_variables.size() > 1) {
481- for (size_t i = 0; i < workgroup_variables.size(); i++)
482- addDecoration(workgroup_variables[i], spv::DecorationAliased);
483- }
484- }
485}439}
486#endif440#endif
487 441 
@@ -44,6 +44,7 @@
44 44 
45#include "SpvTools.h"45#include "SpvTools.h"
46#include "spirv-tools/optimizer.hpp"46#include "spirv-tools/optimizer.hpp"
47+#include "spirv-tools/libspirv.h"
47 48 
48namespace glslang {49namespace glslang {
49 50 
@@ -68,8 +69,6 @@ spv_target_env MapToSpirvToolsEnv(const SpvVersion& spvVersion, spv::SpvBuildLog
68 }69 }
69 case glslang::EShTargetVulkan_1_2:70 case glslang::EShTargetVulkan_1_2:
70 return spv_target_env::SPV_ENV_VULKAN_1_2;71 return spv_target_env::SPV_ENV_VULKAN_1_2;
71- case glslang::EShTargetVulkan_1_3:
72- return spv_target_env::SPV_ENV_VULKAN_1_3;
73 default:72 default:
74 break;73 break;
75 }74 }
@@ -115,18 +114,11 @@ void OptimizerMesssageConsumer(spv_message_level_t level, const char *source,
115 out << std::endl;114 out << std::endl;
116}115}
117 116 
118-// Use the SPIRV-Tools disassembler to print SPIR-V using a SPV_ENV_UNIVERSAL_1_3 environment.117+// Use the SPIRV-Tools disassembler to print SPIR-V.
119void SpirvToolsDisassemble(std::ostream& out, const std::vector<unsigned int>& spirv)118void SpirvToolsDisassemble(std::ostream& out, const std::vector<unsigned int>& spirv)
120-{
121- SpirvToolsDisassemble(out, spirv, spv_target_env::SPV_ENV_UNIVERSAL_1_3);
122-}
123- 
124-// Use the SPIRV-Tools disassembler to print SPIR-V with a provided SPIR-V environment.
125-void SpirvToolsDisassemble(std::ostream& out, const std::vector<unsigned int>& spirv,
126- spv_target_env requested_context)
127{119{
128 // disassemble120 // disassemble
129- spv_context context = spvContextCreate(requested_context);121+ spv_context context = spvContextCreate(SPV_ENV_UNIVERSAL_1_3);
130 spv_text text;122 spv_text text;
131 spv_diagnostic diagnostic = nullptr;123 spv_diagnostic diagnostic = nullptr;
132 spvBinaryToText(context, spirv.data(), spirv.size(),124 spvBinaryToText(context, spirv.data(), spirv.size(),
@@ -155,8 +147,6 @@ void SpirvToolsValidate(const glslang::TIntermediate& intermediate, std::vector<
155 spv_validator_options options = spvValidatorOptionsCreate();147 spv_validator_options options = spvValidatorOptionsCreate();
156 spvValidatorOptionsSetRelaxBlockLayout(options, intermediate.usingHlslOffsets());148 spvValidatorOptionsSetRelaxBlockLayout(options, intermediate.usingHlslOffsets());
157 spvValidatorOptionsSetBeforeHlslLegalization(options, prelegalization);149 spvValidatorOptionsSetBeforeHlslLegalization(options, prelegalization);
158- spvValidatorOptionsSetScalarBlockLayout(options, intermediate.usingScalarBlockLayout());
159- spvValidatorOptionsSetWorkgroupScalarBlockLayout(options, intermediate.usingScalarBlockLayout());
160 spvValidateWithOptions(context, options, &binary, &diagnostic);150 spvValidateWithOptions(context, options, &binary, &diagnostic);
161 151 
162 // report152 // report
@@ -184,7 +174,10 @@ void SpirvToolsTransform(const glslang::TIntermediate& intermediate, std::vector
184 // line information into all SPIR-V instructions. This avoids loss of174 // line information into all SPIR-V instructions. This avoids loss of
185 // information when instructions are deleted or moved. Later, remove175 // information when instructions are deleted or moved. Later, remove
186 // redundant information to minimize final SPRIR-V size.176 // redundant information to minimize final SPRIR-V size.
187- if (options->stripDebugInfo) {177+ if (options->generateDebugInfo) {
178+ optimizer.RegisterPass(spvtools::CreatePropagateLineInfoPass());
179+ }
180+ else if (options->stripDebugInfo) {
188 optimizer.RegisterPass(spvtools::CreateStripDebugInfoPass());181 optimizer.RegisterPass(spvtools::CreateStripDebugInfoPass());
189 }182 }
190 optimizer.RegisterPass(spvtools::CreateWrapOpKillPass());183 optimizer.RegisterPass(spvtools::CreateWrapOpKillPass());
@@ -209,13 +202,14 @@ void SpirvToolsTransform(const glslang::TIntermediate& intermediate, std::vector
209 optimizer.RegisterPass(spvtools::CreateAggressiveDCEPass());202 optimizer.RegisterPass(spvtools::CreateAggressiveDCEPass());
210 optimizer.RegisterPass(spvtools::CreateVectorDCEPass());203 optimizer.RegisterPass(spvtools::CreateVectorDCEPass());
211 optimizer.RegisterPass(spvtools::CreateDeadInsertElimPass());204 optimizer.RegisterPass(spvtools::CreateDeadInsertElimPass());
212- optimizer.RegisterPass(spvtools::CreateInterpolateFixupPass());
213 if (options->optimizeSize) {205 if (options->optimizeSize) {
214 optimizer.RegisterPass(spvtools::CreateRedundancyEliminationPass());206 optimizer.RegisterPass(spvtools::CreateRedundancyEliminationPass());
215- optimizer.RegisterPass(spvtools::CreateEliminateDeadInputComponentsSafePass());
216 }207 }
217 optimizer.RegisterPass(spvtools::CreateAggressiveDCEPass());208 optimizer.RegisterPass(spvtools::CreateAggressiveDCEPass());
218 optimizer.RegisterPass(spvtools::CreateCFGCleanupPass());209 optimizer.RegisterPass(spvtools::CreateCFGCleanupPass());
210+ if (options->generateDebugInfo) {
211+ optimizer.RegisterPass(spvtools::CreateRedundantLineInfoElimPass());
212+ }
219 213 
220 spvtools::OptimizerOptions spvOptOptions;214 spvtools::OptimizerOptions spvOptOptions;
221 optimizer.SetTargetEnv(MapToSpirvToolsEnv(intermediate.getSpv(), logger));215 optimizer.SetTargetEnv(MapToSpirvToolsEnv(intermediate.getSpv(), logger));
@@ -223,56 +217,6 @@ void SpirvToolsTransform(const glslang::TIntermediate& intermediate, std::vector
223 optimizer.Run(spirv.data(), spirv.size(), &spirv, spvOptOptions);217 optimizer.Run(spirv.data(), spirv.size(), &spirv, spvOptOptions);
224}218}
225 219 
226-bool SpirvToolsAnalyzeDeadOutputStores(spv_target_env target_env, std::vector<unsigned int>& spirv,
227- std::unordered_set<uint32_t>* live_locs,
228- std::unordered_set<uint32_t>* live_builtins,
229- spv::SpvBuildLogger* logger)
230-{
231- spvtools::Optimizer optimizer(target_env);
232- optimizer.SetMessageConsumer(OptimizerMesssageConsumer);
233- 
234- optimizer.RegisterPass(spvtools::CreateAnalyzeLiveInputPass(live_locs, live_builtins));
235- 
236- spvtools::OptimizerOptions spvOptOptions;
237- optimizer.SetTargetEnv(target_env);
238- spvOptOptions.set_run_validator(false);
239- return optimizer.Run(spirv.data(), spirv.size(), &spirv, spvOptOptions);
240-}
241- 
242-void SpirvToolsEliminateDeadOutputStores(spv_target_env target_env, std::vector<unsigned int>& spirv,
243- std::unordered_set<uint32_t>* live_locs,
244- std::unordered_set<uint32_t>* live_builtins,
245- spv::SpvBuildLogger* logger)
246-{
247- spvtools::Optimizer optimizer(target_env);
248- optimizer.SetMessageConsumer(OptimizerMesssageConsumer);
249- 
250- optimizer.RegisterPass(spvtools::CreateEliminateDeadOutputStoresPass(live_locs, live_builtins));
251- optimizer.RegisterPass(spvtools::CreateAggressiveDCEPass(false, true));
252- optimizer.RegisterPass(spvtools::CreateEliminateDeadOutputComponentsPass());
253- optimizer.RegisterPass(spvtools::CreateAggressiveDCEPass(false, true));
254- 
255- spvtools::OptimizerOptions spvOptOptions;
256- optimizer.SetTargetEnv(target_env);
257- spvOptOptions.set_run_validator(false);
258- optimizer.Run(spirv.data(), spirv.size(), &spirv, spvOptOptions);
259-}
260- 
261-void SpirvToolsEliminateDeadInputComponents(spv_target_env target_env, std::vector<unsigned int>& spirv,
262- spv::SpvBuildLogger* logger)
263-{
264- spvtools::Optimizer optimizer(target_env);
265- optimizer.SetMessageConsumer(OptimizerMesssageConsumer);
266- 
267- optimizer.RegisterPass(spvtools::CreateEliminateDeadInputComponentsPass());
268- optimizer.RegisterPass(spvtools::CreateAggressiveDCEPass());
269- 
270- spvtools::OptimizerOptions spvOptOptions;
271- optimizer.SetTargetEnv(target_env);
272- spvOptOptions.set_run_validator(false);
273- optimizer.Run(spirv.data(), spirv.size(), &spirv, spvOptOptions);
274-}
275- 
276// Apply the SPIRV-Tools optimizer to strip debug info from SPIR-V. This is implicitly done by220// Apply the SPIRV-Tools optimizer to strip debug info from SPIR-V. This is implicitly done by
277// SpirvToolsTransform if spvOptions->stripDebugInfo is set, but can be called separately if221// SpirvToolsTransform if spvOptions->stripDebugInfo is set, but can be called separately if
278// optimization is disabled.222// optimization is disabled.
@@ -41,10 +41,9 @@
41#ifndef GLSLANG_SPV_TOOLS_H41#ifndef GLSLANG_SPV_TOOLS_H
42#define GLSLANG_SPV_TOOLS_H42#define GLSLANG_SPV_TOOLS_H
43 43 
44-#if ENABLE_OPT44+#ifdef ENABLE_OPT
45#include <vector>45#include <vector>
46#include <ostream>46#include <ostream>
47-#include "spirv-tools/libspirv.h"
48#endif47#endif
49 48 
50#include "glslang/MachineIndependent/localintermediate.h"49#include "glslang/MachineIndependent/localintermediate.h"
@@ -53,28 +52,21 @@
53namespace glslang {52namespace glslang {
54 53 
55struct SpvOptions {54struct SpvOptions {
56- bool generateDebugInfo {false};55+ SpvOptions() : generateDebugInfo(false), stripDebugInfo(false), disableOptimizer(true),
57- bool stripDebugInfo {false};56+ optimizeSize(false), disassemble(false), validate(false) { }
58- bool disableOptimizer {true};57+ bool generateDebugInfo;
59- bool optimizeSize {false};58+ bool stripDebugInfo;
60- bool disassemble {false};59+ bool disableOptimizer;
61- bool validate {false};60+ bool optimizeSize;
62- bool emitNonSemanticShaderDebugInfo {false};61+ bool disassemble;
63- bool emitNonSemanticShaderDebugSource{ false };62+ bool validate;
64};63};
65 64 
66-#if ENABLE_OPT65+#ifdef ENABLE_OPT
67 66 
68-// Translate glslang's view of target versioning to what SPIRV-Tools uses.67+// Use the SPIRV-Tools disassembler to print SPIR-V.
69-spv_target_env MapToSpirvToolsEnv(const SpvVersion& spvVersion, spv::SpvBuildLogger* logger);
70- 
71-// Use the SPIRV-Tools disassembler to print SPIR-V using a SPV_ENV_UNIVERSAL_1_3 environment.
72void SpirvToolsDisassemble(std::ostream& out, const std::vector<unsigned int>& spirv);68void SpirvToolsDisassemble(std::ostream& out, const std::vector<unsigned int>& spirv);
73 69 
74-// Use the SPIRV-Tools disassembler to print SPIR-V with a provided SPIR-V environment.
75-void SpirvToolsDisassemble(std::ostream& out, const std::vector<unsigned int>& spirv,
76- spv_target_env requested_context);
77- 
78// Apply the SPIRV-Tools validator to generated SPIR-V.70// Apply the SPIRV-Tools validator to generated SPIR-V.
79void SpirvToolsValidate(const glslang::TIntermediate& intermediate, std::vector<unsigned int>& spirv,71void SpirvToolsValidate(const glslang::TIntermediate& intermediate, std::vector<unsigned int>& spirv,
80 spv::SpvBuildLogger*, bool prelegalization);72 spv::SpvBuildLogger*, bool prelegalization);
@@ -83,22 +75,6 @@ void SpirvToolsValidate(const glslang::TIntermediate& intermediate, std::vector<
83void SpirvToolsTransform(const glslang::TIntermediate& intermediate, std::vector<unsigned int>& spirv,75void SpirvToolsTransform(const glslang::TIntermediate& intermediate, std::vector<unsigned int>& spirv,
84 spv::SpvBuildLogger*, const SpvOptions*);76 spv::SpvBuildLogger*, const SpvOptions*);
85 77 
86-// Apply the SPIRV-Tools EliminateDeadInputComponents pass to generated SPIR-V. Put result in |spirv|.
87-void SpirvToolsEliminateDeadInputComponents(spv_target_env target_env, std::vector<unsigned int>& spirv,
88- spv::SpvBuildLogger*);
89- 
90-// Apply the SPIRV-Tools AnalyzeDeadOutputStores pass to generated SPIR-V. Put result in |live_locs|.
91-// Return true if the result is valid.
92-bool SpirvToolsAnalyzeDeadOutputStores(spv_target_env target_env, std::vector<unsigned int>& spirv,
93- std::unordered_set<uint32_t>* live_locs,
94- std::unordered_set<uint32_t>* live_builtins, spv::SpvBuildLogger*);
95- 
96-// Apply the SPIRV-Tools EliminateDeadOutputStores and AggressiveDeadCodeElimination passes to generated SPIR-V using
97-// |live_locs|. Put result in |spirv|.
98-void SpirvToolsEliminateDeadOutputStores(spv_target_env target_env, std::vector<unsigned int>& spirv,
99- std::unordered_set<uint32_t>* live_locs,
100- std::unordered_set<uint32_t>* live_builtins, spv::SpvBuildLogger*);
101- 
102// Apply the SPIRV-Tools optimizer to strip debug info from SPIR-V. This is implicitly done by78// Apply the SPIRV-Tools optimizer to strip debug info from SPIR-V. This is implicitly done by
103// SpirvToolsTransform if spvOptions->stripDebugInfo is set, but can be called separately if79// SpirvToolsTransform if spvOptions->stripDebugInfo is set, but can be called separately if
104// optimization is disabled.80// optimization is disabled.
@@ -43,7 +43,6 @@
43#include <stack>43#include <stack>
44#include <sstream>44#include <sstream>
45#include <cstring>45#include <cstring>
46-#include <utility>
47 46 
48#include "disassemble.h"47#include "disassemble.h"
49#include "doc.h"48#include "doc.h"
@@ -54,7 +53,6 @@ namespace spv {
54 #include "GLSL.std.450.h"53 #include "GLSL.std.450.h"
55 #include "GLSL.ext.AMD.h"54 #include "GLSL.ext.AMD.h"
56 #include "GLSL.ext.NV.h"55 #include "GLSL.ext.NV.h"
57- #include "GLSL.ext.ARM.h"
58 }56 }
59}57}
60const char* GlslStd450DebugNames[spv::GLSLstd450Count];58const char* GlslStd450DebugNames[spv::GLSLstd450Count];
@@ -102,7 +100,6 @@ protected:
102 void outputMask(OperandClass operandClass, unsigned mask);100 void outputMask(OperandClass operandClass, unsigned mask);
103 void disassembleImmediates(int numOperands);101 void disassembleImmediates(int numOperands);
104 void disassembleIds(int numOperands);102 void disassembleIds(int numOperands);
105- std::pair<int, std::string> decodeString();
106 int disassembleString();103 int disassembleString();
107 void disassembleInstruction(Id resultId, Id typeId, Op opCode, int numOperands);104 void disassembleInstruction(Id resultId, Id typeId, Op opCode, int numOperands);
108 105 
@@ -293,44 +290,31 @@ void SpirvStream::disassembleIds(int numOperands)
293 }290 }
294}291}
295 292 
296-// decode string from words at current position (non-consuming)
297-std::pair<int, std::string> SpirvStream::decodeString()
298-{
299- std::string res;
300- int wordPos = word;
301- char c;
302- bool done = false;
303- 
304- do {
305- unsigned int content = stream[wordPos];
306- for (int charCount = 0; charCount < 4; ++charCount) {
307- c = content & 0xff;
308- content >>= 8;
309- if (c == '\0') {
310- done = true;
311- break;
312- }
313- res += c;
314- }
315- ++wordPos;
316- } while(! done);
317- 
318- return std::make_pair(wordPos - word, res);
319-}
320- 
321// return the number of operands consumed by the string293// return the number of operands consumed by the string
322int SpirvStream::disassembleString()294int SpirvStream::disassembleString()
323{295{
296+ int startWord = word;
297+ 
324 out << " \"";298 out << " \"";
325 299 
326- std::pair<int, std::string> decoderes = decodeString();300+ const char* wordString;
301+ bool done = false;
302+ do {
303+ unsigned int content = stream[word];
304+ wordString = (const char*)&content;
305+ for (int charCount = 0; charCount < 4; ++charCount) {
306+ if (*wordString == 0) {
307+ done = true;
308+ break;
309+ }
310+ out << *(wordString++);
311+ }
312+ ++word;
313+ } while (! done);
327 314 
328- out << decoderes.second;
329 out << "\"";315 out << "\"";
330 316 
331- word += decoderes.first;317+ return word - startWord;
332- 
333- return decoderes.first;
334}318}
335 319 
336void SpirvStream::disassembleInstruction(Id resultId, Id /*typeId*/, Op opCode, int numOperands)320void SpirvStream::disassembleInstruction(Id resultId, Id /*typeId*/, Op opCode, int numOperands)
@@ -347,7 +331,7 @@ void SpirvStream::disassembleInstruction(Id resultId, Id /*typeId*/, Op opCode,
347 nextNestedControl = 0;331 nextNestedControl = 0;
348 }332 }
349 } else if (opCode == OpExtInstImport) {333 } else if (opCode == OpExtInstImport) {
350- idDescriptor[resultId] = decodeString().second;334+ idDescriptor[resultId] = (const char*)(&stream[word]);
351 }335 }
352 else {336 else {
353 if (resultId != 0 && idDescriptor[resultId].size() == 0) {337 if (resultId != 0 && idDescriptor[resultId].size() == 0) {
@@ -444,7 +428,7 @@ void SpirvStream::disassembleInstruction(Id resultId, Id /*typeId*/, Op opCode,
444 --numOperands;428 --numOperands;
445 // Get names for printing "(XXX)" for readability, *after* this id429 // Get names for printing "(XXX)" for readability, *after* this id
446 if (opCode == OpName)430 if (opCode == OpName)
447- idDescriptor[stream[word - 1]] = decodeString().second;431+ idDescriptor[stream[word - 1]] = (const char*)(&stream[word]);
448 break;432 break;
449 case OperandVariableIds:433 case OperandVariableIds:
450 disassembleIds(numOperands);434 disassembleIds(numOperands);
@@ -53,7 +53,6 @@ namespace spv {
53 #include "GLSL.ext.EXT.h"53 #include "GLSL.ext.EXT.h"
54 #include "GLSL.ext.AMD.h"54 #include "GLSL.ext.AMD.h"
55 #include "GLSL.ext.NV.h"55 #include "GLSL.ext.NV.h"
56- #include "GLSL.ext.ARM.h"
57 }56 }
58}57}
59 58 
@@ -98,8 +97,6 @@ const char* ExecutionModelString(int model)
98 case 6: return "Kernel";97 case 6: return "Kernel";
99 case ExecutionModelTaskNV: return "TaskNV";98 case ExecutionModelTaskNV: return "TaskNV";
100 case ExecutionModelMeshNV: return "MeshNV";99 case ExecutionModelMeshNV: return "MeshNV";
101- case ExecutionModelTaskEXT: return "TaskEXT";
102- case ExecutionModelMeshEXT: return "MeshEXT";
103 100 
104 default: return "Bad";101 default: return "Bad";
105 102 
@@ -176,32 +173,27 @@ const char* ExecutionModeString(int mode)
176 case 31: return "ContractionOff";173 case 31: return "ContractionOff";
177 case 32: return "Bad";174 case 32: return "Bad";
178 175 
179- case ExecutionModeInitializer: return "Initializer";176+ case ExecutionModeInitializer: return "Initializer";
180- case ExecutionModeFinalizer: return "Finalizer";177+ case ExecutionModeFinalizer: return "Finalizer";
181- case ExecutionModeSubgroupSize: return "SubgroupSize";178+ case ExecutionModeSubgroupSize: return "SubgroupSize";
182- case ExecutionModeSubgroupsPerWorkgroup: return "SubgroupsPerWorkgroup";179+ case ExecutionModeSubgroupsPerWorkgroup: return "SubgroupsPerWorkgroup";
183- case ExecutionModeSubgroupsPerWorkgroupId: return "SubgroupsPerWorkgroupId";180+ case ExecutionModeSubgroupsPerWorkgroupId: return "SubgroupsPerWorkgroupId";
184- case ExecutionModeLocalSizeId: return "LocalSizeId";181+ case ExecutionModeLocalSizeId: return "LocalSizeId";
185- case ExecutionModeLocalSizeHintId: return "LocalSizeHintId";182+ case ExecutionModeLocalSizeHintId: return "LocalSizeHintId";
186 183 
187- case ExecutionModePostDepthCoverage: return "PostDepthCoverage";184+ case ExecutionModePostDepthCoverage: return "PostDepthCoverage";
188- case ExecutionModeDenormPreserve: return "DenormPreserve";185+ case ExecutionModeDenormPreserve: return "DenormPreserve";
189- case ExecutionModeDenormFlushToZero: return "DenormFlushToZero";186+ case ExecutionModeDenormFlushToZero: return "DenormFlushToZero";
190- case ExecutionModeSignedZeroInfNanPreserve: return "SignedZeroInfNanPreserve";187+ case ExecutionModeSignedZeroInfNanPreserve: return "SignedZeroInfNanPreserve";
191- case ExecutionModeRoundingModeRTE: return "RoundingModeRTE";188+ case ExecutionModeRoundingModeRTE: return "RoundingModeRTE";
192- case ExecutionModeRoundingModeRTZ: return "RoundingModeRTZ";189+ case ExecutionModeRoundingModeRTZ: return "RoundingModeRTZ";
193- case ExecutionModeEarlyAndLateFragmentTestsAMD: return "EarlyAndLateFragmentTestsAMD";190+ case ExecutionModeStencilRefReplacingEXT: return "StencilRefReplacingEXT";
194- case ExecutionModeStencilRefUnchangedFrontAMD: return "StencilRefUnchangedFrontAMD";
195- case ExecutionModeStencilRefLessFrontAMD: return "StencilRefLessFrontAMD";
196- case ExecutionModeStencilRefGreaterBackAMD: return "StencilRefGreaterBackAMD";
197- case ExecutionModeStencilRefReplacingEXT: return "StencilRefReplacingEXT";
198- case ExecutionModeSubgroupUniformControlFlowKHR: return "SubgroupUniformControlFlow";
199 191 
200- case ExecutionModeOutputLinesNV: return "OutputLinesNV";192+ case ExecutionModeOutputLinesNV: return "OutputLinesNV";
201- case ExecutionModeOutputPrimitivesNV: return "OutputPrimitivesNV";193+ case ExecutionModeOutputPrimitivesNV: return "OutputPrimitivesNV";
202- case ExecutionModeOutputTrianglesNV: return "OutputTrianglesNV";194+ case ExecutionModeOutputTrianglesNV: return "OutputTrianglesNV";
203- case ExecutionModeDerivativeGroupQuadsNV: return "DerivativeGroupQuadsNV";195+ case ExecutionModeDerivativeGroupQuadsNV: return "DerivativeGroupQuadsNV";
204- case ExecutionModeDerivativeGroupLinearNV: return "DerivativeGroupLinearNV";196+ case ExecutionModeDerivativeGroupLinearNV: return "DerivativeGroupLinearNV";
205 197 
206 case ExecutionModePixelInterlockOrderedEXT: return "PixelInterlockOrderedEXT";198 case ExecutionModePixelInterlockOrderedEXT: return "PixelInterlockOrderedEXT";
207 case ExecutionModePixelInterlockUnorderedEXT: return "PixelInterlockUnorderedEXT";199 case ExecutionModePixelInterlockUnorderedEXT: return "PixelInterlockUnorderedEXT";
@@ -245,7 +237,7 @@ const char* StorageClassString(int StorageClass)
245 case StorageClassIncomingCallableDataKHR: return "IncomingCallableDataKHR";237 case StorageClassIncomingCallableDataKHR: return "IncomingCallableDataKHR";
246 238 
247 case StorageClassPhysicalStorageBufferEXT: return "PhysicalStorageBufferEXT";239 case StorageClassPhysicalStorageBufferEXT: return "PhysicalStorageBufferEXT";
248- case StorageClassTaskPayloadWorkgroupEXT: return "TaskPayloadWorkgroupEXT";240+ 
249 default: return "Bad";241 default: return "Bad";
250 }242 }
251}243}
@@ -312,8 +304,7 @@ const char* DecorationString(int decoration)
312 case DecorationPerPrimitiveNV: return "PerPrimitiveNV";304 case DecorationPerPrimitiveNV: return "PerPrimitiveNV";
313 case DecorationPerViewNV: return "PerViewNV";305 case DecorationPerViewNV: return "PerViewNV";
314 case DecorationPerTaskNV: return "PerTaskNV";306 case DecorationPerTaskNV: return "PerTaskNV";
315- 307+ case DecorationPerVertexNV: return "PerVertexNV";
316- case DecorationPerVertexKHR: return "PerVertexKHR";
317 308 
318 case DecorationNonUniformEXT: return "DecorationNonUniformEXT";309 case DecorationNonUniformEXT: return "DecorationNonUniformEXT";
319 case DecorationHlslCounterBufferGOOGLE: return "DecorationHlslCounterBufferGOOGLE";310 case DecorationHlslCounterBufferGOOGLE: return "DecorationHlslCounterBufferGOOGLE";
@@ -400,12 +391,11 @@ const char* BuiltInString(int builtIn)
400 case BuiltInObjectRayDirectionKHR: return "ObjectRayDirectionKHR";391 case BuiltInObjectRayDirectionKHR: return "ObjectRayDirectionKHR";
401 case BuiltInRayTminKHR: return "RayTminKHR";392 case BuiltInRayTminKHR: return "RayTminKHR";
402 case BuiltInRayTmaxKHR: return "RayTmaxKHR";393 case BuiltInRayTmaxKHR: return "RayTmaxKHR";
403- case BuiltInCullMaskKHR: return "CullMaskKHR";
404 case BuiltInInstanceCustomIndexKHR: return "InstanceCustomIndexKHR";394 case BuiltInInstanceCustomIndexKHR: return "InstanceCustomIndexKHR";
405 case BuiltInRayGeometryIndexKHR: return "RayGeometryIndexKHR";395 case BuiltInRayGeometryIndexKHR: return "RayGeometryIndexKHR";
406 case BuiltInObjectToWorldKHR: return "ObjectToWorldKHR";396 case BuiltInObjectToWorldKHR: return "ObjectToWorldKHR";
407 case BuiltInWorldToObjectKHR: return "WorldToObjectKHR";397 case BuiltInWorldToObjectKHR: return "WorldToObjectKHR";
408- case BuiltInHitTNV: return "HitTNV";398+ case BuiltInHitTKHR: return "HitTKHR";
409 case BuiltInHitKindKHR: return "HitKindKHR";399 case BuiltInHitKindKHR: return "HitKindKHR";
410 case BuiltInIncomingRayFlagsKHR: return "IncomingRayFlagsKHR";400 case BuiltInIncomingRayFlagsKHR: return "IncomingRayFlagsKHR";
411 case BuiltInViewportMaskNV: return "ViewportMaskNV";401 case BuiltInViewportMaskNV: return "ViewportMaskNV";
@@ -415,8 +405,8 @@ const char* BuiltInString(int builtIn)
415 case BuiltInViewportMaskPerViewNV: return "ViewportMaskPerViewNV";405 case BuiltInViewportMaskPerViewNV: return "ViewportMaskPerViewNV";
416// case BuiltInFragmentSizeNV: return "FragmentSizeNV"; // superseded by BuiltInFragSizeEXT406// case BuiltInFragmentSizeNV: return "FragmentSizeNV"; // superseded by BuiltInFragSizeEXT
417// case BuiltInInvocationsPerPixelNV: return "InvocationsPerPixelNV"; // superseded by BuiltInFragInvocationCountEXT407// case BuiltInInvocationsPerPixelNV: return "InvocationsPerPixelNV"; // superseded by BuiltInFragInvocationCountEXT
418- case BuiltInBaryCoordKHR: return "BaryCoordKHR";408+ case BuiltInBaryCoordNV: return "BaryCoordNV";
419- case BuiltInBaryCoordNoPerspKHR: return "BaryCoordNoPerspKHR";409+ case BuiltInBaryCoordNoPerspNV: return "BaryCoordNoPerspNV";
420 410 
421 case BuiltInFragSizeEXT: return "FragSizeEXT";411 case BuiltInFragSizeEXT: return "FragSizeEXT";
422 case BuiltInFragInvocationCountEXT: return "FragInvocationCountEXT";412 case BuiltInFragInvocationCountEXT: return "FragInvocationCountEXT";
@@ -435,16 +425,6 @@ const char* BuiltInString(int builtIn)
435 case BuiltInSMCountNV: return "SMCountNV";425 case BuiltInSMCountNV: return "SMCountNV";
436 case BuiltInWarpIDNV: return "WarpIDNV";426 case BuiltInWarpIDNV: return "WarpIDNV";
437 case BuiltInSMIDNV: return "SMIDNV";427 case BuiltInSMIDNV: return "SMIDNV";
438- case BuiltInCurrentRayTimeNV: return "CurrentRayTimeNV";
439- case BuiltInPrimitivePointIndicesEXT: return "PrimitivePointIndicesEXT";
440- case BuiltInPrimitiveLineIndicesEXT: return "PrimitiveLineIndicesEXT";
441- case BuiltInPrimitiveTriangleIndicesEXT: return "PrimitiveTriangleIndicesEXT";
442- case BuiltInCullPrimitiveEXT: return "CullPrimitiveEXT";
443- case BuiltInCoreCountARM: return "CoreCountARM";
444- case BuiltInCoreIDARM: return "CoreIDARM";
445- case BuiltInCoreMaxIDARM: return "CoreMaxIDARM";
446- case BuiltInWarpIDARM: return "WarpIDARM";
447- case BuiltInWarpMaxIDARM: return "BuiltInWarpMaxIDARM";
448 428 
449 default: return "Bad";429 default: return "Bad";
450 }430 }
@@ -543,8 +523,6 @@ const char* ImageFormatString(int format)
543 case 37: return "Rg8ui";523 case 37: return "Rg8ui";
544 case 38: return "R16ui";524 case 38: return "R16ui";
545 case 39: return "R8ui";525 case 39: return "R8ui";
546- case 40: return "R64ui";
547- case 41: return "R64i";
548 526 
549 default:527 default:
550 return "Bad";528 return "Bad";
@@ -918,12 +896,6 @@ const char* CapabilityString(int info)
918 case CapabilityDeviceGroup: return "DeviceGroup";896 case CapabilityDeviceGroup: return "DeviceGroup";
919 case CapabilityMultiView: return "MultiView";897 case CapabilityMultiView: return "MultiView";
920 898 
921- case CapabilityDenormPreserve: return "DenormPreserve";
922- case CapabilityDenormFlushToZero: return "DenormFlushToZero";
923- case CapabilitySignedZeroInfNanPreserve: return "SignedZeroInfNanPreserve";
924- case CapabilityRoundingModeRTE: return "RoundingModeRTE";
925- case CapabilityRoundingModeRTZ: return "RoundingModeRTZ";
926- 
927 case CapabilityStencilExportEXT: return "StencilExportEXT";899 case CapabilityStencilExportEXT: return "StencilExportEXT";
928 900 
929 case CapabilityFloat16ImageAMD: return "Float16ImageAMD";901 case CapabilityFloat16ImageAMD: return "Float16ImageAMD";
@@ -941,18 +913,14 @@ const char* CapabilityString(int info)
941 case CapabilityPerViewAttributesNV: return "PerViewAttributesNV";913 case CapabilityPerViewAttributesNV: return "PerViewAttributesNV";
942 case CapabilityGroupNonUniformPartitionedNV: return "GroupNonUniformPartitionedNV";914 case CapabilityGroupNonUniformPartitionedNV: return "GroupNonUniformPartitionedNV";
943 case CapabilityRayTracingNV: return "RayTracingNV";915 case CapabilityRayTracingNV: return "RayTracingNV";
944- case CapabilityRayTracingMotionBlurNV: return "RayTracingMotionBlurNV";
945- case CapabilityRayTracingKHR: return "RayTracingKHR";
946- case CapabilityRayCullMaskKHR: return "RayCullMaskKHR";
947- case CapabilityRayQueryKHR: return "RayQueryKHR";
948 case CapabilityRayTracingProvisionalKHR: return "RayTracingProvisionalKHR";916 case CapabilityRayTracingProvisionalKHR: return "RayTracingProvisionalKHR";
949- case CapabilityRayTraversalPrimitiveCullingKHR: return "RayTraversalPrimitiveCullingKHR";917+ case CapabilityRayQueryProvisionalKHR: return "RayQueryProvisionalKHR";
918+ case CapabilityRayTraversalPrimitiveCullingProvisionalKHR: return "RayTraversalPrimitiveCullingProvisionalKHR";
950 case CapabilityComputeDerivativeGroupQuadsNV: return "ComputeDerivativeGroupQuadsNV";919 case CapabilityComputeDerivativeGroupQuadsNV: return "ComputeDerivativeGroupQuadsNV";
951 case CapabilityComputeDerivativeGroupLinearNV: return "ComputeDerivativeGroupLinearNV";920 case CapabilityComputeDerivativeGroupLinearNV: return "ComputeDerivativeGroupLinearNV";
952- case CapabilityFragmentBarycentricKHR: return "FragmentBarycentricKHR";921+ case CapabilityFragmentBarycentricNV: return "FragmentBarycentricNV";
953 case CapabilityMeshShadingNV: return "MeshShadingNV";922 case CapabilityMeshShadingNV: return "MeshShadingNV";
954 case CapabilityImageFootprintNV: return "ImageFootprintNV";923 case CapabilityImageFootprintNV: return "ImageFootprintNV";
955- case CapabilityMeshShadingEXT: return "MeshShadingEXT";
956// case CapabilityShadingRateNV: return "ShadingRateNV"; // superseded by FragmentDensityEXT924// case CapabilityShadingRateNV: return "ShadingRateNV"; // superseded by FragmentDensityEXT
957 case CapabilitySampleMaskOverrideCoverageNV: return "SampleMaskOverrideCoverageNV";925 case CapabilitySampleMaskOverrideCoverageNV: return "SampleMaskOverrideCoverageNV";
958 case CapabilityFragmentDensityEXT: return "FragmentDensityEXT";926 case CapabilityFragmentDensityEXT: return "FragmentDensityEXT";
@@ -990,21 +958,11 @@ const char* CapabilityString(int info)
990 958 
991 case CapabilityDemoteToHelperInvocationEXT: return "DemoteToHelperInvocationEXT";959 case CapabilityDemoteToHelperInvocationEXT: return "DemoteToHelperInvocationEXT";
992 case CapabilityShaderClockKHR: return "ShaderClockKHR";960 case CapabilityShaderClockKHR: return "ShaderClockKHR";
993- case CapabilityInt64ImageEXT: return "Int64ImageEXT";
994 961 
995 case CapabilityIntegerFunctions2INTEL: return "CapabilityIntegerFunctions2INTEL";962 case CapabilityIntegerFunctions2INTEL: return "CapabilityIntegerFunctions2INTEL";
996 963 
997- case CapabilityAtomicFloat16AddEXT: return "AtomicFloat16AddEXT";
998 case CapabilityAtomicFloat32AddEXT: return "AtomicFloat32AddEXT";964 case CapabilityAtomicFloat32AddEXT: return "AtomicFloat32AddEXT";
999 case CapabilityAtomicFloat64AddEXT: return "AtomicFloat64AddEXT";965 case CapabilityAtomicFloat64AddEXT: return "AtomicFloat64AddEXT";
1000- case CapabilityAtomicFloat16MinMaxEXT: return "AtomicFloat16MinMaxEXT";
1001- case CapabilityAtomicFloat32MinMaxEXT: return "AtomicFloat32MinMaxEXT";
1002- case CapabilityAtomicFloat64MinMaxEXT: return "AtomicFloat64MinMaxEXT";
1003- 
1004- case CapabilityWorkgroupMemoryExplicitLayoutKHR: return "CapabilityWorkgroupMemoryExplicitLayoutKHR";
1005- case CapabilityWorkgroupMemoryExplicitLayout8BitAccessKHR: return "CapabilityWorkgroupMemoryExplicitLayout8BitAccessKHR";
1006- case CapabilityWorkgroupMemoryExplicitLayout16BitAccessKHR: return "CapabilityWorkgroupMemoryExplicitLayout16BitAccessKHR";
1007- case CapabilityCoreBuiltinsARM: return "CoreBuiltinsARM";
1008 966 
1009 default: return "Bad";967 default: return "Bad";
1010 }968 }
@@ -1375,8 +1333,6 @@ const char* OpcodeString(int op)
1375 case 365: return "OpGroupNonUniformQuadBroadcast";1333 case 365: return "OpGroupNonUniformQuadBroadcast";
1376 case 366: return "OpGroupNonUniformQuadSwap";1334 case 366: return "OpGroupNonUniformQuadSwap";
1377 1335 
1378- case OpTerminateInvocation: return "OpTerminateInvocation";
1379- 
1380 case 4421: return "OpSubgroupBallotKHR";1336 case 4421: return "OpSubgroupBallotKHR";
1381 case 4422: return "OpSubgroupFirstInvocationKHR";1337 case 4422: return "OpSubgroupFirstInvocationKHR";
1382 case 4428: return "OpSubgroupAllKHR";1338 case 4428: return "OpSubgroupAllKHR";
@@ -1385,8 +1341,6 @@ const char* OpcodeString(int op)
1385 case 4432: return "OpSubgroupReadInvocationKHR";1341 case 4432: return "OpSubgroupReadInvocationKHR";
1386 1342 
1387 case OpAtomicFAddEXT: return "OpAtomicFAddEXT";1343 case OpAtomicFAddEXT: return "OpAtomicFAddEXT";
1388- case OpAtomicFMinEXT: return "OpAtomicFMinEXT";
1389- case OpAtomicFMaxEXT: return "OpAtomicFMaxEXT";
1390 1344 
1391 case 5000: return "OpGroupIAddNonUniformAMD";1345 case 5000: return "OpGroupIAddNonUniformAMD";
1392 case 5001: return "OpGroupFAddNonUniformAMD";1346 case 5001: return "OpGroupFAddNonUniformAMD";
@@ -1405,26 +1359,17 @@ const char* OpcodeString(int op)
1405 case OpDecorateStringGOOGLE: return "OpDecorateStringGOOGLE";1359 case OpDecorateStringGOOGLE: return "OpDecorateStringGOOGLE";
1406 case OpMemberDecorateStringGOOGLE: return "OpMemberDecorateStringGOOGLE";1360 case OpMemberDecorateStringGOOGLE: return "OpMemberDecorateStringGOOGLE";
1407 1361 
1408- case OpReportIntersectionKHR: return "OpReportIntersectionKHR";
1409- case OpIgnoreIntersectionNV: return "OpIgnoreIntersectionNV";
1410- case OpIgnoreIntersectionKHR: return "OpIgnoreIntersectionKHR";
1411- case OpTerminateRayNV: return "OpTerminateRayNV";
1412- case OpTerminateRayKHR: return "OpTerminateRayKHR";
1413- case OpTraceNV: return "OpTraceNV";
1414- case OpTraceRayMotionNV: return "OpTraceRayMotionNV";
1415- case OpTraceRayKHR: return "OpTraceRayKHR";
1416- case OpTypeAccelerationStructureKHR: return "OpTypeAccelerationStructureKHR";
1417- case OpExecuteCallableNV: return "OpExecuteCallableNV";
1418- case OpExecuteCallableKHR: return "OpExecuteCallableKHR";
1419- case OpConvertUToAccelerationStructureKHR: return "OpConvertUToAccelerationStructureKHR";
1420- 
1421 case OpGroupNonUniformPartitionNV: return "OpGroupNonUniformPartitionNV";1362 case OpGroupNonUniformPartitionNV: return "OpGroupNonUniformPartitionNV";
1363+ case OpReportIntersectionKHR: return "OpReportIntersectionKHR";
1364+ case OpIgnoreIntersectionKHR: return "OpIgnoreIntersectionKHR";
1365+ case OpTerminateRayKHR: return "OpTerminateRayKHR";
1366+ case OpTraceRayKHR: return "OpTraceRayKHR";
1367+ case OpTypeAccelerationStructureKHR: return "OpTypeAccelerationStructureKHR";
1368+ case OpExecuteCallableKHR: return "OpExecuteCallableKHR";
1422 case OpImageSampleFootprintNV: return "OpImageSampleFootprintNV";1369 case OpImageSampleFootprintNV: return "OpImageSampleFootprintNV";
1423 case OpWritePackedPrimitiveIndices4x8NV: return "OpWritePackedPrimitiveIndices4x8NV";1370 case OpWritePackedPrimitiveIndices4x8NV: return "OpWritePackedPrimitiveIndices4x8NV";
1424- case OpEmitMeshTasksEXT: return "OpEmitMeshTasksEXT";
1425- case OpSetMeshOutputsEXT: return "OpSetMeshOutputsEXT";
1426 1371 
1427- case OpTypeRayQueryKHR: return "OpTypeRayQueryKHR";1372+ case OpTypeRayQueryProvisionalKHR: return "OpTypeRayQueryProvisionalKHR";
1428 case OpRayQueryInitializeKHR: return "OpRayQueryInitializeKHR";1373 case OpRayQueryInitializeKHR: return "OpRayQueryInitializeKHR";
1429 case OpRayQueryTerminateKHR: return "OpRayQueryTerminateKHR";1374 case OpRayQueryTerminateKHR: return "OpRayQueryTerminateKHR";
1430 case OpRayQueryGenerateIntersectionKHR: return "OpRayQueryGenerateIntersectionKHR";1375 case OpRayQueryGenerateIntersectionKHR: return "OpRayQueryGenerateIntersectionKHR";
@@ -1556,7 +1501,6 @@ void Parameterize()
1556 InstructionDesc[OpBranchConditional].setResultAndType(false, false);1501 InstructionDesc[OpBranchConditional].setResultAndType(false, false);
1557 InstructionDesc[OpSwitch].setResultAndType(false, false);1502 InstructionDesc[OpSwitch].setResultAndType(false, false);
1558 InstructionDesc[OpKill].setResultAndType(false, false);1503 InstructionDesc[OpKill].setResultAndType(false, false);
1559- InstructionDesc[OpTerminateInvocation].setResultAndType(false, false);
1560 InstructionDesc[OpReturn].setResultAndType(false, false);1504 InstructionDesc[OpReturn].setResultAndType(false, false);
1561 InstructionDesc[OpReturnValue].setResultAndType(false, false);1505 InstructionDesc[OpReturnValue].setResultAndType(false, false);
1562 InstructionDesc[OpUnreachable].setResultAndType(false, false);1506 InstructionDesc[OpUnreachable].setResultAndType(false, false);
@@ -1614,7 +1558,7 @@ void Parameterize()
1614 DecorationOperands[DecorationInputAttachmentIndex].push(OperandLiteralNumber, "'Attachment Index'");1558 DecorationOperands[DecorationInputAttachmentIndex].push(OperandLiteralNumber, "'Attachment Index'");
1615 DecorationOperands[DecorationAlignment].push(OperandLiteralNumber, "'Alignment'");1559 DecorationOperands[DecorationAlignment].push(OperandLiteralNumber, "'Alignment'");
1616 1560 
1617- OperandClassParams[OperandSource].set(0, SourceString, nullptr);1561+ OperandClassParams[OperandSource].set(0, SourceString, 0);
1618 OperandClassParams[OperandExecutionModel].set(0, ExecutionModelString, nullptr);1562 OperandClassParams[OperandExecutionModel].set(0, ExecutionModelString, nullptr);
1619 OperandClassParams[OperandAddressing].set(0, AddressingString, nullptr);1563 OperandClassParams[OperandAddressing].set(0, AddressingString, nullptr);
1620 OperandClassParams[OperandMemory].set(0, MemoryString, nullptr);1564 OperandClassParams[OperandMemory].set(0, MemoryString, nullptr);
@@ -1646,7 +1590,7 @@ void Parameterize()
1646 OperandClassParams[OperandKernelEnqueueFlags].set(0, KernelEnqueueFlagsString, nullptr);1590 OperandClassParams[OperandKernelEnqueueFlags].set(0, KernelEnqueueFlagsString, nullptr);
1647 OperandClassParams[OperandKernelProfilingInfo].set(0, KernelProfilingInfoString, nullptr, true);1591 OperandClassParams[OperandKernelProfilingInfo].set(0, KernelProfilingInfoString, nullptr, true);
1648 OperandClassParams[OperandCapability].set(0, CapabilityString, nullptr);1592 OperandClassParams[OperandCapability].set(0, CapabilityString, nullptr);
1649- OperandClassParams[OperandOpcode].set(OpCodeMask + 1, OpcodeString, nullptr);1593+ OperandClassParams[OperandOpcode].set(OpCodeMask + 1, OpcodeString, 0);
1650 1594 
1651 // set name of operator, an initial set of <id> style operands, and the description1595 // set name of operator, an initial set of <id> style operands, and the description
1652 1596 
@@ -2380,16 +2324,6 @@ void Parameterize()
2380 InstructionDesc[OpAtomicSMax].operands.push(OperandMemorySemantics, "'Semantics'");2324 InstructionDesc[OpAtomicSMax].operands.push(OperandMemorySemantics, "'Semantics'");
2381 InstructionDesc[OpAtomicSMax].operands.push(OperandId, "'Value'");2325 InstructionDesc[OpAtomicSMax].operands.push(OperandId, "'Value'");
2382 2326 
2383- InstructionDesc[OpAtomicFMinEXT].operands.push(OperandId, "'Pointer'");
2384- InstructionDesc[OpAtomicFMinEXT].operands.push(OperandScope, "'Scope'");
2385- InstructionDesc[OpAtomicFMinEXT].operands.push(OperandMemorySemantics, "'Semantics'");
2386- InstructionDesc[OpAtomicFMinEXT].operands.push(OperandId, "'Value'");
2387- 
2388- InstructionDesc[OpAtomicFMaxEXT].operands.push(OperandId, "'Pointer'");
2389- InstructionDesc[OpAtomicFMaxEXT].operands.push(OperandScope, "'Scope'");
2390- InstructionDesc[OpAtomicFMaxEXT].operands.push(OperandMemorySemantics, "'Semantics'");
2391- InstructionDesc[OpAtomicFMaxEXT].operands.push(OperandId, "'Value'");
2392- 
2393 InstructionDesc[OpAtomicAnd].operands.push(OperandId, "'Pointer'");2327 InstructionDesc[OpAtomicAnd].operands.push(OperandId, "'Pointer'");
2394 InstructionDesc[OpAtomicAnd].operands.push(OperandScope, "'Scope'");2328 InstructionDesc[OpAtomicAnd].operands.push(OperandScope, "'Scope'");
2395 InstructionDesc[OpAtomicAnd].operands.push(OperandMemorySemantics, "'Semantics'");2329 InstructionDesc[OpAtomicAnd].operands.push(OperandMemorySemantics, "'Semantics'");
@@ -2768,7 +2702,7 @@ void Parameterize()
2768 2702 
2769 InstructionDesc[OpGroupNonUniformQuadSwap].operands.push(OperandScope, "'Execution'");2703 InstructionDesc[OpGroupNonUniformQuadSwap].operands.push(OperandScope, "'Execution'");
2770 InstructionDesc[OpGroupNonUniformQuadSwap].operands.push(OperandId, "X");2704 InstructionDesc[OpGroupNonUniformQuadSwap].operands.push(OperandId, "X");
2771- InstructionDesc[OpGroupNonUniformQuadSwap].operands.push(OperandId, "'Direction'");2705+ InstructionDesc[OpGroupNonUniformQuadSwap].operands.push(OperandLiteralNumber, "'Direction'");
2772 2706 
2773 InstructionDesc[OpSubgroupBallotKHR].operands.push(OperandId, "'Predicate'");2707 InstructionDesc[OpSubgroupBallotKHR].operands.push(OperandId, "'Predicate'");
2774 2708 
@@ -2831,34 +2765,7 @@ void Parameterize()
2831 2765 
2832 InstructionDesc[OpTypeAccelerationStructureKHR].setResultAndType(true, false);2766 InstructionDesc[OpTypeAccelerationStructureKHR].setResultAndType(true, false);
2833 2767 
2834- InstructionDesc[OpTraceNV].operands.push(OperandId, "'Acceleration Structure'");2768+ InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'NV Acceleration Structure'");
2835- InstructionDesc[OpTraceNV].operands.push(OperandId, "'Ray Flags'");
2836- InstructionDesc[OpTraceNV].operands.push(OperandId, "'Cull Mask'");
2837- InstructionDesc[OpTraceNV].operands.push(OperandId, "'SBT Record Offset'");
2838- InstructionDesc[OpTraceNV].operands.push(OperandId, "'SBT Record Stride'");
2839- InstructionDesc[OpTraceNV].operands.push(OperandId, "'Miss Index'");
2840- InstructionDesc[OpTraceNV].operands.push(OperandId, "'Ray Origin'");
2841- InstructionDesc[OpTraceNV].operands.push(OperandId, "'TMin'");
2842- InstructionDesc[OpTraceNV].operands.push(OperandId, "'Ray Direction'");
2843- InstructionDesc[OpTraceNV].operands.push(OperandId, "'TMax'");
2844- InstructionDesc[OpTraceNV].operands.push(OperandId, "'Payload'");
2845- InstructionDesc[OpTraceNV].setResultAndType(false, false);
2846- 
2847- InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'Acceleration Structure'");
2848- InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'Ray Flags'");
2849- InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'Cull Mask'");
2850- InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'SBT Record Offset'");
2851- InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'SBT Record Stride'");
2852- InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'Miss Index'");
2853- InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'Ray Origin'");
2854- InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'TMin'");
2855- InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'Ray Direction'");
2856- InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'TMax'");
2857- InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'Time'");
2858- InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'Payload'");
2859- InstructionDesc[OpTraceRayMotionNV].setResultAndType(false, false);
2860- 
2861- InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'Acceleration Structure'");
2862 InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'Ray Flags'");2769 InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'Ray Flags'");
2863 InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'Cull Mask'");2770 InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'Cull Mask'");
2864 InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'SBT Record Offset'");2771 InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'SBT Record Offset'");
@@ -2874,28 +2781,17 @@ void Parameterize()
2874 InstructionDesc[OpReportIntersectionKHR].operands.push(OperandId, "'Hit Parameter'");2781 InstructionDesc[OpReportIntersectionKHR].operands.push(OperandId, "'Hit Parameter'");
2875 InstructionDesc[OpReportIntersectionKHR].operands.push(OperandId, "'Hit Kind'");2782 InstructionDesc[OpReportIntersectionKHR].operands.push(OperandId, "'Hit Kind'");
2876 2783 
2877- InstructionDesc[OpIgnoreIntersectionNV].setResultAndType(false, false);
2878- 
2879 InstructionDesc[OpIgnoreIntersectionKHR].setResultAndType(false, false);2784 InstructionDesc[OpIgnoreIntersectionKHR].setResultAndType(false, false);
2880 2785 
2881- InstructionDesc[OpTerminateRayNV].setResultAndType(false, false);
2882- 
2883 InstructionDesc[OpTerminateRayKHR].setResultAndType(false, false);2786 InstructionDesc[OpTerminateRayKHR].setResultAndType(false, false);
2884 2787
2885- InstructionDesc[OpExecuteCallableNV].operands.push(OperandId, "SBT Record Index");
2886- InstructionDesc[OpExecuteCallableNV].operands.push(OperandId, "CallableData ID");
2887- InstructionDesc[OpExecuteCallableNV].setResultAndType(false, false);
2888- 
2889 InstructionDesc[OpExecuteCallableKHR].operands.push(OperandId, "SBT Record Index");2788 InstructionDesc[OpExecuteCallableKHR].operands.push(OperandId, "SBT Record Index");
2890- InstructionDesc[OpExecuteCallableKHR].operands.push(OperandId, "CallableData");2789+ InstructionDesc[OpExecuteCallableKHR].operands.push(OperandId, "CallableData ID");
2891 InstructionDesc[OpExecuteCallableKHR].setResultAndType(false, false);2790 InstructionDesc[OpExecuteCallableKHR].setResultAndType(false, false);
2892 2791 
2893- InstructionDesc[OpConvertUToAccelerationStructureKHR].operands.push(OperandId, "Value");
2894- InstructionDesc[OpConvertUToAccelerationStructureKHR].setResultAndType(true, true);
2895- 
2896 // Ray Query2792 // Ray Query
2897 InstructionDesc[OpTypeAccelerationStructureKHR].setResultAndType(true, false);2793 InstructionDesc[OpTypeAccelerationStructureKHR].setResultAndType(true, false);
2898- InstructionDesc[OpTypeRayQueryKHR].setResultAndType(true, false);2794+ InstructionDesc[OpTypeRayQueryProvisionalKHR].setResultAndType(true, false);
2899 2795 
2900 InstructionDesc[OpRayQueryInitializeKHR].operands.push(OperandId, "'RayQuery'");2796 InstructionDesc[OpRayQueryInitializeKHR].operands.push(OperandId, "'RayQuery'");
2901 InstructionDesc[OpRayQueryInitializeKHR].operands.push(OperandId, "'AccelerationS'");2797 InstructionDesc[OpRayQueryInitializeKHR].operands.push(OperandId, "'AccelerationS'");
@@ -2997,17 +2893,6 @@ void Parameterize()
2997 InstructionDesc[OpWritePackedPrimitiveIndices4x8NV].operands.push(OperandId, "'Index Offset'");2893 InstructionDesc[OpWritePackedPrimitiveIndices4x8NV].operands.push(OperandId, "'Index Offset'");
2998 InstructionDesc[OpWritePackedPrimitiveIndices4x8NV].operands.push(OperandId, "'Packed Indices'");2894 InstructionDesc[OpWritePackedPrimitiveIndices4x8NV].operands.push(OperandId, "'Packed Indices'");
2999 2895 
3000- InstructionDesc[OpEmitMeshTasksEXT].operands.push(OperandId, "'groupCountX'");
3001- InstructionDesc[OpEmitMeshTasksEXT].operands.push(OperandId, "'groupCountY'");
3002- InstructionDesc[OpEmitMeshTasksEXT].operands.push(OperandId, "'groupCountZ'");
3003- InstructionDesc[OpEmitMeshTasksEXT].operands.push(OperandId, "'Payload'");
3004- InstructionDesc[OpEmitMeshTasksEXT].setResultAndType(false, false);
3005- 
3006- InstructionDesc[OpSetMeshOutputsEXT].operands.push(OperandId, "'vertexCount'");
3007- InstructionDesc[OpSetMeshOutputsEXT].operands.push(OperandId, "'primitiveCount'");
3008- InstructionDesc[OpSetMeshOutputsEXT].setResultAndType(false, false);
3009- 
3010- 
3011 InstructionDesc[OpTypeCooperativeMatrixNV].operands.push(OperandId, "'Component Type'");2896 InstructionDesc[OpTypeCooperativeMatrixNV].operands.push(OperandId, "'Component Type'");
3012 InstructionDesc[OpTypeCooperativeMatrixNV].operands.push(OperandId, "'Scope'");2897 InstructionDesc[OpTypeCooperativeMatrixNV].operands.push(OperandId, "'Scope'");
3013 InstructionDesc[OpTypeCooperativeMatrixNV].operands.push(OperandId, "'Rows'");2898 InstructionDesc[OpTypeCooperativeMatrixNV].operands.push(OperandId, "'Rows'");
@@ -190,7 +190,7 @@ protected:
190// Parameterize an enumerant190// Parameterize an enumerant
191class EnumParameters {191class EnumParameters {
192public:192public:
193- EnumParameters() : desc(nullptr) { }193+ EnumParameters() : desc(0) { }
194 const char* desc;194 const char* desc;
195};195};
196 196 
@@ -198,7 +198,7 @@ public:
198class EnumDefinition : public EnumParameters {198class EnumDefinition : public EnumParameters {
199public:199public:
200 EnumDefinition() : 200 EnumDefinition() :
201- ceiling(0), bitmask(false), getName(nullptr), enumParams(nullptr), operandParams(nullptr) { }201+ ceiling(0), bitmask(false), getName(0), enumParams(0), operandParams(0) { }
202 void set(int ceil, const char* (*name)(int), EnumParameters* ep, bool mask = false)202 void set(int ceil, const char* (*name)(int), EnumParameters* ep, bool mask = false)
203 {203 {
204 ceiling = ceil;204 ceiling = ceil;
@@ -111,23 +111,27 @@ public:
111 111 
112 void addStringOperand(const char* str)112 void addStringOperand(const char* str)
113 {113 {
114- unsigned int word = 0;114+ unsigned int word;
115- unsigned int shiftAmount = 0;115+ char* wordString = (char*)&word;
116+ char* wordPtr = wordString;
117+ int charCount = 0;
116 char c;118 char c;
117- 
118 do {119 do {
119 c = *(str++);120 c = *(str++);
120- word |= ((unsigned int)c) << shiftAmount;121+ *(wordPtr++) = c;
121- shiftAmount += 8;122+ ++charCount;
122- if (shiftAmount == 32) {123+ if (charCount == 4) {
123 addImmediateOperand(word);124 addImmediateOperand(word);
124- word = 0;125+ wordPtr = wordString;
125- shiftAmount = 0;126+ charCount = 0;
126 }127 }
127 } while (c != 0);128 } while (c != 0);
128 129 
129 // deal with partial last word130 // deal with partial last word
130- if (shiftAmount > 0) {131+ if (charCount > 0) {
132+ // pad with 0s
133+ for (; charCount < 4; ++charCount)
134+ *(wordPtr++) = 0;
131 addImmediateOperand(word);135 addImmediateOperand(word);
132 }136 }
133 }137 }
@@ -259,7 +263,6 @@ public:
259 case OpBranchConditional:263 case OpBranchConditional:
260 case OpSwitch:264 case OpSwitch:
261 case OpKill:265 case OpKill:
262- case OpTerminateInvocation:
263 case OpReturn:266 case OpReturn:
264 case OpReturnValue:267 case OpReturnValue:
265 case OpUnreachable:268 case OpUnreachable:
@@ -349,7 +352,6 @@ public:
349 const std::vector<Block*>& getBlocks() const { return blocks; }352 const std::vector<Block*>& getBlocks() const { return blocks; }
350 void addLocalVariable(std::unique_ptr<Instruction> inst);353 void addLocalVariable(std::unique_ptr<Instruction> inst);
351 Id getReturnType() const { return functionInstruction.getTypeId(); }354 Id getReturnType() const { return functionInstruction.getTypeId(); }
352- Id getFuncId() const { return functionInstruction.getResultId(); }
353 void setReturnPrecision(Decoration precision)355 void setReturnPrecision(Decoration precision)
354 {356 {
355 if (precision == DecorationRelaxedPrecision)357 if (precision == DecorationRelaxedPrecision)
@@ -358,14 +360,6 @@ public:
358 Decoration getReturnPrecision() const360 Decoration getReturnPrecision() const
359 { return reducedPrecisionReturn ? DecorationRelaxedPrecision : NoPrecision; }361 { return reducedPrecisionReturn ? DecorationRelaxedPrecision : NoPrecision; }
360 362 
361- void setDebugLineInfo(Id fileName, int line, int column) {
362- lineInstruction = std::unique_ptr<Instruction>{new Instruction(OpLine)};
363- lineInstruction->addIdOperand(fileName);
364- lineInstruction->addImmediateOperand(line);
365- lineInstruction->addImmediateOperand(column);
366- }
367- bool hasDebugLineInfo() const { return lineInstruction != nullptr; }
368- 
369 void setImplicitThis() { implicitThis = true; }363 void setImplicitThis() { implicitThis = true; }
370 bool hasImplicitThis() const { return implicitThis; }364 bool hasImplicitThis() const { return implicitThis; }
371 365 
@@ -382,11 +376,6 @@ public:
382 376 
383 void dump(std::vector<unsigned int>& out) const377 void dump(std::vector<unsigned int>& out) const
384 {378 {
385- // OpLine
386- if (lineInstruction != nullptr) {
387- lineInstruction->dump(out);
388- }
389-
390 // OpFunction379 // OpFunction
391 functionInstruction.dump(out);380 functionInstruction.dump(out);
392 381 
@@ -405,7 +394,6 @@ protected:
405 Function& operator=(Function&);394 Function& operator=(Function&);
406 395 
407 Module& parent;396 Module& parent;
408- std::unique_ptr<Instruction> lineInstruction;
409 Instruction functionInstruction;397 Instruction functionInstruction;
410 std::vector<Instruction*> parameterInstructions;398 std::vector<Instruction*> parameterInstructions;
411 std::vector<Block*> blocks;399 std::vector<Block*> blocks;
@@ -472,8 +460,7 @@ protected:
472// - the OpFunction instruction460// - the OpFunction instruction
473// - all the OpFunctionParameter instructions461// - all the OpFunctionParameter instructions
474__inline Function::Function(Id id, Id resultType, Id functionType, Id firstParamId, Module& parent)462__inline Function::Function(Id id, Id resultType, Id functionType, Id firstParamId, Module& parent)
475- : parent(parent), lineInstruction(nullptr),463+ : parent(parent), functionInstruction(id, resultType, OpFunction), implicitThis(false),
476- functionInstruction(id, resultType, OpFunction), implicitThis(false),
477 reducedPrecisionReturn(false)464 reducedPrecisionReturn(false)
478{465{
479 // OpFunction466 // OpFunction
@@ -31,22 +31,6 @@
31# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE31# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32# POSSIBILITY OF SUCH DAMAGE.32# POSSIBILITY OF SUCH DAMAGE.
33 33 
34-find_host_package(PythonInterp 3 REQUIRED)
35- 
36-set(GLSLANG_INTRINSIC_H "${GLSLANG_GENERATED_INCLUDEDIR}/glslang/glsl_intrinsic_header.h")
37-set(GLSLANG_INTRINSIC_PY "${CMAKE_CURRENT_SOURCE_DIR}/../gen_extension_headers.py")
38-set(GLSLANG_INTRINSIC_HEADER_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../glslang/ExtensionHeaders")
39- 
40-add_custom_command(
41- OUTPUT ${GLSLANG_INTRINSIC_H}
42- COMMAND ${PYTHON_EXECUTABLE} "${GLSLANG_INTRINSIC_PY}"
43- "-i" ${GLSLANG_INTRINSIC_HEADER_DIR}
44- "-o" ${GLSLANG_INTRINSIC_H}
45- DEPENDS ${GLSLANG_INTRINSIC_PY}
46- COMMENT "Generating ${GLSLANG_INTRINSIC_H}")
47- 
48-#add_custom_target(glslangValidator DEPENDS ${GLSLANG_INTRINSIC_H})
49- 
50add_library(glslang-default-resource-limits34add_library(glslang-default-resource-limits
51 ${CMAKE_CURRENT_SOURCE_DIR}/ResourceLimits.cpp35 ${CMAKE_CURRENT_SOURCE_DIR}/ResourceLimits.cpp
52 ${CMAKE_CURRENT_SOURCE_DIR}/resource_limits_c.cpp)36 ${CMAKE_CURRENT_SOURCE_DIR}/resource_limits_c.cpp)
@@ -57,7 +41,8 @@ target_include_directories(glslang-default-resource-limits
57 PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>41 PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
58 PUBLIC $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}>)42 PUBLIC $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}>)
59 43 
60-set(SOURCES StandAlone.cpp DirStackFileIncluder.h ${GLSLANG_INTRINSIC_H})44+ 
45+set(SOURCES StandAlone.cpp DirStackFileIncluder.h)
61 46 
62add_executable(glslangValidator ${SOURCES})47add_executable(glslangValidator ${SOURCES})
63set_property(TARGET glslangValidator PROPERTY FOLDER tools)48set_property(TARGET glslangValidator PROPERTY FOLDER tools)
@@ -78,19 +63,13 @@ elseif(UNIX)
78 if(NOT ANDROID)63 if(NOT ANDROID)
79 set(LIBRARIES ${LIBRARIES} pthread)64 set(LIBRARIES ${LIBRARIES} pthread)
80 endif()65 endif()
81-endif()66+endif(WIN32)
82 67 
83target_link_libraries(glslangValidator ${LIBRARIES})68target_link_libraries(glslangValidator ${LIBRARIES})
84target_include_directories(glslangValidator PUBLIC69target_include_directories(glslangValidator PUBLIC
85 $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../External>70 $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../External>
86 $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/External>)71 $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/External>)
87 72 
88-if(ENABLE_OPT)
89- target_include_directories(glslangValidator
90- PRIVATE ${spirv-tools_SOURCE_DIR}/include
91- )
92-endif()
93- 
94if(ENABLE_SPVREMAPPER)73if(ENABLE_SPVREMAPPER)
95 set(REMAPPER_SOURCES spirv-remap.cpp)74 set(REMAPPER_SOURCES spirv-remap.cpp)
96 add_executable(spirv-remap ${REMAPPER_SOURCES})75 add_executable(spirv-remap ${REMAPPER_SOURCES})
@@ -101,51 +80,22 @@ endif()
101 80 
102if(WIN32)81if(WIN32)
103 source_group("Source" FILES ${SOURCES})82 source_group("Source" FILES ${SOURCES})
104-endif()83+endif(WIN32)
105 84 
106if(ENABLE_GLSLANG_INSTALL)85if(ENABLE_GLSLANG_INSTALL)
107- install(TARGETS glslangValidator EXPORT glslang-targets)86+ install(TARGETS glslangValidator EXPORT glslangValidatorTargets
108- 87+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
109- # Backward compatibility88+ install(EXPORT glslangValidatorTargets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake)
110- file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/glslangValidatorTargets.cmake" "
111- message(WARNING \"Using `glslangValidatorTargets.cmake` is deprecated: use `find_package(glslang)` to find glslang CMake targets.\")
112- 
113- if (NOT TARGET glslang::glslangValidator)
114- include(\"\${CMAKE_CURRENT_LIST_DIR}/../../${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}/glslang-targets.cmake\")
115- endif()
116- 
117- add_library(glslangValidator ALIAS glslang::glslangValidator)
118- ")
119- install(FILES "${CMAKE_CURRENT_BINARY_DIR}/glslangValidatorTargets.cmake" DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake)
120 89 
121 if(ENABLE_SPVREMAPPER)90 if(ENABLE_SPVREMAPPER)
122- install(TARGETS spirv-remap EXPORT glslang-targets)91+ install(TARGETS spirv-remap EXPORT spirv-remapTargets
123- 92+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
124- # Backward compatibility93+ install(EXPORT spirv-remapTargets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake)
125- file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/spirv-remapTargets.cmake" "
126- message(WARNING \"Using `spirv-remapTargets.cmake` is deprecated: use `find_package(glslang)` to find glslang CMake targets.\")
127- 
128- if (NOT TARGET glslang::spirv-remap)
129- include(\"\${CMAKE_CURRENT_LIST_DIR}/../../${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}/glslang-targets.cmake\")
130- endif()
131- 
132- add_library(spirv-remap ALIAS glslang::spirv-remap)
133- ")
134- install(FILES "${CMAKE_CURRENT_BINARY_DIR}/spirv-remapTargets.cmake" DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake)
135 endif()94 endif()
136 95 
137- install(TARGETS glslang-default-resource-limits EXPORT glslang-targets)96+ if(BUILD_SHARED_LIBS)
138- 97+ install(TARGETS glslang-default-resource-limits EXPORT glslang-default-resource-limitsTargets
139- # Backward compatibility98+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
140- file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/glslang-default-resource-limitsTargets.cmake" "99+ install(EXPORT glslang-default-resource-limitsTargets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake)
141- message(WARNING \"Using `glslang-default-resource-limitsTargets.cmake` is deprecated: use `find_package(glslang)` to find glslang CMake targets.\")100+ endif()
142- 101+endif(ENABLE_GLSLANG_INSTALL)
143- if (NOT TARGET glslang::glslang-default-resource-limits)
144- include(\"\${CMAKE_CURRENT_LIST_DIR}/../../${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}/glslang-targets.cmake\")
145- endif()
146- 
147- add_library(glslang-default-resource-limits ALIAS glslang::glslang-default-resource-limits)
148- ")
149- install(FILES "${CMAKE_CURRENT_BINARY_DIR}/glslang-default-resource-limitsTargets.cmake" DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake)
150- 
151-endif()
@@ -40,7 +40,6 @@
40#include <string>40#include <string>
41#include <fstream>41#include <fstream>
42#include <algorithm>42#include <algorithm>
43-#include <set>
44 43 
45#include "./../glslang/Public/ShaderLang.h"44#include "./../glslang/Public/ShaderLang.h"
46 45 
@@ -85,18 +84,12 @@ public:
85 }84 }
86 }85 }
87 86 
88- virtual std::set<std::string> getIncludedFiles()
89- {
90- return includedFiles;
91- }
92- 
93 virtual ~DirStackFileIncluder() override { }87 virtual ~DirStackFileIncluder() override { }
94 88 
95protected:89protected:
96 typedef char tUserDataElement;90 typedef char tUserDataElement;
97 std::vector<std::string> directoryStack;91 std::vector<std::string> directoryStack;
98 int externalLocalDirectoryCount;92 int externalLocalDirectoryCount;
99- std::set<std::string> includedFiles;
100 93 
101 // Search for a valid "local" path based on combining the stack of include94 // Search for a valid "local" path based on combining the stack of include
102 // directories and the nominal name of the header.95 // directories and the nominal name of the header.
@@ -115,7 +108,6 @@ protected:
115 std::ifstream file(path, std::ios_base::binary | std::ios_base::ate);108 std::ifstream file(path, std::ios_base::binary | std::ios_base::ate);
116 if (file) {109 if (file) {
117 directoryStack.push_back(getDirectory(path));110 directoryStack.push_back(getDirectory(path));
118- includedFiles.insert(path);
119 return newIncludeResult(path, file, (int)file.tellg());111 return newIncludeResult(path, file, (int)file.tellg());
120 }112 }
121 }113 }
@@ -37,9 +37,9 @@
37#include <sstream>37#include <sstream>
38#include <cctype>38#include <cctype>
39 39 
40-#include "glslang/Public/ResourceLimits.h"40+#include "ResourceLimits.h"
41 41 
42-TBuiltInResource Resources;42+namespace glslang {
43 43 
44const TBuiltInResource DefaultTBuiltInResource = {44const TBuiltInResource DefaultTBuiltInResource = {
45 /* .MaxLights = */ 32,45 /* .MaxLights = */ 32,
@@ -134,15 +134,6 @@ const TBuiltInResource DefaultTBuiltInResource = {
134 /* .maxTaskWorkGroupSizeY_NV = */ 1,134 /* .maxTaskWorkGroupSizeY_NV = */ 1,
135 /* .maxTaskWorkGroupSizeZ_NV = */ 1,135 /* .maxTaskWorkGroupSizeZ_NV = */ 1,
136 /* .maxMeshViewCountNV = */ 4,136 /* .maxMeshViewCountNV = */ 4,
137- /* .maxMeshOutputVerticesEXT = */ 256,
138- /* .maxMeshOutputPrimitivesEXT = */ 256,
139- /* .maxMeshWorkGroupSizeX_EXT = */ 128,
140- /* .maxMeshWorkGroupSizeY_EXT = */ 128,
141- /* .maxMeshWorkGroupSizeZ_EXT = */ 128,
142- /* .maxTaskWorkGroupSizeX_EXT = */ 128,
143- /* .maxTaskWorkGroupSizeY_EXT = */ 128,
144- /* .maxTaskWorkGroupSizeZ_EXT = */ 128,
145- /* .maxMeshViewCountEXT = */ 4,
146 /* .maxDualSourceDrawBuffersEXT = */ 1,137 /* .maxDualSourceDrawBuffersEXT = */ 1,
147 138 
148 /* .limits = */ {139 /* .limits = */ {
@@ -253,15 +244,6 @@ std::string GetDefaultTBuiltInResourceString()
253 << "MaxTaskWorkGroupSizeY_NV " << DefaultTBuiltInResource.maxTaskWorkGroupSizeY_NV << "\n"244 << "MaxTaskWorkGroupSizeY_NV " << DefaultTBuiltInResource.maxTaskWorkGroupSizeY_NV << "\n"
254 << "MaxTaskWorkGroupSizeZ_NV " << DefaultTBuiltInResource.maxTaskWorkGroupSizeZ_NV << "\n"245 << "MaxTaskWorkGroupSizeZ_NV " << DefaultTBuiltInResource.maxTaskWorkGroupSizeZ_NV << "\n"
255 << "MaxMeshViewCountNV " << DefaultTBuiltInResource.maxMeshViewCountNV << "\n"246 << "MaxMeshViewCountNV " << DefaultTBuiltInResource.maxMeshViewCountNV << "\n"
256- << "MaxMeshOutputVerticesEXT " << DefaultTBuiltInResource.maxMeshOutputVerticesEXT << "\n"
257- << "MaxMeshOutputPrimitivesEXT " << DefaultTBuiltInResource.maxMeshOutputPrimitivesEXT << "\n"
258- << "MaxMeshWorkGroupSizeX_EXT " << DefaultTBuiltInResource.maxMeshWorkGroupSizeX_EXT << "\n"
259- << "MaxMeshWorkGroupSizeY_EXT " << DefaultTBuiltInResource.maxMeshWorkGroupSizeY_EXT << "\n"
260- << "MaxMeshWorkGroupSizeZ_EXT " << DefaultTBuiltInResource.maxMeshWorkGroupSizeZ_EXT << "\n"
261- << "MaxTaskWorkGroupSizeX_EXT " << DefaultTBuiltInResource.maxTaskWorkGroupSizeX_EXT << "\n"
262- << "MaxTaskWorkGroupSizeY_EXT " << DefaultTBuiltInResource.maxTaskWorkGroupSizeY_EXT << "\n"
263- << "MaxTaskWorkGroupSizeZ_EXT " << DefaultTBuiltInResource.maxTaskWorkGroupSizeZ_EXT << "\n"
264- << "MaxMeshViewCountEXT " << DefaultTBuiltInResource.maxMeshViewCountEXT << "\n"
265 << "MaxDualSourceDrawBuffersEXT " << DefaultTBuiltInResource.maxDualSourceDrawBuffersEXT << "\n"247 << "MaxDualSourceDrawBuffersEXT " << DefaultTBuiltInResource.maxDualSourceDrawBuffersEXT << "\n"
266 << "nonInductiveForLoops " << DefaultTBuiltInResource.limits.nonInductiveForLoops << "\n"248 << "nonInductiveForLoops " << DefaultTBuiltInResource.limits.nonInductiveForLoops << "\n"
267 << "whileLoops " << DefaultTBuiltInResource.limits.whileLoops << "\n"249 << "whileLoops " << DefaultTBuiltInResource.limits.whileLoops << "\n"
@@ -487,24 +469,6 @@ void DecodeResourceLimits(TBuiltInResource* resources, char* config)
487 resources->maxTaskWorkGroupSizeZ_NV = value;469 resources->maxTaskWorkGroupSizeZ_NV = value;
488 else if (tokenStr == "MaxMeshViewCountNV")470 else if (tokenStr == "MaxMeshViewCountNV")
489 resources->maxMeshViewCountNV = value;471 resources->maxMeshViewCountNV = value;
490- else if (tokenStr == "MaxMeshOutputVerticesEXT")
491- resources->maxMeshOutputVerticesEXT = value;
492- else if (tokenStr == "MaxMeshOutputPrimitivesEXT")
493- resources->maxMeshOutputPrimitivesEXT = value;
494- else if (tokenStr == "MaxMeshWorkGroupSizeX_EXT")
495- resources->maxMeshWorkGroupSizeX_EXT = value;
496- else if (tokenStr == "MaxMeshWorkGroupSizeY_EXT")
497- resources->maxMeshWorkGroupSizeY_EXT = value;
498- else if (tokenStr == "MaxMeshWorkGroupSizeZ_EXT")
499- resources->maxMeshWorkGroupSizeZ_EXT = value;
500- else if (tokenStr == "MaxTaskWorkGroupSizeX_EXT")
501- resources->maxTaskWorkGroupSizeX_EXT = value;
502- else if (tokenStr == "MaxTaskWorkGroupSizeY_EXT")
503- resources->maxTaskWorkGroupSizeY_EXT = value;
504- else if (tokenStr == "MaxTaskWorkGroupSizeZ_EXT")
505- resources->maxTaskWorkGroupSizeZ_EXT = value;
506- else if (tokenStr == "MaxMeshViewCountEXT")
507- resources->maxMeshViewCountEXT = value;
508 else if (tokenStr == "nonInductiveForLoops")472 else if (tokenStr == "nonInductiveForLoops")
509 resources->limits.nonInductiveForLoops = (value != 0);473 resources->limits.nonInductiveForLoops = (value != 0);
510 else if (tokenStr == "whileLoops")474 else if (tokenStr == "whileLoops")
@@ -529,12 +493,4 @@ void DecodeResourceLimits(TBuiltInResource* resources, char* config)
529 }493 }
530}494}
531 495 
532-TBuiltInResource* GetResources()496+} // end namespace glslang
533-{
534- return &Resources;
535-}
536- 
537-const TBuiltInResource* GetDefaultResources()
538-{
539- return &DefaultTBuiltInResource;
540-}
@@ -26,20 +26,15 @@ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.26OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27**/27**/
28 28 
29-#include "glslang/Public/resource_limits_c.h"29+#include "resource_limits_c.h"
30-#include "glslang/Public/ResourceLimits.h"30+#include "ResourceLimits.h"
31#include <stdlib.h>31#include <stdlib.h>
32#include <string.h>32#include <string.h>
33#include <string>33#include <string>
34 34 
35-glslang_resource_t* glslang_resource(void)
36-{
37- return reinterpret_cast<glslang_resource_t*>(GetResources());
38-}
39- 
40const glslang_resource_t* glslang_default_resource(void)35const glslang_resource_t* glslang_default_resource(void)
41{36{
42- return reinterpret_cast<const glslang_resource_t*>(GetDefaultResources());37+ return reinterpret_cast<const glslang_resource_t*>(&glslang::DefaultTBuiltInResource);
43}38}
44 39 
45#if defined(__clang__) || defined(__GNUC__)40#if defined(__clang__) || defined(__GNUC__)
@@ -52,7 +47,7 @@ const glslang_resource_t* glslang_default_resource(void)
52 47 
53const char* glslang_default_resource_string()48const char* glslang_default_resource_string()
54{49{
55- std::string cpp_str = GetDefaultTBuiltInResourceString();50+ std::string cpp_str = glslang::GetDefaultTBuiltInResourceString();
56 char* c_str = (char*)malloc(cpp_str.length() + 1);51 char* c_str = (char*)malloc(cpp_str.length() + 1);
57 strcpy(c_str, cpp_str.c_str());52 strcpy(c_str, cpp_str.c_str());
58 return c_str;53 return c_str;
@@ -66,5 +61,5 @@ const char* glslang_default_resource_string()
66 61 
67void glslang_decode_resource_limits(glslang_resource_t* resources, char* config)62void glslang_decode_resource_limits(glslang_resource_t* resources, char* config)
68{63{
69- DecodeResourceLimits(reinterpret_cast<TBuiltInResource*>(resources), config);64+ glslang::DecodeResourceLimits(reinterpret_cast<TBuiltInResource*>(resources), config);
70}65}
@@ -105,32 +105,6 @@ namespace {
105 }105 }
106 }106 }
107 107 
108- // Read strings from a file
109- void read(std::vector<std::string>& strings, const std::string& inFilename, int verbosity)
110- {
111- std::ifstream fp;
112- 
113- if (verbosity > 0)
114- logHandler(std::string(" reading: ") + inFilename);
115- 
116- strings.clear();
117- fp.open(inFilename, std::fstream::in);
118- 
119- if (fp.fail())
120- errHandler("error opening file for read: ");
121- 
122- std::string line;
123- while (std::getline(fp, line))
124- {
125- // Ignore empty lines and lines starting with the comment marker '#'.
126- if (line.length() == 0 || line[0] == '#') {
127- continue;
128- }
129- 
130- strings.push_back(line);
131- }
132- }
133- 
134 void write(std::vector<SpvWord>& spv, const std::string& outFile, int verbosity)108 void write(std::vector<SpvWord>& spv, const std::string& outFile, int verbosity)
135 {109 {
136 if (outFile.empty())110 if (outFile.empty())
@@ -157,7 +131,7 @@ namespace {
157 }131 }
158 132 
159 // Print helpful usage message to stdout, and exit133 // Print helpful usage message to stdout, and exit
160- void usage(const char* const name, const char* const msg = nullptr)134+ void usage(const char* const name, const char* const msg = 0)
161 {135 {
162 if (msg)136 if (msg)
163 std::cout << msg << std::endl << std::endl;137 std::cout << msg << std::endl << std::endl;
@@ -170,7 +144,6 @@ namespace {
170 << " [--dce (all|types|funcs)]"144 << " [--dce (all|types|funcs)]"
171 << " [--opt (all|loadstore)]"145 << " [--opt (all|loadstore)]"
172 << " [--strip-all | --strip all | -s]"146 << " [--strip-all | --strip all | -s]"
173- << " [--strip-white-list]"
174 << " [--do-everything]"147 << " [--do-everything]"
175 << " --input | -i file1 [file2...] --output|-o DESTDIR"148 << " --input | -i file1 [file2...] --output|-o DESTDIR"
176 << std::endl;149 << std::endl;
@@ -183,18 +156,16 @@ namespace {
183 156 
184 // grind through each SPIR in turn157 // grind through each SPIR in turn
185 void execute(const std::vector<std::string>& inputFile, const std::string& outputDir,158 void execute(const std::vector<std::string>& inputFile, const std::string& outputDir,
186- const std::string& whiteListFile, int opts, int verbosity)159+ int opts, int verbosity)
187 {160 {
188- std::vector<std::string> whiteListStrings;
189- if(!whiteListFile.empty())
190- read(whiteListStrings, whiteListFile, verbosity);
191- 
192 for (auto it = inputFile.cbegin(); it != inputFile.cend(); ++it) {161 for (auto it = inputFile.cbegin(); it != inputFile.cend(); ++it) {
193 const std::string &filename = *it;162 const std::string &filename = *it;
194 std::vector<SpvWord> spv;163 std::vector<SpvWord> spv;
195 read(spv, filename, verbosity);164 read(spv, filename, verbosity);
196- spv::spirvbin_t(verbosity).remap(spv, whiteListStrings, opts);165+ spv::spirvbin_t(verbosity).remap(spv, opts);
166+ 
197 const std::string outfile = outputDir + path_sep_char() + basename(filename);167 const std::string outfile = outputDir + path_sep_char() + basename(filename);
168+ 
198 write(spv, outfile, verbosity);169 write(spv, outfile, verbosity);
199 }170 }
200 171 
@@ -205,7 +176,6 @@ namespace {
205 // Parse command line options176 // Parse command line options
206 void parseCmdLine(int argc, char** argv, std::vector<std::string>& inputFile,177 void parseCmdLine(int argc, char** argv, std::vector<std::string>& inputFile,
207 std::string& outputDir,178 std::string& outputDir,
208- std::string& stripWhiteListFile,
209 int& options,179 int& options,
210 int& verbosity)180 int& verbosity)
211 {181 {
@@ -245,7 +215,7 @@ namespace {
245 verbosity = 1;215 verbosity = 1;
246 216 
247 if (a < argc) {217 if (a < argc) {
248- char* end_ptr = nullptr;218+ char* end_ptr = 0;
249 int verb = ::strtol(argv[a], &end_ptr, 10);219 int verb = ::strtol(argv[a], &end_ptr, 10);
250 // If we have not read to the end of the string or220 // If we have not read to the end of the string or
251 // the string contained no elements, then we do not want to221 // the string contained no elements, then we do not want to
@@ -275,9 +245,6 @@ namespace {
275 options = options | spv::spirvbin_t::STRIP;245 options = options | spv::spirvbin_t::STRIP;
276 ++a;246 ++a;
277 }247 }
278- } else if (arg == "--strip-white-list") {
279- ++a;
280- stripWhiteListFile = argv[a++];
281 } else if (arg == "--dce") {248 } else if (arg == "--dce") {
282 // Parse comma (or colon, etc) separated list of things to dce249 // Parse comma (or colon, etc) separated list of things to dce
283 ++a;250 ++a;
@@ -348,7 +315,6 @@ int main(int argc, char** argv)
348{315{
349 std::vector<std::string> inputFile;316 std::vector<std::string> inputFile;
350 std::string outputDir;317 std::string outputDir;
351- std::string whiteListFile;
352 int opts;318 int opts;
353 int verbosity;319 int verbosity;
354 320 
@@ -363,13 +329,13 @@ int main(int argc, char** argv)
363 if (argc < 2)329 if (argc < 2)
364 usage(argv[0]);330 usage(argv[0]);
365 331 
366- parseCmdLine(argc, argv, inputFile, outputDir, whiteListFile, opts, verbosity);332+ parseCmdLine(argc, argv, inputFile, outputDir, opts, verbosity);
367 333 
368 if (outputDir.empty())334 if (outputDir.empty())
369 usage(argv[0], "Output directory required");335 usage(argv[0], "Output directory required");
370 336 
371 // Main operations: read, remap, and write.337 // Main operations: read, remap, and write.
372- execute(inputFile, outputDir, whiteListFile, opts, verbosity);338+ execute(inputFile, outputDir, opts, verbosity);
373 339 
374 // If we get here, everything went OK! Nothing more to be done.340 // If we get here, everything went OK! Nothing more to be done.
375}341}
@@ -111,8 +111,8 @@ void qlodFail()
111 vec2 pf2;111 vec2 pf2;
112 vec3 pf3;112 vec3 pf3;
113 113 
114- lod = textureQueryLOD(samp1D, pf); // ERROR, extension GL_ARB_texture_query_lod needed114+ lod = textureQueryLod(samp1D, pf); // ERROR, extension GL_ARB_texture_query_lod needed
115- lod = textureQueryLOD(samp2Ds, pf2); // ERROR, extension GL_ARB_texture_query_lod needed115+ lod = textureQueryLod(samp2Ds, pf2); // ERROR, extension GL_ARB_texture_query_lod needed
116}116}
117 117 
118#extension GL_ARB_texture_query_lod : enable118#extension GL_ARB_texture_query_lod : enable
@@ -138,21 +138,21 @@ void qlodPass()
138 vec2 pf2;138 vec2 pf2;
139 vec3 pf3;139 vec3 pf3;
140 140 
141- lod = textureQueryLOD(samp1D, pf);141+ lod = textureQueryLod(samp1D, pf);
142- lod = textureQueryLOD(isamp2D, pf2);142+ lod = textureQueryLod(isamp2D, pf2);
143- lod = textureQueryLOD(usamp3D, pf3);143+ lod = textureQueryLod(usamp3D, pf3);
144- lod = textureQueryLOD(sampCube, pf3);144+ lod = textureQueryLod(sampCube, pf3);
145- lod = textureQueryLOD(isamp1DA, pf);145+ lod = textureQueryLod(isamp1DA, pf);
146- lod = textureQueryLOD(usamp2DA, pf2);146+ lod = textureQueryLod(usamp2DA, pf2);
147 147 
148- lod = textureQueryLOD(samp1Ds, pf);148+ lod = textureQueryLod(samp1Ds, pf);
149- lod = textureQueryLOD(samp2Ds, pf2);149+ lod = textureQueryLod(samp2Ds, pf2);
150- lod = textureQueryLOD(sampCubes, pf3);150+ lod = textureQueryLod(sampCubes, pf3);
151- lod = textureQueryLOD(samp1DAs, pf);151+ lod = textureQueryLod(samp1DAs, pf);
152- lod = textureQueryLOD(samp2DAs, pf2);152+ lod = textureQueryLod(samp2DAs, pf2);
153 153 
154- lod = textureQueryLOD(sampBuf, pf); // ERROR154+ lod = textureQueryLod(sampBuf, pf); // ERROR
155- lod = textureQueryLOD(sampRect, pf2); // ERROR155+ lod = textureQueryLod(sampRect, pf2); // ERROR
156}156}
157 157 
158// Test extension GL_EXT_shader_integer_mix158// Test extension GL_EXT_shader_integer_mix
@@ -159,4 +159,3 @@ void qlod()
159}159}
160 160 
161layout(binding=0) writeonly uniform image1D badArray[];161layout(binding=0) writeonly uniform image1D badArray[];
162-layout(binding = 74) uniform sampler2D u_sampler0[6];
@@ -151,18 +151,3 @@ int layer()
151{151{
152 return gl_Layer;152 return gl_Layer;
153}153}
154- 
155-// The std140 layout qualifier should NOT propagate all the way down to
156-// the vec3. It is unnecessary and it breaks downstream AST consumers,
157-// notably LunarGlass.
158- 
159-struct PointLight_t
160-{
161- vec3 vPositionWs ;
162-} ;
163- 
164-layout( std140, row_major ) uniform PerViewLightData_t
165-{
166- 
167- PointLight_t g_pointLightData [ 128 ] ;
168-} ;
@@ -48,31 +48,6 @@ void foo()
48 float f = imageAtomicExchange(i2dmsa, ivec3(in3), 2, 4.5);48 float f = imageAtomicExchange(i2dmsa, ivec3(in3), 2, 4.5);
49}49}
50 50 
51-#extension GL_ARB_sparse_texture2: enable
52- 
53-uniform sampler2D s2D;
54-uniform isampler2DArray is2DArray;
55-uniform sampler2DRectShadow s2DRectShadow;
56- 
57-in flat ivec2 offsets[4];
58-in vec2 c2;
59-in vec3 c3;
60- 
61-void testOffsets()
62-{
63- vec4 texel = vec4(0.0);
64- ivec4 itexel = ivec4(0);
65- const ivec2 constOffsets[4] = ivec2[4](ivec2(1,2), ivec2(3,4), ivec2(15,16), ivec2(-2,0));
66- sparseTextureGatherOffsetsARB(s2D, c2, constOffsets, texel);
67- sparseTextureGatherOffsetsARB(is2DArray, c3, constOffsets, itexel, 2);
68- sparseTextureGatherOffsetsARB(s2DRectShadow, c2, 2.0, constOffsets, texel);
69- 
70- sparseTextureGatherOffsetsARB(s2D, c2, offsets, texel); // Error : Non constant offsets
71- sparseTextureGatherOffsetsARB(is2DArray, c3, offsets, itexel, 2); // Error : Non constant offsets
72- sparseTextureGatherOffsetsARB(s2DRectShadow, c2, 2.0, offsets, texel); // Error : Non constant offsets
73- 
74-}
75- 
76in float gl_CullDistance[6];51in float gl_CullDistance[6];
77 52 
78float cull(int i)53float cull(int i)
@@ -1,20 +0,0 @@
1-#version 150
2-#extension GL_ARB_gpu_shader5 : require
3- 
4-uniform ivec4 u1;
5-uniform uvec4 u2;
6-out vec4 result;
7-vec4 f(in vec4 a, in vec4 b){ return a * b;} // choice 1
8-vec4 f(in uvec4 a, in uvec4 b){ return vec4(a - b);} // choice 2
9- 
10-void main()
11-{
12- result = f(u1, u2); // should match choice 2. which have less implicit conversion.
13- switch (gl_VertexID)
14- {
15- case 0: gl_Position = vec4(-1.0, 1.0, 0.0, 1.0); break;
16- case 1: gl_Position = vec4( 1.0, 1.0, 0.0, 1.0); break;
17- case 2: gl_Position = vec4(-1.0,-1.0, 0.0, 1.0); break;
18- case 3: gl_Position = vec4( 1.0,-1.0, 0.0, 1.0); break;
19- }
20-}
@@ -1,20 +0,0 @@
1-#version 150 core
2-#extension GL_ARB_gpu_shader5 : require
3-layout(points) in;
4-layout(points, max_vertices = 1) out;
5-layout(stream=0) out float output1;
6-layout(stream=0) out float output2;
7-layout(stream=1) out float output3;
8-layout(stream=1) out float output4;
9-uniform uint stream;
10-void main() {
11- 
12- output1 = 1.0;
13- output2 = 2.0;
14- EmitStreamVertex(0);
15- EndStreamPrimitive(0);
16- output3 = 3.0;
17- output4 = 4.0;
18- EmitStreamVertex(1);
19- EndStreamPrimitive(1);
20-}
@@ -1,18 +0,0 @@
1-#version 150
2-#extension GL_ARB_draw_instanced : require
3-#define ID gl_InstanceID
4- 
5-uniform mat4 gtf_ModelViewProjectionMatrix;
6-uniform vec3 instanceOffsets[3];
7-in vec4 va[gl_MaxVertexAttribs];
8-out vec4 color;
9- 
10-void main (void)
11-{
12- vec4 vertex = vec4(va[0].xy / 3.0, va[0].zw) + vec4(instanceOffsets[ID], 1.0);
13- color = vec4(0, 0, 0, 0);
14- for (int i = 1; i < gl_MaxVertexAttribs; i++)
15- color += va[i];
16- gl_Position = gtf_ModelViewProjectionMatrix * vertex;
17- gl_PointSize = 1.0;
18-}
@@ -1,27 +0,0 @@
1-#version 140
2- 
3-#extension GL_ARB_fragment_coord_conventions: require
4-#extension GL_ARB_explicit_attrib_location : enable
5- 
6- 
7-#if !defined GL_ARB_fragment_coord_conventions
8-# error GL_ARB_fragment_coord_conventions is not defined
9-#elif GL_ARB_fragment_coord_conventions != 1
10-# error GL_ARB_fragment_coord_conventions is not equal to 1
11-#endif
12- 
13- 
14-layout (location = 0) in vec4 pos;
15-out vec4 i;
16- 
17-uniform float gtf_windowWidth;
18-uniform float gtf_windowHeight;
19-uniform float n;
20-uniform float f;
21- 
22-void main()
23-{
24- gl_Position = pos;
25- i = vec4((pos.x+1.0)*0.5*gtf_windowWidth, (pos.y+1.0)*0.5*gtf_windowHeight, (f-n)*0.5*pos.z + (f+n)*0.5, pos.w);
26-}
27- 
@@ -1,11 +0,0 @@
1-#version 150
2-#extension GL_ARB_gpu_shader5 : require
3- 
4-uniform int u1;
5-uniform int u2;
6-out vec4 result;
7-void main()
8-{
9- uint v = 0;
10- v = uint(u2) - u1; // implicit conversions
11-}
@@ -1,13 +0,0 @@
1-#version 330
2-#extension GL_EXT_shader_integer_mix: require
3- 
4- 
5-#if !defined GL_EXT_shader_integer_mix
6-# error GL_EXT_shader_integer_mix is not defined
7-#elif GL_EXT_shader_integer_mix != 1
8-# error GL_EXT_shader_integer_mix is not equal to 1
9-#endif
10- 
11-void main(void) {
12- gl_Position = vec4(0);
13-}
@@ -1,19 +0,0 @@
1-#version 320 es
2-layout(local_size_x = 1) in;
3- 
4-struct structType{
5- int y[3];
6-};
7- 
8-layout(std430) buffer t2 {
9- structType f;
10-} t;
11- 
12-buffer coherent Buffer { int x; };
13-int z;
14- 
15-void main() {
16- atomicAdd(x, 1);
17- atomicAdd(t.f.y[1], 1);
18- atomicAdd(z, 1);
19-}
@@ -1,28 +0,0 @@
1-#version 450 core
2-#extension GL_ARB_shader_atomic_counters: enable
3-#extension GL_ARB_shader_atomic_counter_ops:enable
4- 
5-layout(binding = 0) uniform atomic_uint counter;
6- 
7-out highp vec4 vsColor;
8- 
9-void main(){
10- vec4 outColor = vec4(1.0);
11- uint ret;
12- 
13- ret = atomicCounterAddARB(counter, 4u);
14- ret = atomicCounterSubtractARB(counter, 4u);
15- ret = atomicCounterMinARB(counter, 4u);
16- ret = atomicCounterMaxARB(counter, 4u);
17- ret = atomicCounterAndARB(counter, 4u);
18- ret = atomicCounterOrARB(counter, 4u);
19- ret = atomicCounterXorARB(counter, 4u);
20- ret = atomicCounterExchangeARB(counter, 4u);
21- ret = atomicCounterCompSwapARB(counter, 4u, 4u);
22- 
23- uint after = atomicCounter(counter);
24- if (after == ret)
25- outColor = vec4(0.0);
26- 
27- vsColor = outColor;
28-}
@@ -1,6 +1,6 @@
1hlsl.aliasOpaque.frag1hlsl.aliasOpaque.frag
2// Module Version 100002// Module Version 10000
3-// Generated by (magic number): 8000b3+// Generated by (magic number): 8000a
4// Id's are bound by 894// Id's are bound by 89
5 5 
6 Capability Shader6 Capability Shader
@@ -1,6 +1,6 @@
1hlsl.flattenOpaque.frag1hlsl.flattenOpaque.frag
2// Module Version 100002// Module Version 10000
3-// Generated by (magic number): 8000b3+// Generated by (magic number): 8000a
4// Id's are bound by 1904// Id's are bound by 190
5 5 
6 Capability Shader6 Capability Shader
@@ -1,6 +1,6 @@
1hlsl.flattenOpaqueInit.vert1hlsl.flattenOpaqueInit.vert
2// Module Version 100002// Module Version 10000
3-// Generated by (magic number): 8000b3+// Generated by (magic number): 8000a
4// Id's are bound by 1394// Id's are bound by 139
5 5 
6 Capability Shader6 Capability Shader
@@ -1,6 +1,6 @@
1hlsl.flattenOpaqueInitMix.vert1hlsl.flattenOpaqueInitMix.vert
2// Module Version 100002// Module Version 10000
3-// Generated by (magic number): 8000b3+// Generated by (magic number): 8000a
4// Id's are bound by 994// Id's are bound by 99
5 5 
6 Capability Shader6 Capability Shader
@@ -1,22 +1,24 @@
1hlsl.flattenSubset.frag1hlsl.flattenSubset.frag
2// Module Version 100002// Module Version 10000
3-// Generated by (magic number): 8000b3+// Generated by (magic number): 8000a
4// Id's are bound by 674// Id's are bound by 67
5 5 
6 Capability Shader6 Capability Shader
7 1: ExtInstImport "GLSL.std.450"7 1: ExtInstImport "GLSL.std.450"
8 MemoryModel Logical GLSL4508 MemoryModel Logical GLSL450
9- EntryPoint Fragment 4 "main" 509+ EntryPoint Fragment 4 "main" 47 50
10 ExecutionMode 4 OriginUpperLeft10 ExecutionMode 4 OriginUpperLeft
11 Source HLSL 50011 Source HLSL 500
12 Name 4 "main"12 Name 4 "main"
13 Name 21 "samp"13 Name 21 "samp"
14 Name 33 "tex"14 Name 33 "tex"
15+ Name 47 "vpos"
15 Name 50 "@entryPointOutput"16 Name 50 "@entryPointOutput"
16 Decorate 21(samp) DescriptorSet 017 Decorate 21(samp) DescriptorSet 0
17 Decorate 21(samp) Binding 018 Decorate 21(samp) Binding 0
18 Decorate 33(tex) DescriptorSet 019 Decorate 33(tex) DescriptorSet 0
19 Decorate 33(tex) Binding 120 Decorate 33(tex) Binding 1
21+ Decorate 47(vpos) Location 0
20 Decorate 50(@entryPointOutput) Location 022 Decorate 50(@entryPointOutput) Location 0
21 2: TypeVoid23 2: TypeVoid
22 3: TypeFunction 224 3: TypeFunction 2
@@ -32,6 +34,8 @@ hlsl.flattenSubset.frag
32 39: TypeVector 6(float) 234 39: TypeVector 6(float) 2
33 40: 6(float) Constant 105696460835 40: 6(float) Constant 1056964608
34 41: 39(fvec2) ConstantComposite 40 4036 41: 39(fvec2) ConstantComposite 40 40
37+ 46: TypePointer Input 7(fvec4)
38+ 47(vpos): 46(ptr) Variable Input
35 49: TypePointer Output 7(fvec4)39 49: TypePointer Output 7(fvec4)
3650(@entryPointOutput): 49(ptr) Variable Output4050(@entryPointOutput): 49(ptr) Variable Output
37 4(main): 2 Function None 341 4(main): 2 Function None 3
@@ -1,16 +1,18 @@
1hlsl.flattenSubset2.frag1hlsl.flattenSubset2.frag
2// Module Version 100002// Module Version 10000
3-// Generated by (magic number): 8000b3+// Generated by (magic number): 8000a
4// Id's are bound by 534// Id's are bound by 53
5 5 
6 Capability Shader6 Capability Shader
7 1: ExtInstImport "GLSL.std.450"7 1: ExtInstImport "GLSL.std.450"
8 MemoryModel Logical GLSL4508 MemoryModel Logical GLSL450
9- EntryPoint Fragment 4 "main" 529+ EntryPoint Fragment 4 "main" 49 52
10 ExecutionMode 4 OriginUpperLeft10 ExecutionMode 4 OriginUpperLeft
11 Source HLSL 50011 Source HLSL 500
12 Name 4 "main"12 Name 4 "main"
13+ Name 49 "vpos"
13 Name 52 "@entryPointOutput"14 Name 52 "@entryPointOutput"
15+ Decorate 49(vpos) Location 0
14 Decorate 52(@entryPointOutput) Location 016 Decorate 52(@entryPointOutput) Location 0
15 2: TypeVoid17 2: TypeVoid
16 3: TypeFunction 218 3: TypeFunction 2
@@ -18,6 +20,8 @@ hlsl.flattenSubset2.frag
18 7: TypeVector 6(float) 420 7: TypeVector 6(float) 4
19 43: 6(float) Constant 021 43: 6(float) Constant 0
20 44: 7(fvec4) ConstantComposite 43 43 43 4322 44: 7(fvec4) ConstantComposite 43 43 43 43
23+ 48: TypePointer Input 7(fvec4)
24+ 49(vpos): 48(ptr) Variable Input
21 51: TypePointer Output 7(fvec4)25 51: TypePointer Output 7(fvec4)
2252(@entryPointOutput): 51(ptr) Variable Output2652(@entryPointOutput): 51(ptr) Variable Output
23 4(main): 2 Function None 327 4(main): 2 Function None 3
@@ -1,110 +0,0 @@
1-hlsl.intrinsics.evalfns.frag
2-// Module Version 10000
3-// Generated by (magic number): 8000b
4-// Id's are bound by 274
5- 
6- Capability Shader
7- Capability InterpolationFunction
8- 1: ExtInstImport "GLSL.std.450"
9- MemoryModel Logical GLSL450
10- EntryPoint Fragment 4 "main" 138 142 146 150 154 157 161
11- ExecutionMode 4 OriginUpperLeft
12- Source HLSL 500
13- Name 4 "main"
14- Name 138 "inF1"
15- Name 142 "inF2"
16- Name 146 "inF3"
17- Name 150 "inF4"
18- Name 154 "inI2"
19- Name 157 "i.vPos"
20- Name 161 "@entryPointOutput"
21- Decorate 138(inF1) Location 0
22- Decorate 142(inF2) Location 1
23- Decorate 146(inF3) Location 2
24- Decorate 150(inF4) Location 3
25- Decorate 154(inI2) Flat
26- Decorate 154(inI2) Location 4
27- Decorate 157(i.vPos) Location 5
28- Decorate 161(@entryPointOutput) Location 0
29- 2: TypeVoid
30- 3: TypeFunction 2
31- 6: TypeFloat 32
32- 8: TypeVector 6(float) 2
33- 10: TypeVector 6(float) 3
34- 12: TypeVector 6(float) 4
35- 14: TypeInt 32 1
36- 15: TypeVector 14(int) 2
37- 30: 6(float) Constant 3204448256
38- 31: 6(float) Constant 3179282432
39- 32: 8(fvec2) ConstantComposite 30 31
40- 36: 6(float) Constant 0
41- 37: 6(float) Constant 1031798784
42- 38: 8(fvec2) ConstantComposite 36 37
43- 42: 6(float) Constant 1044381696
44- 43: 6(float) Constant 3200253952
45- 44: 8(fvec2) ConstantComposite 42 43
46- 48: 6(float) Constant 1054867456
47- 49: 8(fvec2) ConstantComposite 48 30
48- 53: 14(int) Constant 28
49- 64: TypeInt 32 0
50- 65: 64(int) Constant 3
51- 137: TypePointer Input 6(float)
52- 138(inF1): 137(ptr) Variable Input
53- 141: TypePointer Input 8(fvec2)
54- 142(inF2): 141(ptr) Variable Input
55- 145: TypePointer Input 10(fvec3)
56- 146(inF3): 145(ptr) Variable Input
57- 149: TypePointer Input 12(fvec4)
58- 150(inF4): 149(ptr) Variable Input
59- 153: TypePointer Input 15(ivec2)
60- 154(inI2): 153(ptr) Variable Input
61- 157(i.vPos): 141(ptr) Variable Input
62- 160: TypePointer Output 12(fvec4)
63-161(@entryPointOutput): 160(ptr) Variable Output
64- 273: 15(ivec2) ConstantComposite 53 53
65- 4(main): 2 Function None 3
66- 5: Label
67- 155: 15(ivec2) Load 154(inI2)
68- 183: 6(float) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 138(inF1) 32
69- 185: 8(fvec2) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 142(inF2) 38
70- 187: 10(fvec3) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 146(inF3) 44
71- 189: 12(fvec4) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 150(inF4) 49
72- 193: 15(ivec2) ShiftLeftLogical 155 273
73- 195: 15(ivec2) ShiftRightArithmetic 193 273
74- 196: 8(fvec2) ConvertSToF 195
75- 197: 8(fvec2) VectorTimesScalar 196 37
76- 198: 6(float) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 138(inF1) 197
77- 200: 6(float) FAdd 183 198
78- 202: 6(float) ExtInst 1(GLSL.std.450) 77(InterpolateAtSample) 138(inF1) 65
79- 204: 6(float) FAdd 200 202
80- 206: 8(fvec2) ExtInst 1(GLSL.std.450) 77(InterpolateAtSample) 142(inF2) 65
81- 208: 8(fvec2) FAdd 185 206
82- 210: 10(fvec3) ExtInst 1(GLSL.std.450) 77(InterpolateAtSample) 146(inF3) 65
83- 212: 10(fvec3) FAdd 187 210
84- 214: 12(fvec4) ExtInst 1(GLSL.std.450) 77(InterpolateAtSample) 150(inF4) 65
85- 216: 12(fvec4) FAdd 189 214
86- 219: 14(int) CompositeExtract 155 0
87- 220: 64(int) Bitcast 219
88- 221: 6(float) ExtInst 1(GLSL.std.450) 77(InterpolateAtSample) 138(inF1) 220
89- 223: 6(float) FAdd 204 221
90- 225: 6(float) ExtInst 1(GLSL.std.450) 76(InterpolateAtCentroid) 138(inF1)
91- 227: 6(float) FAdd 223 225
92- 229: 8(fvec2) ExtInst 1(GLSL.std.450) 76(InterpolateAtCentroid) 142(inF2)
93- 231: 8(fvec2) FAdd 208 229
94- 233: 10(fvec3) ExtInst 1(GLSL.std.450) 76(InterpolateAtCentroid) 146(inF3)
95- 235: 10(fvec3) FAdd 212 233
96- 237: 12(fvec4) ExtInst 1(GLSL.std.450) 76(InterpolateAtCentroid) 150(inF4)
97- 239: 12(fvec4) FAdd 216 237
98- 242: 8(fvec2) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 157(i.vPos) 38
99- 244: 8(fvec2) FAdd 231 242
100- 247: 8(fvec2) ExtInst 1(GLSL.std.450) 77(InterpolateAtSample) 157(i.vPos) 65
101- 249: 8(fvec2) FAdd 244 247
102- 252: 8(fvec2) ExtInst 1(GLSL.std.450) 76(InterpolateAtCentroid) 157(i.vPos)
103- 254: 8(fvec2) FAdd 249 252
104- 257: 6(float) CompositeExtract 254 1
105- 259: 6(float) CompositeExtract 235 2
106- 261: 6(float) CompositeExtract 239 3
107- 262: 12(fvec4) CompositeConstruct 227 257 259 261
108- Store 161(@entryPointOutput) 262
109- Return
110- FunctionEnd
@@ -1,18 +1,18 @@
1hlsl.partialFlattenLocal.vert1hlsl.partialFlattenLocal.vert
2// Module Version 100002// Module Version 10000
3-// Generated by (magic number): 8000b3+// Generated by (magic number): 8000a
4-// Id's are bound by 1644+// Id's are bound by 159
5 5 
6 Capability Shader6 Capability Shader
7 1: ExtInstImport "GLSL.std.450"7 1: ExtInstImport "GLSL.std.450"
8 MemoryModel Logical GLSL4508 MemoryModel Logical GLSL450
9- EntryPoint Vertex 4 "main" 86 899+ EntryPoint Vertex 4 "main" 83 86
10 Source HLSL 50010 Source HLSL 500
11 Name 4 "main"11 Name 4 "main"
12- Name 86 "pos"12+ Name 83 "pos"
13- Name 89 "@entryPointOutput"13+ Name 86 "@entryPointOutput"
14- Decorate 86(pos) Location 014+ Decorate 83(pos) Location 0
15- Decorate 89(@entryPointOutput) BuiltIn Position15+ Decorate 86(@entryPointOutput) BuiltIn Position
16 2: TypeVoid16 2: TypeVoid
17 3: TypeFunction 217 3: TypeFunction 2
18 6: TypeFloat 3218 6: TypeFloat 32
@@ -33,54 +33,49 @@ hlsl.partialFlattenLocal.vert
33 37: 6(float) Constant 106535321633 37: 6(float) Constant 1065353216
34 38: 18(fvec2) ConstantComposite 32 3734 38: 18(fvec2) ConstantComposite 32 37
35 39: TypePointer Function 18(fvec2)35 39: TypePointer Function 18(fvec2)
36- 42: TypePointer Function 6(float)
37 54: TypeBool36 54: TypeBool
38- 64: 15(int) Constant 037+ 82: TypePointer Input 7(fvec4)
39- 67: 15(int) Constant 138+ 83(pos): 82(ptr) Variable Input
40- 85: TypePointer Input 7(fvec4)39+ 85: TypePointer Output 7(fvec4)
41- 86(pos): 85(ptr) Variable Input40+86(@entryPointOutput): 85(ptr) Variable Output
42- 88: TypePointer Output 7(fvec4)41+ 131: TypePointer Function 17
43-89(@entryPointOutput): 88(ptr) Variable Output42+ 133: TypePointer Function 20
44- 135: TypePointer Function 17
45- 137: TypePointer Function 20
46 4(main): 2 Function None 343 4(main): 2 Function None 3
47 5: Label44 5: Label
48- 138: 137(ptr) Variable Function45+ 134: 133(ptr) Variable Function
49- 136: 135(ptr) Variable Function46+ 132: 131(ptr) Variable Function
50- 87: 7(fvec4) Load 86(pos)47+ 84: 7(fvec4) Load 83(pos)
51- 141: 34(ptr) AccessChain 136 2548+ 137: 34(ptr) AccessChain 132 25
52- Store 141 3349+ Store 137 33
53- 142: 39(ptr) AccessChain 138 2550+ 138: 39(ptr) AccessChain 134 25
54- Store 142 3851+ Store 138 38
55- Branch 10452+ Branch 101
56- 104: Label53+ 101: Label
57- 163: 21(int) Phi 25 5 123 10854+ 158: 21(int) Phi 25 5 119 105
58- 107: 54(bool) SLessThan 163 3155+ 104: 54(bool) SLessThan 158 31
59- LoopMerge 124 108 None56+ LoopMerge 120 105 None
60- BranchConditional 107 108 12457+ BranchConditional 104 105 120
61- 108: Label58+ 105: Label
62- 143: 39(ptr) AccessChain 138 16359+ 139: 39(ptr) AccessChain 134 158
63- 112: 18(fvec2) Load 14360+ 109: 18(fvec2) Load 139
64- 144: 34(ptr) AccessChain 136 16361+ 140: 34(ptr) AccessChain 132 158
65- 114: 14(fvec3) Load 14462+ 111: 14(fvec3) Load 140
66- 115: 18(fvec2) VectorShuffle 114 114 0 163+ 112: 18(fvec2) VectorShuffle 111 111 0 1
67- 116: 18(fvec2) FAdd 115 11264+ 113: 18(fvec2) FAdd 112 109
68- 145: 42(ptr) AccessChain 136 163 6465+ 141: 34(ptr) AccessChain 132 158
69- 118: 6(float) CompositeExtract 116 066+ 115: 14(fvec3) Load 141
70- Store 145 11867+ 116: 14(fvec3) VectorShuffle 115 113 3 4 2
71- 146: 42(ptr) AccessChain 136 163 6768+ Store 141 116
72- 120: 6(float) CompositeExtract 116 169+ 119: 21(int) IAdd 158 31
73- Store 146 12070+ Branch 101
74- 123: 21(int) IAdd 163 3171+ 120: Label
75- Branch 10472+ 143: 17 Load 132
76- 124: Label73+ 157: 14(fvec3) CompositeExtract 143 0
77- 148: 17 Load 13674+ 125: 6(float) CompositeExtract 157 0
78- 162: 14(fvec3) CompositeExtract 148 075+ 126: 6(float) CompositeExtract 157 1
79- 129: 6(float) CompositeExtract 162 076+ 127: 6(float) CompositeExtract 157 2
80- 130: 6(float) CompositeExtract 162 177+ 128: 7(fvec4) CompositeConstruct 125 126 127 32
81- 131: 6(float) CompositeExtract 162 278+ 129: 7(fvec4) FAdd 84 128
82- 132: 7(fvec4) CompositeConstruct 129 130 131 3279+ Store 86(@entryPointOutput) 129
83- 133: 7(fvec4) FAdd 87 132
84- Store 89(@entryPointOutput) 133
85 Return80 Return
86 FunctionEnd81 FunctionEnd
@@ -1,6 +1,6 @@
1hlsl.partialFlattenMixed.vert1hlsl.partialFlattenMixed.vert
2// Module Version 100002// Module Version 10000
3-// Generated by (magic number): 8000b3+// Generated by (magic number): 8000a
4// Id's are bound by 364// Id's are bound by 36
5 5 
6 Capability Shader6 Capability Shader
@@ -2,23 +2,23 @@
2ERROR: 0:4: 'redeclaration' : cannot redeclare with different qualification: gl_FragCoord2ERROR: 0:4: 'redeclaration' : cannot redeclare with different qualification: gl_FragCoord
3ERROR: 0:5: 'redeclaration' : cannot redeclare with different qualification: gl_FragCoord3ERROR: 0:5: 'redeclaration' : cannot redeclare with different qualification: gl_FragCoord
4ERROR: 0:6: 'layout qualifier' : can only apply origin_upper_left and pixel_center_origin to gl_FragCoord 4ERROR: 0:6: 'layout qualifier' : can only apply origin_upper_left and pixel_center_origin to gl_FragCoord
5+ERROR: 0:14: 'gl_FragCoord' : cannot redeclare after use
6+ERROR: 0:50: 'gl_PerFragment' : cannot be used (maybe an instance name is needed)
5ERROR: 0:50: 'gl_PerFragment' : undeclared identifier 7ERROR: 0:50: 'gl_PerFragment' : undeclared identifier
6ERROR: 0:53: 'double' : Reserved word. 8ERROR: 0:53: 'double' : Reserved word.
7ERROR: 0:53: 'double' : not supported for this version or the enabled extensions 9ERROR: 0:53: 'double' : not supported for this version or the enabled extensions
8ERROR: 0:53: 'double' : must be qualified as flat in10ERROR: 0:53: 'double' : must be qualified as flat in
9ERROR: 0:57: '=' : cannot convert from ' global double' to ' global int'11ERROR: 0:57: '=' : cannot convert from ' global double' to ' global int'
10-ERROR: 0:80: 'floatBitsToInt' : required extension not requested: Possible extensions include:12+ERROR: 0:80: 'floatBitsToInt' : required extension not requested: GL_ARB_shader_bit_encoding
11-GL_ARB_shader_bit_encoding
12-GL_ARB_gpu_shader5
13ERROR: 0:100: 'packSnorm2x16' : required extension not requested: GL_ARB_shading_language_packing13ERROR: 0:100: 'packSnorm2x16' : required extension not requested: GL_ARB_shading_language_packing
14-ERROR: 0:114: 'textureQueryLOD' : required extension not requested: GL_ARB_texture_query_lod14+ERROR: 0:114: 'textureQueryLod' : required extension not requested: GL_ARB_texture_query_lod
15-ERROR: 0:115: 'textureQueryLOD' : required extension not requested: GL_ARB_texture_query_lod15+ERROR: 0:115: 'textureQueryLod' : required extension not requested: GL_ARB_texture_query_lod
16-ERROR: 0:154: 'textureQueryLOD' : no matching overloaded function found 16+ERROR: 0:154: 'textureQueryLod' : no matching overloaded function found
17ERROR: 0:154: 'assign' : cannot convert from ' const float' to ' temp 2-component vector of float'17ERROR: 0:154: 'assign' : cannot convert from ' const float' to ' temp 2-component vector of float'
18-ERROR: 0:155: 'textureQueryLOD' : no matching overloaded function found 18+ERROR: 0:155: 'textureQueryLod' : no matching overloaded function found
19ERROR: 0:155: 'assign' : cannot convert from ' const float' to ' temp 2-component vector of float'19ERROR: 0:155: 'assign' : cannot convert from ' const float' to ' temp 2-component vector of float'
20ERROR: 0:183: 'mix' : required extension not requested: GL_EXT_shader_integer_mix20ERROR: 0:183: 'mix' : required extension not requested: GL_EXT_shader_integer_mix
21-ERROR: 17 compilation errors. No code generated.21+ERROR: 19 compilation errors. No code generated.
22 22 
23 23 
24Shader version: 15024Shader version: 150
@@ -2,8 +2,8 @@
2ERROR: 0:15: 'fromVertex' : block instance name redefinition 2ERROR: 0:15: 'fromVertex' : block instance name redefinition
3ERROR: 0:19: 'fromVertex' : redefinition 3ERROR: 0:19: 'fromVertex' : redefinition
4ERROR: 0:21: 'fooC' : block instance name redefinition 4ERROR: 0:21: 'fooC' : block instance name redefinition
5-ERROR: 0:29: 'if the verison is 150 , the EmitStreamVertex and EndStreamPrimitive only support at extension GL_ARB_gpu_shader5' : required extension not requested: GL_ARB_gpu_shader55+ERROR: 0:29: 'EmitStreamVertex' : no matching overloaded function found
6-ERROR: 0:30: 'if the verison is 150 , the EmitStreamVertex and EndStreamPrimitive only support at extension GL_ARB_gpu_shader5' : required extension not requested: GL_ARB_gpu_shader56+ERROR: 0:30: 'EndStreamPrimitive' : no matching overloaded function found
7ERROR: 0:44: 'stream' : can only be used on an output 7ERROR: 0:44: 'stream' : can only be used on an output
8ERROR: 0:45: 'stream' : can only be used on an output 8ERROR: 0:45: 'stream' : can only be used on an output
9ERROR: 0:46: 'stream' : can only be used on an output 9ERROR: 0:46: 'stream' : can only be used on an output
@@ -49,12 +49,10 @@ ERROR: node is still EOpNull!
490:27 Sequence490:27 Sequence
500:27 EmitVertex ( global void)500:27 EmitVertex ( global void)
510:28 EndPrimitive ( global void)510:28 EndPrimitive ( global void)
52-0:29 EmitStreamVertex ( global void)52+0:29 Constant:
53-0:29 Constant:53+0:29 0.000000
54-0:29 1 (const int)54+0:30 Constant:
55-0:30 EndStreamPrimitive ( global void)55+0:30 0.000000
56-0:30 Constant:
57-0:30 0 (const int)
580:32 move second child to first child ( temp 3-component vector of float)560:32 move second child to first child ( temp 3-component vector of float)
590:32 color: direct index for structure (layout( stream=0) out 3-component vector of float)570:32 color: direct index for structure (layout( stream=0) out 3-component vector of float)
600:32 'anon@0' (layout( stream=0) out block{layout( stream=0) out 3-component vector of float color})580:32 'anon@0' (layout( stream=0) out block{layout( stream=0) out 3-component vector of float color})
@@ -192,12 +190,10 @@ ERROR: node is still EOpNull!
1920:27 Sequence1900:27 Sequence
1930:27 EmitVertex ( global void)1910:27 EmitVertex ( global void)
1940:28 EndPrimitive ( global void)1920:28 EndPrimitive ( global void)
195-0:29 EmitStreamVertex ( global void)193+0:29 Constant:
196-0:29 Constant:194+0:29 0.000000
197-0:29 1 (const int)195+0:30 Constant:
198-0:30 EndStreamPrimitive ( global void)196+0:30 0.000000
199-0:30 Constant:
200-0:30 0 (const int)
2010:32 move second child to first child ( temp 3-component vector of float)1970:32 move second child to first child ( temp 3-component vector of float)
2020:32 color: direct index for structure (layout( stream=0) out 3-component vector of float)1980:32 color: direct index for structure (layout( stream=0) out 3-component vector of float)
2030:32 'anon@0' (layout( stream=0) out block{layout( stream=0) out 3-component vector of float color})1990:32 'anon@0' (layout( stream=0) out block{layout( stream=0) out 3-component vector of float color})
@@ -627,7 +627,7 @@ ERROR: node is still EOpNull!
627ERROR: 0:7: 'vertices' : inconsistent output number of vertices for array size of gl_out627ERROR: 0:7: 'vertices' : inconsistent output number of vertices for array size of gl_out
628ERROR: 0:11: 'vertices' : inconsistent output number of vertices for array size of a628ERROR: 0:11: 'vertices' : inconsistent output number of vertices for array size of a
629ERROR: 0:12: 'vertices' : inconsistent output number of vertices for array size of outb629ERROR: 0:12: 'vertices' : inconsistent output number of vertices for array size of outb
630-ERROR: 0:26: 'gl_PointSize' : no such field in structure 'gl_out'630+ERROR: 0:26: 'gl_PointSize' : no such field in structure
631ERROR: 0:26: 'assign' : cannot convert from ' temp float' to ' temp block{ out 4-component vector of float Position gl_Position}'631ERROR: 0:26: 'assign' : cannot convert from ' temp float' to ' temp block{ out 4-component vector of float Position gl_Position}'
632ERROR: 0:29: 'out' : type must be an array: outf632ERROR: 0:29: 'out' : type must be an array: outf
633ERROR: 0:43: 'vertices' : must be greater than 0 633ERROR: 0:43: 'vertices' : must be greater than 0
@@ -940,9 +940,8 @@ ERROR: Linking tessellation control stage: Multiple function bodies in multiple
940 main(940 main(
941ERROR: Linking tessellation control stage: Multiple function bodies in multiple compilation units for the same signature in the same stage:941ERROR: Linking tessellation control stage: Multiple function bodies in multiple compilation units for the same signature in the same stage:
942 main(942 main(
943-ERROR: Linking tessellation control and tessellation control stages: Array sizes must be compatible:943+ERROR: Linking tessellation control stage: Types must match:
944- tessellation control stage: " int outa[4]"944+ outa: " global 4-element array of int" versus " global 1-element array of int"
945- tessellation control stage: " int outa[1]"
946ERROR: Linking tessellation control stage: can't handle multiple entry points per stage945ERROR: Linking tessellation control stage: can't handle multiple entry points per stage
947ERROR: Linking tessellation control stage: Multiple function bodies in multiple compilation units for the same signature in the same stage:946ERROR: Linking tessellation control stage: Multiple function bodies in multiple compilation units for the same signature in the same stage:
948 main(947 main(
@@ -952,9 +951,8 @@ ERROR: Linking tessellation control stage: Multiple function bodies in multiple
952 foo(951 foo(
953ERROR: Linking tessellation control stage: Multiple function bodies in multiple compilation units for the same signature in the same stage:952ERROR: Linking tessellation control stage: Multiple function bodies in multiple compilation units for the same signature in the same stage:
954 main(953 main(
955-ERROR: Linking tessellation control and tessellation control stages: tessellation control block member has no corresponding member in tessellation control block:954+ERROR: Linking tessellation control stage: Types must match:
956- tessellation control stage: Block: gl_PerVertex, Member: gl_PointSize955+ gl_out: " out 4-element array of block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out unsized 2-element array of float ClipDistance gl_ClipDistance}" versus " out 3-element array of block{ out 4-component vector of float Position gl_Position}"
957- tessellation control stage: Block: gl_PerVertex, Member: n/a
958 956 
959Linked tessellation evaluation stage:957Linked tessellation evaluation stage:
960 958 
@@ -1,12 +1,10 @@
1150.vert1150.vert
2-ERROR: 0:18: 'gl_ClipVertex' : undeclared identifier
3-ERROR: 0:18: 'assign' : cannot convert from ' in 4-component vector of float' to ' temp float'
4ERROR: 0:26: 'a' : cannot redeclare a user-block member array 2ERROR: 0:26: 'a' : cannot redeclare a user-block member array
5ERROR: 0:28: 'double' : Reserved word. 3ERROR: 0:28: 'double' : Reserved word.
6ERROR: 0:28: 'double' : not supported for this version or the enabled extensions 4ERROR: 0:28: 'double' : not supported for this version or the enabled extensions
7ERROR: 0:28: 'vertex-shader `double` type input' : not supported for this version or the enabled extensions 5ERROR: 0:28: 'vertex-shader `double` type input' : not supported for this version or the enabled extensions
8ERROR: 0:3001: '#error' : line of this error should be 3001 6ERROR: 0:3001: '#error' : line of this error should be 3001
9-ERROR: 7 compilation errors. No code generated.7+ERROR: 5 compilation errors. No code generated.
10 8 
11 9 
12Shader version: 15010Shader version: 150
@@ -17,20 +15,20 @@ ERROR: node is still EOpNull!
170:15 Sequence150:15 Sequence
180:15 move second child to first child ( temp 4-component vector of float)160:15 move second child to first child ( temp 4-component vector of float)
190:15 gl_Position: direct index for structure ( invariant gl_Position 4-component vector of float Position)170:15 gl_Position: direct index for structure ( invariant gl_Position 4-component vector of float Position)
20-0:15 'anon@0' ( out block{ invariant gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 4-element array of float ClipDistance gl_ClipDistance})18+0:15 'anon@0' ( out block{ invariant gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 4-element array of float ClipDistance gl_ClipDistance, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out unsized 1-element array of 4-component vector of float TexCoord gl_TexCoord, out float FogFragCoord gl_FogFragCoord})
210:15 Constant:190:15 Constant:
220:15 0 (const uint)200:15 0 (const uint)
230:15 'iv4' ( in 4-component vector of float)210:15 'iv4' ( in 4-component vector of float)
240:16 move second child to first child ( temp float)220:16 move second child to first child ( temp float)
250:16 gl_PointSize: direct index for structure ( gl_PointSize float PointSize)230:16 gl_PointSize: direct index for structure ( gl_PointSize float PointSize)
26-0:16 'anon@0' ( out block{ invariant gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 4-element array of float ClipDistance gl_ClipDistance})24+0:16 'anon@0' ( out block{ invariant gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 4-element array of float ClipDistance gl_ClipDistance, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out unsized 1-element array of 4-component vector of float TexCoord gl_TexCoord, out float FogFragCoord gl_FogFragCoord})
270:16 Constant:250:16 Constant:
280:16 1 (const uint)260:16 1 (const uint)
290:16 'ps' ( uniform float)270:16 'ps' ( uniform float)
300:17 move second child to first child ( temp float)280:17 move second child to first child ( temp float)
310:17 direct index ( temp float ClipDistance)290:17 direct index ( temp float ClipDistance)
320:17 gl_ClipDistance: direct index for structure ( out 4-element array of float ClipDistance)300:17 gl_ClipDistance: direct index for structure ( out 4-element array of float ClipDistance)
33-0:17 'anon@0' ( out block{ invariant gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 4-element array of float ClipDistance gl_ClipDistance})31+0:17 'anon@0' ( out block{ invariant gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 4-element array of float ClipDistance gl_ClipDistance, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out unsized 1-element array of 4-component vector of float TexCoord gl_TexCoord, out float FogFragCoord gl_FogFragCoord})
340:17 Constant:320:17 Constant:
350:17 2 (const uint)330:17 2 (const uint)
360:17 Constant:340:17 Constant:
@@ -39,7 +37,12 @@ ERROR: node is still EOpNull!
390:17 'iv4' ( in 4-component vector of float)370:17 'iv4' ( in 4-component vector of float)
400:17 Constant:380:17 Constant:
410:17 0 (const int)390:17 0 (const int)
42-0:18 'gl_ClipVertex' ( temp float)40+0:18 move second child to first child ( temp 4-component vector of float)
41+0:18 gl_ClipVertex: direct index for structure ( gl_ClipVertex 4-component vector of float ClipVertex)
42+0:18 'anon@0' ( out block{ invariant gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 4-element array of float ClipDistance gl_ClipDistance, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out unsized 1-element array of 4-component vector of float TexCoord gl_TexCoord, out float FogFragCoord gl_FogFragCoord})
43+0:18 Constant:
44+0:18 3 (const uint)
45+0:18 'iv4' ( in 4-component vector of float)
430:? Linker Objects460:? Linker Objects
440:? 'iv4' ( in 4-component vector of float)470:? 'iv4' ( in 4-component vector of float)
450:? 'ps' ( uniform float)480:? 'ps' ( uniform float)
@@ -64,6 +67,7 @@ ERROR: node is still EOpNull!
64 67 
65Linked vertex stage:68Linked vertex stage:
66 69 
70+ERROR: Linking vertex stage: Can only use one of gl_ClipDistance or gl_ClipVertex (gl_ClipDistance is preferred)
67 71 
68Shader version: 15072Shader version: 150
69Requested GL_ARB_vertex_attrib_64bit73Requested GL_ARB_vertex_attrib_64bit
@@ -73,20 +77,20 @@ ERROR: node is still EOpNull!
730:15 Sequence770:15 Sequence
740:15 move second child to first child ( temp 4-component vector of float)780:15 move second child to first child ( temp 4-component vector of float)
750:15 gl_Position: direct index for structure ( invariant gl_Position 4-component vector of float Position)790:15 gl_Position: direct index for structure ( invariant gl_Position 4-component vector of float Position)
76-0:15 'anon@0' ( out block{ invariant gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 4-element array of float ClipDistance gl_ClipDistance})80+0:15 'anon@0' ( out block{ invariant gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 4-element array of float ClipDistance gl_ClipDistance, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out 1-element array of 4-component vector of float TexCoord gl_TexCoord, out float FogFragCoord gl_FogFragCoord})
770:15 Constant:810:15 Constant:
780:15 0 (const uint)820:15 0 (const uint)
790:15 'iv4' ( in 4-component vector of float)830:15 'iv4' ( in 4-component vector of float)
800:16 move second child to first child ( temp float)840:16 move second child to first child ( temp float)
810:16 gl_PointSize: direct index for structure ( gl_PointSize float PointSize)850:16 gl_PointSize: direct index for structure ( gl_PointSize float PointSize)
82-0:16 'anon@0' ( out block{ invariant gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 4-element array of float ClipDistance gl_ClipDistance})86+0:16 'anon@0' ( out block{ invariant gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 4-element array of float ClipDistance gl_ClipDistance, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out 1-element array of 4-component vector of float TexCoord gl_TexCoord, out float FogFragCoord gl_FogFragCoord})
830:16 Constant:870:16 Constant:
840:16 1 (const uint)880:16 1 (const uint)
850:16 'ps' ( uniform float)890:16 'ps' ( uniform float)
860:17 move second child to first child ( temp float)900:17 move second child to first child ( temp float)
870:17 direct index ( temp float ClipDistance)910:17 direct index ( temp float ClipDistance)
880:17 gl_ClipDistance: direct index for structure ( out 4-element array of float ClipDistance)920:17 gl_ClipDistance: direct index for structure ( out 4-element array of float ClipDistance)
89-0:17 'anon@0' ( out block{ invariant gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 4-element array of float ClipDistance gl_ClipDistance})93+0:17 'anon@0' ( out block{ invariant gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 4-element array of float ClipDistance gl_ClipDistance, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out 1-element array of 4-component vector of float TexCoord gl_TexCoord, out float FogFragCoord gl_FogFragCoord})
900:17 Constant:940:17 Constant:
910:17 2 (const uint)950:17 2 (const uint)
920:17 Constant:960:17 Constant:
@@ -95,7 +99,12 @@ ERROR: node is still EOpNull!
950:17 'iv4' ( in 4-component vector of float)990:17 'iv4' ( in 4-component vector of float)
960:17 Constant:1000:17 Constant:
970:17 0 (const int)1010:17 0 (const int)
98-0:18 'gl_ClipVertex' ( temp float)102+0:18 move second child to first child ( temp 4-component vector of float)
103+0:18 gl_ClipVertex: direct index for structure ( gl_ClipVertex 4-component vector of float ClipVertex)
104+0:18 'anon@0' ( out block{ invariant gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 4-element array of float ClipDistance gl_ClipDistance, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out 1-element array of 4-component vector of float TexCoord gl_TexCoord, out float FogFragCoord gl_FogFragCoord})
105+0:18 Constant:
106+0:18 3 (const uint)
107+0:18 'iv4' ( in 4-component vector of float)
990:? Linker Objects1080:? Linker Objects
1000:? 'iv4' ( in 4-component vector of float)1090:? 'iv4' ( in 4-component vector of float)
1010:? 'ps' ( uniform float)1100:? 'ps' ( uniform float)
@@ -24,18 +24,18 @@ ERROR: node is still EOpNull!
240:42 Function Definition: main( ( global void)240:42 Function Definition: main( ( global void)
250:42 Function Parameters: 250:42 Function Parameters:
260:44 Sequence260:44 Sequence
27-0:44 texture ( global lowp 4-component vector of int, operation at mediump)27+0:44 texture ( global lowp 4-component vector of int)
280:44 sampler: direct index for structure ( global lowp isampler3D)280:44 sampler: direct index for structure ( global lowp isampler3D)
290:44 's' ( uniform structure{ global mediump 4-component vector of float u, global mediump 4-component vector of uint v, global lowp isampler3D sampler, global mediump 3-component vector of float w, global structure{ global mediump int a} t})290:44 's' ( uniform structure{ global mediump 4-component vector of float u, global mediump 4-component vector of uint v, global lowp isampler3D sampler, global mediump 3-component vector of float w, global structure{ global mediump int a} t})
300:44 Constant:300:44 Constant:
310:44 2 (const int)310:44 2 (const int)
32-0:44 Construct vec3 ( temp mediump 3-component vector of float)32+0:44 Construct vec3 ( temp lowp 3-component vector of float)
33-0:44 Convert int to float ( temp mediump float)33+0:44 Convert int to float ( temp lowp float)
340:44 ni: direct index for structure (layout( column_major shared) uniform mediump int)340:44 ni: direct index for structure (layout( column_major shared) uniform mediump int)
350:44 'inst' (layout( column_major shared) uniform block{layout( column_major shared) uniform mediump 4-component vector of uint nbv, layout( column_major shared) uniform mediump int ni})350:44 'inst' (layout( column_major shared) uniform block{layout( column_major shared) uniform mediump 4-component vector of uint nbv, layout( column_major shared) uniform mediump int ni})
360:44 Constant:360:44 Constant:
370:44 1 (const int)370:44 1 (const int)
38-0:44 Convert uint to float ( temp mediump float)38+0:44 Convert uint to float ( temp lowp float)
390:44 direct index ( temp mediump uint)390:44 direct index ( temp mediump uint)
400:44 bv: direct index for structure (layout( column_major shared) uniform mediump 4-component vector of uint)400:44 bv: direct index for structure (layout( column_major shared) uniform mediump 4-component vector of uint)
410:44 'anon@0' (layout( column_major shared) uniform block{layout( column_major shared) uniform mediump 4-component vector of uint bv, layout( column_major shared) uniform mediump 2X2 matrix of float bm2, layout( column_major shared) uniform lowp isampler2D sampler, layout( column_major shared) uniform structure{ global mediump int a} t, layout( column_major shared) uniform structure{ global mediump 4-component vector of float u, global mediump 4-component vector of uint v, global lowp isampler3D sampler, global mediump 3-component vector of float w, layout( column_major) global structure{ global mediump int a} t} fbs})410:44 'anon@0' (layout( column_major shared) uniform block{layout( column_major shared) uniform mediump 4-component vector of uint bv, layout( column_major shared) uniform mediump 2X2 matrix of float bm2, layout( column_major shared) uniform lowp isampler2D sampler, layout( column_major shared) uniform structure{ global mediump int a} t, layout( column_major shared) uniform structure{ global mediump 4-component vector of float u, global mediump 4-component vector of uint v, global lowp isampler3D sampler, global mediump 3-component vector of float w, layout( column_major) global structure{ global mediump int a} t} fbs})
@@ -43,7 +43,7 @@ ERROR: node is still EOpNull!
430:44 0 (const uint)430:44 0 (const uint)
440:44 Constant:440:44 Constant:
450:44 1 (const int)450:44 1 (const int)
46-0:44 Convert uint to float ( temp mediump float)46+0:44 Convert uint to float ( temp lowp float)
470:44 direct index ( temp mediump uint)470:44 direct index ( temp mediump uint)
480:44 nbv: direct index for structure (layout( column_major shared) uniform mediump 4-component vector of uint)480:44 nbv: direct index for structure (layout( column_major shared) uniform mediump 4-component vector of uint)
490:44 direct index (layout( column_major shared) temp block{layout( column_major shared) uniform mediump 4-component vector of uint nbv, layout( column_major shared) uniform mediump int ni})490:44 direct index (layout( column_major shared) temp block{layout( column_major shared) uniform mediump 4-component vector of uint nbv, layout( column_major shared) uniform mediump int ni})
@@ -92,18 +92,18 @@ ERROR: node is still EOpNull!
920:42 Function Definition: main( ( global void)920:42 Function Definition: main( ( global void)
930:42 Function Parameters: 930:42 Function Parameters:
940:44 Sequence940:44 Sequence
95-0:44 texture ( global lowp 4-component vector of int, operation at mediump)95+0:44 texture ( global lowp 4-component vector of int)
960:44 sampler: direct index for structure ( global lowp isampler3D)960:44 sampler: direct index for structure ( global lowp isampler3D)
970:44 's' ( uniform structure{ global mediump 4-component vector of float u, global mediump 4-component vector of uint v, global lowp isampler3D sampler, global mediump 3-component vector of float w, global structure{ global mediump int a} t})970:44 's' ( uniform structure{ global mediump 4-component vector of float u, global mediump 4-component vector of uint v, global lowp isampler3D sampler, global mediump 3-component vector of float w, global structure{ global mediump int a} t})
980:44 Constant:980:44 Constant:
990:44 2 (const int)990:44 2 (const int)
100-0:44 Construct vec3 ( temp mediump 3-component vector of float)100+0:44 Construct vec3 ( temp lowp 3-component vector of float)
101-0:44 Convert int to float ( temp mediump float)101+0:44 Convert int to float ( temp lowp float)
1020:44 ni: direct index for structure (layout( column_major shared) uniform mediump int)1020:44 ni: direct index for structure (layout( column_major shared) uniform mediump int)
1030:44 'inst' (layout( column_major shared) uniform block{layout( column_major shared) uniform mediump 4-component vector of uint nbv, layout( column_major shared) uniform mediump int ni})1030:44 'inst' (layout( column_major shared) uniform block{layout( column_major shared) uniform mediump 4-component vector of uint nbv, layout( column_major shared) uniform mediump int ni})
1040:44 Constant:1040:44 Constant:
1050:44 1 (const int)1050:44 1 (const int)
106-0:44 Convert uint to float ( temp mediump float)106+0:44 Convert uint to float ( temp lowp float)
1070:44 direct index ( temp mediump uint)1070:44 direct index ( temp mediump uint)
1080:44 bv: direct index for structure (layout( column_major shared) uniform mediump 4-component vector of uint)1080:44 bv: direct index for structure (layout( column_major shared) uniform mediump 4-component vector of uint)
1090:44 'anon@0' (layout( column_major shared) uniform block{layout( column_major shared) uniform mediump 4-component vector of uint bv, layout( column_major shared) uniform mediump 2X2 matrix of float bm2, layout( column_major shared) uniform lowp isampler2D sampler, layout( column_major shared) uniform structure{ global mediump int a} t, layout( column_major shared) uniform structure{ global mediump 4-component vector of float u, global mediump 4-component vector of uint v, global lowp isampler3D sampler, global mediump 3-component vector of float w, layout( column_major) global structure{ global mediump int a} t} fbs})1090:44 'anon@0' (layout( column_major shared) uniform block{layout( column_major shared) uniform mediump 4-component vector of uint bv, layout( column_major shared) uniform mediump 2X2 matrix of float bm2, layout( column_major shared) uniform lowp isampler2D sampler, layout( column_major shared) uniform structure{ global mediump int a} t, layout( column_major shared) uniform structure{ global mediump 4-component vector of float u, global mediump 4-component vector of uint v, global lowp isampler3D sampler, global mediump 3-component vector of float w, layout( column_major) global structure{ global mediump int a} t} fbs})
@@ -111,7 +111,7 @@ ERROR: node is still EOpNull!
1110:44 0 (const uint)1110:44 0 (const uint)
1120:44 Constant:1120:44 Constant:
1130:44 1 (const int)1130:44 1 (const int)
114-0:44 Convert uint to float ( temp mediump float)114+0:44 Convert uint to float ( temp lowp float)
1150:44 direct index ( temp mediump uint)1150:44 direct index ( temp mediump uint)
1160:44 nbv: direct index for structure (layout( column_major shared) uniform mediump 4-component vector of uint)1160:44 nbv: direct index for structure (layout( column_major shared) uniform mediump 4-component vector of uint)
1170:44 direct index (layout( column_major shared) temp block{layout( column_major shared) uniform mediump 4-component vector of uint nbv, layout( column_major shared) uniform mediump int ni})1170:44 direct index (layout( column_major shared) temp block{layout( column_major shared) uniform mediump 4-component vector of uint nbv, layout( column_major shared) uniform mediump int ni})
@@ -1,7 +1,6 @@
1300layout.vert1300layout.vert
2ERROR: 0:7: 'vertex input arrays' : not supported with this profile: es2ERROR: 0:7: 'vertex input arrays' : not supported with this profile: es
3ERROR: 0:8: 'in' : cannot be a structure or array 3ERROR: 0:8: 'in' : cannot be a structure or array
4-ERROR: 0:8: 's' : A structure containing an array is not allowed as input in ES
5ERROR: 0:8: 'vertex input arrays' : not supported with this profile: es4ERROR: 0:8: 'vertex input arrays' : not supported with this profile: es
6ERROR: 0:8: 'location' : overlapping use of location 105ERROR: 0:8: 'location' : overlapping use of location 10
7ERROR: 0:12: 'layout' : cannot specify matrix layout on a variable declaration 6ERROR: 0:12: 'layout' : cannot specify matrix layout on a variable declaration
@@ -19,7 +18,7 @@ ERROR: 0:50: 'shared' : not supported for this version or the enabled extensions
19ERROR: 0:50: 'shared' : not supported in this stage: vertex18ERROR: 0:50: 'shared' : not supported in this stage: vertex
20ERROR: 0:54: 'layout' : cannot specify packing on a variable declaration 19ERROR: 0:54: 'layout' : cannot specify packing on a variable declaration
21ERROR: 0:57: 'location' : overlapping use of location 4020ERROR: 0:57: 'location' : overlapping use of location 40
22-ERROR: 20 compilation errors. No code generated.21+ERROR: 19 compilation errors. No code generated.
23 22 
24 23 
25Shader version: 30024Shader version: 300
@@ -7,9 +7,9 @@ ERROR: 0:39: 'in' : global storage input qualifier cannot be used in a compute s
7ERROR: 0:39: 'location qualifier on input' : not supported in this stage: compute7ERROR: 0:39: 'location qualifier on input' : not supported in this stage: compute
8ERROR: 0:40: 'in' : global storage input qualifier cannot be used in a compute shader 8ERROR: 0:40: 'in' : global storage input qualifier cannot be used in a compute shader
9ERROR: 0:41: 'out' : global storage output qualifier cannot be used in a compute shader 9ERROR: 0:41: 'out' : global storage output qualifier cannot be used in a compute shader
10-ERROR: 0:44: 'shared block' : not supported for this version or the enabled extensions 10+ERROR: 0:44: 'shared' : cannot apply layout qualifiers to a shared variable
11ERROR: 0:44: 'location' : can only apply to uniform, buffer, in, or out storage qualifiers 11ERROR: 0:44: 'location' : can only apply to uniform, buffer, in, or out storage qualifiers
12-ERROR: 0:45: 'shared' : initializer can only be a null initializer ('{}') 12+ERROR: 0:45: 'shared' : cannot initialize this type of qualifier
13ERROR: 0:47: 'local_size' : can only apply to 'in' 13ERROR: 0:47: 'local_size' : can only apply to 'in'
14ERROR: 0:47: 'local_size' : can only apply to 'in' 14ERROR: 0:47: 'local_size' : can only apply to 'in'
15ERROR: 0:47: 'local_size' : can only apply to 'in' 15ERROR: 0:47: 'local_size' : can only apply to 'in'
@@ -115,11 +115,6 @@ ERROR: node is still EOpNull!
1150:36 Constant:1150:36 Constant:
1160:36 1 (const uint)1160:36 1 (const uint)
1170:36 'gl_LocalInvocationIndex' ( in highp uint LocalInvocationIndex)1170:36 'gl_LocalInvocationIndex' ( in highp uint LocalInvocationIndex)
118-0:45 Sequence
119-0:45 move second child to first child ( temp highp float)
120-0:45 'fs' ( shared highp float)
121-0:45 Constant:
122-0:45 4.200000
1230:59 Function Definition: foo( ( global void)1180:59 Function Definition: foo( ( global void)
1240:59 Function Parameters: 1190:59 Function Parameters:
1250:61 Sequence1200:61 Sequence
@@ -180,7 +175,7 @@ ERROR: node is still EOpNull!
1800:91 'i' ( temp highp int)1750:91 'i' ( temp highp int)
1810:92 imageStore ( global highp void)1760:92 imageStore ( global highp void)
1820:92 'ii2da' ( writeonly uniform highp iimage2DArray)1770:92 'ii2da' ( writeonly uniform highp iimage2DArray)
183-0:92 Construct ivec3 ( temp highp 3-component vector of int)178+0:92 Construct ivec3 ( temp 3-component vector of int)
1840:92 'i' ( temp highp int)1790:92 'i' ( temp highp int)
1850:92 'i' ( temp highp int)1800:92 'i' ( temp highp int)
1860:92 'i' ( temp highp int)1810:92 'i' ( temp highp int)
@@ -189,9 +184,9 @@ ERROR: node is still EOpNull!
1890:92 0 (const int)1840:92 0 (const int)
1900:92 0 (const int)1850:92 0 (const int)
1910:92 0 (const int)1860:92 0 (const int)
192-0:93 imageLoad ( global mediump 4-component vector of float, operation at highp)187+0:93 imageLoad ( global mediump 4-component vector of float)
1930:93 'img2Drgba' (layout( rgba32f) readonly uniform mediump image2D)1880:93 'img2Drgba' (layout( rgba32f) readonly uniform mediump image2D)
194-0:93 Construct ivec2 ( temp highp 2-component vector of int)189+0:93 Construct ivec2 ( temp mediump 2-component vector of int)
1950:93 'i' ( temp highp int)1900:93 'i' ( temp highp int)
1960:93 'i' ( temp highp int)1910:93 'i' ( temp highp int)
1970:94 imageLoad ( global highp 4-component vector of int)1920:94 imageLoad ( global highp 4-component vector of int)
@@ -558,11 +553,6 @@ ERROR: node is still EOpNull!
5580:36 Constant:5530:36 Constant:
5590:36 1 (const uint)5540:36 1 (const uint)
5600:36 'gl_LocalInvocationIndex' ( in highp uint LocalInvocationIndex)5550:36 'gl_LocalInvocationIndex' ( in highp uint LocalInvocationIndex)
561-0:45 Sequence
562-0:45 move second child to first child ( temp highp float)
563-0:45 'fs' ( shared highp float)
564-0:45 Constant:
565-0:45 4.200000
5660:? Linker Objects5560:? Linker Objects
5670:? 'gl_WorkGroupSize' ( const highp 3-component vector of uint WorkGroupSize)5570:? 'gl_WorkGroupSize' ( const highp 3-component vector of uint WorkGroupSize)
5680:? 2 (const uint)5580:? 2 (const uint)
@@ -40,14 +40,10 @@ ERROR: 0:112: 'out' : cannot be a matrix
40ERROR: 0:114: 'in' : cannot be bool 40ERROR: 0:114: 'in' : cannot be bool
41ERROR: 0:115: 'sampler2D' : sampler/image types can only be used in uniform variables or function parameters: ino41ERROR: 0:115: 'sampler2D' : sampler/image types can only be used in uniform variables or function parameters: ino
42ERROR: 0:117: 'fragment-shader array-of-array input' : not supported with this profile: es42ERROR: 0:117: 'fragment-shader array-of-array input' : not supported with this profile: es
43-ERROR: 0:120: 'S' : A structure containing an array is not allowed as input in ES
44ERROR: 0:120: 'fragment-shader array-of-struct input' : not supported with this profile: es43ERROR: 0:120: 'fragment-shader array-of-struct input' : not supported with this profile: es
45-ERROR: 0:121: 'S' : A structure containing an array is not allowed as input in ES
46ERROR: 0:121: 'fragment-shader array-of-struct input' : not supported with this profile: es44ERROR: 0:121: 'fragment-shader array-of-struct input' : not supported with this profile: es
47ERROR: 0:123: 'fragment-shader struct input containing an array' : not supported with this profile: es45ERROR: 0:123: 'fragment-shader struct input containing an array' : not supported with this profile: es
48-ERROR: 0:123: 'SA' : A structure containing an array is not allowed as input in ES
49ERROR: 0:125: 'fragment-shader struct input containing structure' : not supported with this profile: es46ERROR: 0:125: 'fragment-shader struct input containing structure' : not supported with this profile: es
50-ERROR: 0:125: 'SS' : A structure containing an struct is not allowed as input in ES
51ERROR: 0:133: 'output block' : not supported in this stage: fragment47ERROR: 0:133: 'output block' : not supported in this stage: fragment
52ERROR: 0:138: '' : cannot nest a structure definition inside a structure or block 48ERROR: 0:138: '' : cannot nest a structure definition inside a structure or block
53ERROR: 0:146: 'location' : overlapping use of location 1349ERROR: 0:146: 'location' : overlapping use of location 13
@@ -143,7 +139,7 @@ ERROR: 0:461: 'func' : function already has a body
143ERROR: 0:463: 'return' : void function cannot return a value 139ERROR: 0:463: 'return' : void function cannot return a value
144ERROR: 0:472: '=' : cannot convert from ' temp mediump uint' to ' temp mediump int'140ERROR: 0:472: '=' : cannot convert from ' temp mediump uint' to ' temp mediump int'
145ERROR: 0:485: '=' : cannot convert from ' global mediump int' to ' temp mediump uint'141ERROR: 0:485: '=' : cannot convert from ' global mediump int' to ' temp mediump uint'
146-ERROR: 136 compilation errors. No code generated.142+ERROR: 132 compilation errors. No code generated.
147 143 
148 144 
149Shader version: 310145Shader version: 310
@@ -270,7 +266,7 @@ ERROR: node is still EOpNull!
2700:42 Constant:2660:42 Constant:
2710:42 0.0000002670:42 0.000000
2720:42 0.0000002680:42 0.000000
273-0:42 Convert float to int ( temp mediump 2-component vector of int)269+0:42 Convert float to int ( temp highp 2-component vector of int)
2740:42 'c2D' ( smooth in mediump 2-component vector of float)2700:42 'c2D' ( smooth in mediump 2-component vector of float)
2750:43 textureProjGradOffset ( global highp 4-component vector of uint)2710:43 textureProjGradOffset ( global highp 4-component vector of uint)
2760:43 'usamp2d' ( uniform highp usampler2D)2720:43 'usamp2d' ( uniform highp usampler2D)
@@ -471,7 +467,7 @@ ERROR: node is still EOpNull!
4710:211 Constant:4670:211 Constant:
4720:211 0.1000004680:211 0.100000
4730:211 0.1000004690:211 0.100000
474-0:211 Convert float to int ( temp mediump 2-component vector of int)470+0:211 Convert float to int ( temp highp 2-component vector of int)
4750:211 'inf' ( smooth in mediump 2-component vector of float)4710:211 'inf' ( smooth in mediump 2-component vector of float)
4760:212 textureGatherOffsets ( global highp 4-component vector of float)4720:212 textureGatherOffsets ( global highp 4-component vector of float)
4770:212 direct index ( temp highp sampler2D)4730:212 direct index ( temp highp sampler2D)
@@ -507,7 +503,7 @@ ERROR: node is still EOpNull!
5070:221 Constant:5030:221 Constant:
5080:221 0.1000005040:221 0.100000
5090:221 0.1000005050:221 0.100000
510-0:221 Convert float to int ( temp mediump 2-component vector of int)506+0:221 Convert float to int ( temp highp 2-component vector of int)
5110:221 'inf' ( smooth in mediump 2-component vector of float)5070:221 'inf' ( smooth in mediump 2-component vector of float)
5120:222 textureGatherOffsets ( global highp 4-component vector of float)5080:222 textureGatherOffsets ( global highp 4-component vector of float)
5130:222 direct index ( temp highp sampler2D)5090:222 direct index ( temp highp sampler2D)
@@ -6,7 +6,7 @@ ERROR: 0:43: 'EmitStreamVertex' : no matching overloaded function found
6ERROR: 0:44: 'EndStreamPrimitive' : no matching overloaded function found 6ERROR: 0:44: 'EndStreamPrimitive' : no matching overloaded function found
7ERROR: 0:47: 'gl_ClipDistance' : undeclared identifier 7ERROR: 0:47: 'gl_ClipDistance' : undeclared identifier
8ERROR: 0:47: 'gl_ClipDistance' : left of '[' is not of type array, matrix, or vector 8ERROR: 0:47: 'gl_ClipDistance' : left of '[' is not of type array, matrix, or vector
9-ERROR: 0:48: 'gl_ClipDistance' : no such field in structure 'gl_in'9+ERROR: 0:48: 'gl_ClipDistance' : no such field in structure
10ERROR: 0:48: 'expression' : left of '[' is not of type array, matrix, or vector 10ERROR: 0:48: 'expression' : left of '[' is not of type array, matrix, or vector
11ERROR: 0:47: 'assign' : l-value required (can't modify a const)11ERROR: 0:47: 'assign' : l-value required (can't modify a const)
12ERROR: 0:55: 'selecting output stream' : not supported with this profile: es12ERROR: 0:55: 'selecting output stream' : not supported with this profile: es
@@ -6,12 +6,12 @@ ERROR: 0:12: 'patch' : can only use on output in tessellation-control shader
6ERROR: 0:26: 'gl_PointSize' : required extension not requested: Possible extensions include:6ERROR: 0:26: 'gl_PointSize' : required extension not requested: Possible extensions include:
7GL_EXT_tessellation_point_size7GL_EXT_tessellation_point_size
8GL_OES_tessellation_point_size8GL_OES_tessellation_point_size
9-ERROR: 0:27: 'gl_ClipDistance' : no such field in structure 'gl_in'9+ERROR: 0:27: 'gl_ClipDistance' : no such field in structure
10ERROR: 0:27: 'expression' : left of '[' is not of type array, matrix, or vector 10ERROR: 0:27: 'expression' : left of '[' is not of type array, matrix, or vector
11ERROR: 0:34: 'gl_PointSize' : required extension not requested: Possible extensions include:11ERROR: 0:34: 'gl_PointSize' : required extension not requested: Possible extensions include:
12GL_EXT_tessellation_point_size12GL_EXT_tessellation_point_size
13GL_OES_tessellation_point_size13GL_OES_tessellation_point_size
14-ERROR: 0:35: 'gl_ClipDistance' : no such field in structure 'gl_out'14+ERROR: 0:35: 'gl_ClipDistance' : no such field in structure
15ERROR: 0:35: 'expression' : left of '[' is not of type array, matrix, or vector 15ERROR: 0:35: 'expression' : left of '[' is not of type array, matrix, or vector
16ERROR: 0:35: 'assign' : l-value required (can't modify a const)16ERROR: 0:35: 'assign' : l-value required (can't modify a const)
17ERROR: 0:41: '' : tessellation control barrier() cannot be placed within flow control 17ERROR: 0:41: '' : tessellation control barrier() cannot be placed within flow control
@@ -10,7 +10,7 @@ ERROR: 0:26: 'barrier' : no matching overloaded function found
10ERROR: 0:37: 'gl_PointSize' : required extension not requested: Possible extensions include:10ERROR: 0:37: 'gl_PointSize' : required extension not requested: Possible extensions include:
11GL_EXT_tessellation_point_size11GL_EXT_tessellation_point_size
12GL_OES_tessellation_point_size12GL_OES_tessellation_point_size
13-ERROR: 0:38: 'gl_ClipDistance' : no such field in structure 'gl_in'13+ERROR: 0:38: 'gl_ClipDistance' : no such field in structure
14ERROR: 0:38: 'expression' : left of '[' is not of type array, matrix, or vector 14ERROR: 0:38: 'expression' : left of '[' is not of type array, matrix, or vector
15ERROR: 0:47: 'gl_PointSize' : required extension not requested: Possible extensions include:15ERROR: 0:47: 'gl_PointSize' : required extension not requested: Possible extensions include:
16GL_EXT_tessellation_point_size16GL_EXT_tessellation_point_size
@@ -43,7 +43,7 @@ ERROR: 0:100: 'location' : overlapping use of location 24
43ERROR: 0:103: 'location' : overlapping use of location 2443ERROR: 0:103: 'location' : overlapping use of location 24
44ERROR: 0:105: 'gl_TessLevelOuter' : identifiers starting with "gl_" are reserved 44ERROR: 0:105: 'gl_TessLevelOuter' : identifiers starting with "gl_" are reserved
45ERROR: 0:113: 'sample' : Reserved word. 45ERROR: 0:113: 'sample' : Reserved word.
46-ERROR: 0:119: 'gl_PointSize' : no such field in structure 'gl_in'46+ERROR: 0:119: 'gl_PointSize' : no such field in structure
47ERROR: 0:119: '=' : cannot convert from ' temp block{ in highp 4-component vector of float Position gl_Position}' to ' temp highp float'47ERROR: 0:119: '=' : cannot convert from ' temp block{ in highp 4-component vector of float Position gl_Position}' to ' temp highp float'
48ERROR: 0:127: 'gl_BoundingBoxOES' : undeclared identifier 48ERROR: 0:127: 'gl_BoundingBoxOES' : undeclared identifier
49ERROR: 43 compilation errors. No code generated.49ERROR: 43 compilation errors. No code generated.
@@ -21,7 +21,6 @@ ERROR: 0:105: 'location' : overlapping use of location 12
21ERROR: 0:107: 'input block' : not supported in this stage: vertex21ERROR: 0:107: 'input block' : not supported in this stage: vertex
22ERROR: 0:109: 'gl_PerVertex' : block redeclaration has extra members 22ERROR: 0:109: 'gl_PerVertex' : block redeclaration has extra members
23ERROR: 0:119: 'gl_PointSize' : member of nameless block was not redeclared 23ERROR: 0:119: 'gl_PointSize' : member of nameless block was not redeclared
24-ERROR: 0:119: 'assign' : l-value required "gl_PerVertex" (can't modify void)
25ERROR: 0:119: 'assign' : cannot convert from ' const float' to ' gl_PointSize highp void PointSize'24ERROR: 0:119: 'assign' : cannot convert from ' const float' to ' gl_PointSize highp void PointSize'
26ERROR: 0:122: 'gl_PerVertex' : can only redeclare a built-in block once, and before any use 25ERROR: 0:122: 'gl_PerVertex' : can only redeclare a built-in block once, and before any use
27ERROR: 0:127: 'flat/smooth/noperspective' : cannot use interpolation qualifiers on an interface block 26ERROR: 0:127: 'flat/smooth/noperspective' : cannot use interpolation qualifiers on an interface block
@@ -97,7 +96,7 @@ ERROR: 0:389: 'sample' : Reserved word.
97ERROR: 0:400: 'interpolateAtCentroid' : no matching overloaded function found 96ERROR: 0:400: 'interpolateAtCentroid' : no matching overloaded function found
98ERROR: 0:401: 'interpolateAtSample' : no matching overloaded function found 97ERROR: 0:401: 'interpolateAtSample' : no matching overloaded function found
99ERROR: 0:402: 'interpolateAtOffset' : no matching overloaded function found 98ERROR: 0:402: 'interpolateAtOffset' : no matching overloaded function found
100-ERROR: 94 compilation errors. No code generated.99+ERROR: 93 compilation errors. No code generated.
101 100 
102 101 
103Shader version: 310102Shader version: 310
@@ -330,7 +329,7 @@ ERROR: node is still EOpNull!
3300:164 'sIndex' ( uniform highp int)3290:164 'sIndex' ( uniform highp int)
3310:164 Constant:3300:164 Constant:
3320:164 2 (const int)3310:164 2 (const int)
333-0:165 textureGatherOffset ( global lowp 4-component vector of float, operation at highp)332+0:165 textureGatherOffset ( global lowp 4-component vector of float)
3340:165 direct index ( temp lowp sampler2D)3330:165 direct index ( temp lowp sampler2D)
3350:165 'sArray' ( uniform 4-element array of lowp sampler2D)3340:165 'sArray' ( uniform 4-element array of lowp sampler2D)
3360:165 Constant:3350:165 Constant:
@@ -338,7 +337,7 @@ ERROR: node is still EOpNull!
3380:165 Constant:3370:165 Constant:
3390:165 0.1000003380:165 0.100000
3400:165 0.1000003390:165 0.100000
341-0:165 Convert float to int ( temp highp 2-component vector of int)340+0:165 Convert float to int ( temp lowp 2-component vector of int)
3420:165 'inf' ( in highp 2-component vector of float)3410:165 'inf' ( in highp 2-component vector of float)
3430:166 textureGatherOffsets ( global lowp 4-component vector of float, operation at highp)3420:166 textureGatherOffsets ( global lowp 4-component vector of float, operation at highp)
3440:166 direct index ( temp lowp sampler2D)3430:166 direct index ( temp lowp sampler2D)
@@ -394,7 +393,7 @@ ERROR: node is still EOpNull!
3940:179 'sIndex' ( uniform highp int)3930:179 'sIndex' ( uniform highp int)
3950:179 Constant:3940:179 Constant:
3960:179 2 (const int)3950:179 2 (const int)
397-0:180 textureGatherOffset ( global lowp 4-component vector of float, operation at highp)396+0:180 textureGatherOffset ( global lowp 4-component vector of float)
3980:180 direct index ( temp lowp sampler2D)3970:180 direct index ( temp lowp sampler2D)
3990:180 'sArray' ( uniform 4-element array of lowp sampler2D)3980:180 'sArray' ( uniform 4-element array of lowp sampler2D)
4000:180 Constant:3990:180 Constant:
@@ -402,7 +401,7 @@ ERROR: node is still EOpNull!
4020:180 Constant:4010:180 Constant:
4030:180 0.1000004020:180 0.100000
4040:180 0.1000004030:180 0.100000
405-0:180 Convert float to int ( temp highp 2-component vector of int)404+0:180 Convert float to int ( temp lowp 2-component vector of int)
4060:180 'inf' ( in highp 2-component vector of float)4050:180 'inf' ( in highp 2-component vector of float)
4070:181 textureGatherOffsets ( global lowp 4-component vector of float, operation at highp)4060:181 textureGatherOffsets ( global lowp 4-component vector of float, operation at highp)
4080:181 direct index ( temp lowp sampler2D)4070:181 direct index ( temp lowp sampler2D)
@@ -121,7 +121,7 @@ ERROR: node is still EOpNull!
1210:76 'inf' ( smooth in mediump 2-component vector of float)1210:76 'inf' ( smooth in mediump 2-component vector of float)
1220:76 'ing' ( smooth in mediump 2-component vector of float)1220:76 'ing' ( smooth in mediump 2-component vector of float)
1230:76 'h' ( noContraction temp mediump 2-component vector of float)1230:76 'h' ( noContraction temp mediump 2-component vector of float)
124-0:77 textureGatherOffset ( global lowp 4-component vector of float, operation at mediump)124+0:77 textureGatherOffset ( global lowp 4-component vector of float)
1250:77 direct index ( temp lowp sampler2D)1250:77 direct index ( temp lowp sampler2D)
1260:77 'sArray' ( uniform 4-element array of lowp sampler2D)1260:77 'sArray' ( uniform 4-element array of lowp sampler2D)
1270:77 Constant:1270:77 Constant:
@@ -129,7 +129,7 @@ ERROR: node is still EOpNull!
1290:77 Constant:1290:77 Constant:
1300:77 0.1000001300:77 0.100000
1310:77 0.1000001310:77 0.100000
132-0:77 Convert float to int ( temp mediump 2-component vector of int)132+0:77 Convert float to int ( temp lowp 2-component vector of int)
1330:77 'inf' ( smooth in mediump 2-component vector of float)1330:77 'inf' ( smooth in mediump 2-component vector of float)
1340:78 textureGatherOffsets ( global lowp 4-component vector of float, operation at mediump)1340:78 textureGatherOffsets ( global lowp 4-component vector of float, operation at mediump)
1350:78 direct index ( temp lowp sampler2D)1350:78 direct index ( temp lowp sampler2D)
@@ -6,7 +6,7 @@ ERROR: 0:33: 'EmitStreamVertex' : no matching overloaded function found
6ERROR: 0:34: 'EndStreamPrimitive' : no matching overloaded function found 6ERROR: 0:34: 'EndStreamPrimitive' : no matching overloaded function found
7ERROR: 0:37: 'gl_ClipDistance' : undeclared identifier 7ERROR: 0:37: 'gl_ClipDistance' : undeclared identifier
8ERROR: 0:37: 'gl_ClipDistance' : left of '[' is not of type array, matrix, or vector 8ERROR: 0:37: 'gl_ClipDistance' : left of '[' is not of type array, matrix, or vector
9-ERROR: 0:38: 'gl_ClipDistance' : no such field in structure 'gl_in'9+ERROR: 0:38: 'gl_ClipDistance' : no such field in structure
10ERROR: 0:38: 'expression' : left of '[' is not of type array, matrix, or vector 10ERROR: 0:38: 'expression' : left of '[' is not of type array, matrix, or vector
11ERROR: 0:37: 'assign' : l-value required (can't modify a const)11ERROR: 0:37: 'assign' : l-value required (can't modify a const)
12ERROR: 0:45: 'selecting output stream' : not supported with this profile: es12ERROR: 0:45: 'selecting output stream' : not supported with this profile: es
@@ -6,12 +6,12 @@ ERROR: 0:10: 'patch' : can only use on output in tessellation-control shader
6ERROR: 0:24: 'gl_PointSize' : required extension not requested: Possible extensions include:6ERROR: 0:24: 'gl_PointSize' : required extension not requested: Possible extensions include:
7GL_EXT_tessellation_point_size7GL_EXT_tessellation_point_size
8GL_OES_tessellation_point_size8GL_OES_tessellation_point_size
9-ERROR: 0:25: 'gl_ClipDistance' : no such field in structure 'gl_in'9+ERROR: 0:25: 'gl_ClipDistance' : no such field in structure
10ERROR: 0:25: 'expression' : left of '[' is not of type array, matrix, or vector 10ERROR: 0:25: 'expression' : left of '[' is not of type array, matrix, or vector
11ERROR: 0:32: 'gl_PointSize' : required extension not requested: Possible extensions include:11ERROR: 0:32: 'gl_PointSize' : required extension not requested: Possible extensions include:
12GL_EXT_tessellation_point_size12GL_EXT_tessellation_point_size
13GL_OES_tessellation_point_size13GL_OES_tessellation_point_size
14-ERROR: 0:33: 'gl_ClipDistance' : no such field in structure 'gl_out'14+ERROR: 0:33: 'gl_ClipDistance' : no such field in structure
15ERROR: 0:33: 'expression' : left of '[' is not of type array, matrix, or vector 15ERROR: 0:33: 'expression' : left of '[' is not of type array, matrix, or vector
16ERROR: 0:33: 'assign' : l-value required (can't modify a const)16ERROR: 0:33: 'assign' : l-value required (can't modify a const)
17ERROR: 0:39: '' : tessellation control barrier() cannot be placed within flow control 17ERROR: 0:39: '' : tessellation control barrier() cannot be placed within flow control
@@ -10,7 +10,7 @@ ERROR: 0:22: 'barrier' : no matching overloaded function found
10ERROR: 0:33: 'gl_PointSize' : required extension not requested: Possible extensions include:10ERROR: 0:33: 'gl_PointSize' : required extension not requested: Possible extensions include:
11GL_EXT_tessellation_point_size11GL_EXT_tessellation_point_size
12GL_OES_tessellation_point_size12GL_OES_tessellation_point_size
13-ERROR: 0:34: 'gl_ClipDistance' : no such field in structure 'gl_in'13+ERROR: 0:34: 'gl_ClipDistance' : no such field in structure
14ERROR: 0:34: 'expression' : left of '[' is not of type array, matrix, or vector 14ERROR: 0:34: 'expression' : left of '[' is not of type array, matrix, or vector
15ERROR: 0:43: 'gl_PointSize' : required extension not requested: Possible extensions include:15ERROR: 0:43: 'gl_PointSize' : required extension not requested: Possible extensions include:
16GL_EXT_tessellation_point_size16GL_EXT_tessellation_point_size
@@ -4,7 +4,6 @@ ERROR: 0:14: 'location' : overlapping use of location 12
4ERROR: 0:16: 'input block' : not supported in this stage: vertex4ERROR: 0:16: 'input block' : not supported in this stage: vertex
5ERROR: 0:18: 'gl_PerVertex' : block redeclaration has extra members 5ERROR: 0:18: 'gl_PerVertex' : block redeclaration has extra members
6ERROR: 0:28: 'gl_PointSize' : member of nameless block was not redeclared 6ERROR: 0:28: 'gl_PointSize' : member of nameless block was not redeclared
7-ERROR: 0:28: 'assign' : l-value required "gl_PerVertex" (can't modify void)
8ERROR: 0:28: 'assign' : cannot convert from ' const float' to ' gl_PointSize highp void PointSize'7ERROR: 0:28: 'assign' : cannot convert from ' const float' to ' gl_PointSize highp void PointSize'
9ERROR: 0:31: 'gl_PerVertex' : can only redeclare a built-in block once, and before any use 8ERROR: 0:31: 'gl_PerVertex' : can only redeclare a built-in block once, and before any use
10ERROR: 0:36: 'flat/smooth/noperspective' : cannot use interpolation qualifiers on an interface block 9ERROR: 0:36: 'flat/smooth/noperspective' : cannot use interpolation qualifiers on an interface block
@@ -34,7 +33,7 @@ ERROR: 0:211: '=' : cannot convert from ' const float' to ' temp highp 3-compon
34ERROR: 0:252: 'interpolateAtCentroid' : no matching overloaded function found 33ERROR: 0:252: 'interpolateAtCentroid' : no matching overloaded function found
35ERROR: 0:253: 'interpolateAtSample' : no matching overloaded function found 34ERROR: 0:253: 'interpolateAtSample' : no matching overloaded function found
36ERROR: 0:254: 'interpolateAtOffset' : no matching overloaded function found 35ERROR: 0:254: 'interpolateAtOffset' : no matching overloaded function found
37-ERROR: 35 compilation errors. No code generated.36+ERROR: 34 compilation errors. No code generated.
38 37 
39 38 
40Shader version: 32039Shader version: 320
@@ -99,7 +98,7 @@ ERROR: node is still EOpNull!
990:70 'sIndex' ( uniform highp int)980:70 'sIndex' ( uniform highp int)
1000:70 Constant:990:70 Constant:
1010:70 2 (const int)1000:70 2 (const int)
102-0:71 textureGatherOffset ( global lowp 4-component vector of float, operation at highp)101+0:71 textureGatherOffset ( global lowp 4-component vector of float)
1030:71 direct index ( temp lowp sampler2D)1020:71 direct index ( temp lowp sampler2D)
1040:71 'sArray' ( uniform 4-element array of lowp sampler2D)1030:71 'sArray' ( uniform 4-element array of lowp sampler2D)
1050:71 Constant:1040:71 Constant:
@@ -107,7 +106,7 @@ ERROR: node is still EOpNull!
1070:71 Constant:1060:71 Constant:
1080:71 0.1000001070:71 0.100000
1090:71 0.1000001080:71 0.100000
110-0:71 Convert float to int ( temp highp 2-component vector of int)109+0:71 Convert float to int ( temp lowp 2-component vector of int)
1110:71 'inf' ( in highp 2-component vector of float)1100:71 'inf' ( in highp 2-component vector of float)
1120:72 textureGatherOffsets ( global lowp 4-component vector of float, operation at highp)1110:72 textureGatherOffsets ( global lowp 4-component vector of float, operation at highp)
1130:72 direct index ( temp lowp sampler2D)1120:72 direct index ( temp lowp sampler2D)
@@ -4,7 +4,7 @@ ERROR: 0:22: 'textureGatherOffset(...)' : must be a compile-time constant: compo
4ERROR: 0:23: 'textureGatherOffset(...)' : must be 0, 1, 2, or 3: component argument4ERROR: 0:23: 'textureGatherOffset(...)' : must be 0, 1, 2, or 3: component argument
5ERROR: 0:30: 'location qualifier on input' : not supported for this version or the enabled extensions 5ERROR: 0:30: 'location qualifier on input' : not supported for this version or the enabled extensions
6ERROR: 0:38: 'location qualifier on uniform or buffer' : not supported for this version or the enabled extensions 6ERROR: 0:38: 'location qualifier on uniform or buffer' : not supported for this version or the enabled extensions
7-ERROR: 0:40: 'gl_Color' : identifiers starting with "gl_" are reserved 7+ERROR: 0:40: 'redeclaration' : cannot apply layout qualifier to gl_Color
8ERROR: 0:41: 'redeclaration' : cannot change qualification of gl_ClipDistance8ERROR: 0:41: 'redeclaration' : cannot change qualification of gl_ClipDistance
9ERROR: 0:43: 'gl_FragCoord' : cannot redeclare after use 9ERROR: 0:43: 'gl_FragCoord' : cannot redeclare after use
10ERROR: 0:51: 'texel offset' : argument must be compile-time constant 10ERROR: 0:51: 'texel offset' : argument must be compile-time constant
@@ -34,7 +34,7 @@ ERROR: 0:183: 'assign' : cannot convert from ' const float' to ' temp 2-compone
34ERROR: 0:184: 'textureQueryLod' : no matching overloaded function found 34ERROR: 0:184: 'textureQueryLod' : no matching overloaded function found
35ERROR: 0:184: 'assign' : cannot convert from ' const float' to ' temp 2-component vector of float'35ERROR: 0:184: 'assign' : cannot convert from ' const float' to ' temp 2-component vector of float'
36ERROR: 0:197: 'subroutine' : feature not yet implemented 36ERROR: 0:197: 'subroutine' : feature not yet implemented
37-ERROR: 0:197: '' : default qualifier requires 'uniform', 'buffer', 'in', 'out' or 'shared' storage qualification 37+ERROR: 0:197: '' : default qualifier requires 'uniform', 'buffer', 'in', or 'out' storage qualification
38ERROR: 0:198: 'subroutine' : feature not yet implemented 38ERROR: 0:198: 'subroutine' : feature not yet implemented
39ERROR: 0:199: 'subroutine' : feature not yet implemented 39ERROR: 0:199: 'subroutine' : feature not yet implemented
40ERROR: 0:201: '' : syntax error, unexpected PRECISE, expecting IDENTIFIER40ERROR: 0:201: '' : syntax error, unexpected PRECISE, expecting IDENTIFIER
@@ -516,7 +516,7 @@ ERROR: node is still EOpNull!
5160:? 'vl' (layout( location=4) smooth in 4-component vector of float)5160:? 'vl' (layout( location=4) smooth in 4-component vector of float)
5170:? 'vl2' (layout( location=6) smooth in 4-component vector of float)5170:? 'vl2' (layout( location=6) smooth in 4-component vector of float)
5180:? 'uv3' (layout( location=3) uniform 3-component vector of float)5180:? 'uv3' (layout( location=3) uniform 3-component vector of float)
519-0:? 'gl_Color' (layout( location=5) smooth in 4-component vector of float)519+0:? 'anon@0' ( in block{ in float FogFragCoord gl_FogFragCoord, in unsized 1-element array of 4-component vector of float TexCoord gl_TexCoord, smooth in 4-component vector of float Color gl_Color, in 4-component vector of float SecondaryColor gl_SecondaryColor})
5200:? 'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord)5200:? 'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord)
5210:? 'u2drs' ( uniform sampler2DRectShadow)5210:? 'u2drs' ( uniform sampler2DRectShadow)
5220:? 'patchIn' ( smooth patch in 4-component vector of float)5220:? 'patchIn' ( smooth patch in 4-component vector of float)
@@ -691,7 +691,7 @@ ERROR: node is still EOpNull!
6910:? 'vl' (layout( location=4) smooth in 4-component vector of float)6910:? 'vl' (layout( location=4) smooth in 4-component vector of float)
6920:? 'vl2' (layout( location=6) smooth in 4-component vector of float)6920:? 'vl2' (layout( location=6) smooth in 4-component vector of float)
6930:? 'uv3' (layout( location=3) uniform 3-component vector of float)6930:? 'uv3' (layout( location=3) uniform 3-component vector of float)
694-0:? 'gl_Color' (layout( location=5) smooth in 4-component vector of float)694+0:? 'anon@0' ( in block{ in float FogFragCoord gl_FogFragCoord, in 1-element array of 4-component vector of float TexCoord gl_TexCoord, smooth in 4-component vector of float Color gl_Color, in 4-component vector of float SecondaryColor gl_SecondaryColor})
6950:? 'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord)6950:? 'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord)
6960:? 'u2drs' ( uniform sampler2DRectShadow)6960:? 'u2drs' ( uniform sampler2DRectShadow)
6970:? 'patchIn' ( smooth patch in 4-component vector of float)6970:? 'patchIn' ( smooth patch in 4-component vector of float)
@@ -2,13 +2,12 @@
2ERROR: 0:8: 'myIn' : cannot redeclare a built-in block with a user name 2ERROR: 0:8: 'myIn' : cannot redeclare a built-in block with a user name
3ERROR: 0:12: 'gl_myIn' : no declaration found for redeclaration 3ERROR: 0:12: 'gl_myIn' : no declaration found for redeclaration
4ERROR: 0:20: 'gl_PerVertex' : can only redeclare a built-in block once, and before any use 4ERROR: 0:20: 'gl_PerVertex' : can only redeclare a built-in block once, and before any use
5-ERROR: 0:32: 'gl_Position' : no such field in structure 'gl_in'5+ERROR: 0:32: 'gl_Position' : no such field in structure
6ERROR: 0:32: '=' : cannot convert from ' temp block{ in float PointSize gl_PointSize}' to ' temp 4-component vector of float'6ERROR: 0:32: '=' : cannot convert from ' temp block{ in float PointSize gl_PointSize}' to ' temp 4-component vector of float'
7ERROR: 0:33: 'gl_Position' : member of nameless block was not redeclared 7ERROR: 0:33: 'gl_Position' : member of nameless block was not redeclared
8-ERROR: 0:33: 'assign' : l-value required "gl_PerVertex" (can't modify void)
9ERROR: 0:33: 'assign' : cannot convert from ' const 4-component vector of float' to 'layout( stream=0) gl_Position void Position'8ERROR: 0:33: 'assign' : cannot convert from ' const 4-component vector of float' to 'layout( stream=0) gl_Position void Position'
10WARNING: 0:38: 'return' : type conversion on return values was not explicitly allowed until version 420 9WARNING: 0:38: 'return' : type conversion on return values was not explicitly allowed until version 420
11-ERROR: 8 compilation errors. No code generated.10+ERROR: 7 compilation errors. No code generated.
12 11 
13 12 
14Shader version: 41013Shader version: 410
@@ -2,7 +2,7 @@
2ERROR: 0:7: 'vertices' : inconsistent output number of vertices for array size of gl_out2ERROR: 0:7: 'vertices' : inconsistent output number of vertices for array size of gl_out
3ERROR: 0:11: 'vertices' : inconsistent output number of vertices for array size of a3ERROR: 0:11: 'vertices' : inconsistent output number of vertices for array size of a
4ERROR: 0:12: 'vertices' : inconsistent output number of vertices for array size of outb4ERROR: 0:12: 'vertices' : inconsistent output number of vertices for array size of outb
5-ERROR: 0:26: 'gl_PointSize' : no such field in structure 'gl_out'5+ERROR: 0:26: 'gl_PointSize' : no such field in structure
6ERROR: 0:26: 'assign' : cannot convert from ' temp float' to ' temp block{ out 4-component vector of float Position gl_Position}'6ERROR: 0:26: 'assign' : cannot convert from ' temp float' to ' temp block{ out 4-component vector of float Position gl_Position}'
7ERROR: 0:29: 'out' : type must be an array: outf7ERROR: 0:29: 'out' : type must be an array: outf
8ERROR: 0:43: 'vertices' : must be greater than 0 8ERROR: 0:43: 'vertices' : must be greater than 0
@@ -306,7 +306,6 @@ ERROR: node is still EOpNull!
3060:? 'samp1D' ( uniform sampler1D)3060:? 'samp1D' ( uniform sampler1D)
3070:? 'samp1Ds' ( uniform sampler1DShadow)3070:? 'samp1Ds' ( uniform sampler1DShadow)
3080:? 'badArray' (layout( binding=0) writeonly uniform unsized 1-element array of image1D)3080:? 'badArray' (layout( binding=0) writeonly uniform unsized 1-element array of image1D)
309-0:? 'u_sampler0' (layout( binding=74) uniform 6-element array of sampler2D)
3100:? 'gl_VertexID' ( gl_VertexId int VertexId)3090:? 'gl_VertexID' ( gl_VertexId int VertexId)
3110:? 'gl_InstanceID' ( gl_InstanceId int InstanceId)3100:? 'gl_InstanceID' ( gl_InstanceId int InstanceId)
312 311 
@@ -389,7 +388,6 @@ ERROR: node is still EOpNull!
3890:? 'samp1D' ( uniform sampler1D)3880:? 'samp1D' ( uniform sampler1D)
3900:? 'samp1Ds' ( uniform sampler1DShadow)3890:? 'samp1Ds' ( uniform sampler1DShadow)
3910:? 'badArray' (layout( binding=0) writeonly uniform 1-element array of image1D)3900:? 'badArray' (layout( binding=0) writeonly uniform 1-element array of image1D)
392-0:? 'u_sampler0' (layout( binding=74) uniform 6-element array of sampler2D)
3930:? 'gl_VertexID' ( gl_VertexId int VertexId)3910:? 'gl_VertexID' ( gl_VertexId int VertexId)
3940:? 'gl_InstanceID' ( gl_InstanceId int InstanceId)3920:? 'gl_InstanceID' ( gl_InstanceId int InstanceId)
395 393 
@@ -5,9 +5,9 @@ ERROR: 0:43: 'in' : global storage input qualifier cannot be used in a compute s
5ERROR: 0:43: 'location qualifier on input' : not supported in this stage: compute5ERROR: 0:43: 'location qualifier on input' : not supported in this stage: compute
6ERROR: 0:44: 'in' : global storage input qualifier cannot be used in a compute shader 6ERROR: 0:44: 'in' : global storage input qualifier cannot be used in a compute shader
7ERROR: 0:45: 'out' : global storage output qualifier cannot be used in a compute shader 7ERROR: 0:45: 'out' : global storage output qualifier cannot be used in a compute shader
8-ERROR: 0:48: 'shared block' : not supported for this version or the enabled extensions 8+ERROR: 0:48: 'shared' : cannot apply layout qualifiers to a shared variable
9ERROR: 0:48: 'location' : can only apply to uniform, buffer, in, or out storage qualifiers 9ERROR: 0:48: 'location' : can only apply to uniform, buffer, in, or out storage qualifiers
10-ERROR: 0:49: 'shared' : initializer can only be a null initializer ('{}') 10+ERROR: 0:49: 'shared' : cannot initialize this type of qualifier
11ERROR: 0:52: 'local_size' : cannot change previously set size 11ERROR: 0:52: 'local_size' : cannot change previously set size
12ERROR: 0:54: 'local_size' : can only apply to 'in' 12ERROR: 0:54: 'local_size' : can only apply to 'in'
13ERROR: 0:54: 'local_size' : can only apply to 'in' 13ERROR: 0:54: 'local_size' : can only apply to 'in'
@@ -52,11 +52,6 @@ ERROR: node is still EOpNull!
520:39 10 (const int)520:39 10 (const int)
530:39 true case530:39 true case
540:40 Barrier ( global void)540:40 Barrier ( global void)
55-0:49 Sequence
56-0:49 move second child to first child ( temp float)
57-0:49 'fs' ( shared float)
58-0:49 Constant:
59-0:49 4.200000
600:66 Function Definition: foo( ( global void)550:66 Function Definition: foo( ( global void)
610:66 Function Parameters: 560:66 Function Parameters:
620:68 Sequence570:68 Sequence
@@ -189,11 +184,6 @@ ERROR: node is still EOpNull!
1890:39 10 (const int)1840:39 10 (const int)
1900:39 true case1850:39 true case
1910:40 Barrier ( global void)1860:40 Barrier ( global void)
192-0:49 Sequence
193-0:49 move second child to first child ( temp float)
194-0:49 'fs' ( shared float)
195-0:49 Constant:
196-0:49 4.200000
1970:? Linker Objects1870:? Linker Objects
1980:? 'gl_WorkGroupSize' ( const 3-component vector of uint WorkGroupSize)1880:? 'gl_WorkGroupSize' ( const 3-component vector of uint WorkGroupSize)
1990:? 2 (const uint)1890:? 2 (const uint)
@@ -63,7 +63,7 @@ ERROR: node is still EOpNull!
630:47 3.000000630:47 3.000000
640:49 move second child to first child ( temp 4-component vector of float)640:49 move second child to first child ( temp 4-component vector of float)
650:49 gl_Position: direct index for structure ( invariant gl_Position 4-component vector of float Position)650:49 gl_Position: direct index for structure ( invariant gl_Position 4-component vector of float Position)
66-0:49 'anon@0' ( out block{ invariant gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out unsized 1-element array of float ClipDistance gl_ClipDistance})66+0:49 'anon@0' ( out block{ invariant gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out unsized 1-element array of float ClipDistance gl_ClipDistance, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out unsized 1-element array of 4-component vector of float TexCoord gl_TexCoord, out float FogFragCoord gl_FogFragCoord})
670:49 Constant:670:49 Constant:
680:49 0 (const uint)680:49 0 (const uint)
690:49 Construct vec4 ( temp 4-component vector of float)690:49 Construct vec4 ( temp 4-component vector of float)
@@ -168,7 +168,7 @@ ERROR: node is still EOpNull!
1680:47 3.0000001680:47 3.000000
1690:49 move second child to first child ( temp 4-component vector of float)1690:49 move second child to first child ( temp 4-component vector of float)
1700:49 gl_Position: direct index for structure ( invariant gl_Position 4-component vector of float Position)1700:49 gl_Position: direct index for structure ( invariant gl_Position 4-component vector of float Position)
171-0:49 'anon@0' ( out block{ invariant gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance})171+0:49 'anon@0' ( out block{ invariant gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out 1-element array of 4-component vector of float TexCoord gl_TexCoord, out float FogFragCoord gl_FogFragCoord})
1720:49 Constant:1720:49 Constant:
1730:49 0 (const uint)1730:49 0 (const uint)
1740:49 Construct vec4 ( temp 4-component vector of float)1740:49 Construct vec4 ( temp 4-component vector of float)
@@ -118,7 +118,6 @@ ERROR: node is still EOpNull!
1180:? 'aconst' ( global 4-element array of int)1180:? 'aconst' ( global 4-element array of int)
1190:? 'bconst' ( global 64-element array of int)1190:? 'bconst' ( global 64-element array of int)
1200:? 'sampInArray' ( smooth sample in 4-element array of 3-component vector of float)1200:? 'sampInArray' ( smooth sample in 4-element array of 3-component vector of float)
121-0:? 'anon@0' (layout( row_major std140) uniform block{layout( row_major std140 offset=0) uniform 128-element array of structure{ global 3-component vector of float vPositionWs} g_pointLightData})
122 121 
123 122 
124Linked fragment stage:123Linked fragment stage:
@@ -163,5 +162,4 @@ ERROR: node is still EOpNull!
1630:? 'aconst' ( global 4-element array of int)1620:? 'aconst' ( global 4-element array of int)
1640:? 'bconst' ( global 64-element array of int)1630:? 'bconst' ( global 64-element array of int)
1650:? 'sampInArray' ( smooth sample in 4-element array of 3-component vector of float)1640:? 'sampInArray' ( smooth sample in 4-element array of 3-component vector of float)
166-0:? 'anon@0' (layout( row_major std140) uniform block{layout( row_major std140 offset=0) uniform 128-element array of structure{ global 3-component vector of float vPositionWs} g_pointLightData})
167 165 
@@ -1,14 +1,10 @@
1450.frag1450.frag
2-ERROR: 0:70: 'offsets' : argument must be compile-time constant 2+ERROR: 0:63: 'location' : cannot use in a block array where new locations are needed for each block element
3-ERROR: 0:71: 'offsets' : argument must be compile-time constant 3+ERROR: 0:68: 'early_fragment_tests' : can only apply to a standalone qualifier
4-ERROR: 0:72: 'offsets' : argument must be compile-time constant 4+ERROR: 2 compilation errors. No code generated.
5-ERROR: 0:88: 'location' : cannot use in a block array where new locations are needed for each block element
6-ERROR: 0:93: 'early_fragment_tests' : can only apply to a standalone qualifier
7-ERROR: 5 compilation errors. No code generated.
8 5 
9 6 
10Shader version: 4507Shader version: 450
11-Requested GL_ARB_sparse_texture2
12ERROR: node is still EOpNull!8ERROR: node is still EOpNull!
130:8 Function Definition: main( ( global void)90:8 Function Definition: main( ( global void)
140:8 Function Parameters: 100:8 Function Parameters:
@@ -137,107 +133,26 @@ ERROR: node is still EOpNull!
1370:48 2 (const int)1330:48 2 (const int)
1380:48 Constant:1340:48 Constant:
1390:48 4.5000001350:48 4.500000
140-0:61 Function Definition: testOffsets( ( global void)136+0:53 Function Definition: cull(i1; ( global float)
141-0:61 Function Parameters: 137+0:53 Function Parameters:
142-0:63 Sequence138+0:53 'i' ( in int)
143-0:63 Sequence139+0:55 Sequence
144-0:63 move second child to first child ( temp 4-component vector of float)140+0:55 Branch: Return with expression
145-0:63 'texel' ( temp 4-component vector of float)141+0:55 Test condition and select ( temp float)
146-0:63 Constant:142+0:55 Condition
147-0:63 0.000000143+0:55 Compare Greater Than or Equal ( temp bool)
148-0:63 0.000000144+0:55 'i' ( in int)
149-0:63 0.000000145+0:55 Constant:
150-0:63 0.000000146+0:55 6 (const int)
151-0:64 Sequence147+0:55 true case
152-0:64 move second child to first child ( temp 4-component vector of int)148+0:55 direct index ( smooth temp float CullDistance)
153-0:64 'itexel' ( temp 4-component vector of int)149+0:55 'gl_CullDistance' ( smooth in 6-element array of float CullDistance)
154-0:64 Constant:150+0:55 Constant:
155-0:64 0 (const int)151+0:55 5 (const int)
156-0:64 0 (const int)152+0:55 false case
157-0:64 0 (const int)153+0:55 indirect index ( smooth temp float CullDistance)
158-0:64 0 (const int)154+0:55 'gl_CullDistance' ( smooth in 6-element array of float CullDistance)
159-0:66 sparseTextureGatherOffsets ( global int)155+0:55 'i' ( in int)
160-0:66 's2D' ( uniform sampler2D)
161-0:66 'c2' ( smooth in 2-component vector of float)
162-0:66 Constant:
163-0:66 1 (const int)
164-0:66 2 (const int)
165-0:66 3 (const int)
166-0:66 4 (const int)
167-0:66 15 (const int)
168-0:66 16 (const int)
169-0:66 -2 (const int)
170-0:66 0 (const int)
171-0:66 'texel' ( temp 4-component vector of float)
172-0:67 sparseTextureGatherOffsets ( global int)
173-0:67 'is2DArray' ( uniform isampler2DArray)
174-0:67 'c3' ( smooth in 3-component vector of float)
175-0:67 Constant:
176-0:67 1 (const int)
177-0:67 2 (const int)
178-0:67 3 (const int)
179-0:67 4 (const int)
180-0:67 15 (const int)
181-0:67 16 (const int)
182-0:67 -2 (const int)
183-0:67 0 (const int)
184-0:67 'itexel' ( temp 4-component vector of int)
185-0:67 Constant:
186-0:67 2 (const int)
187-0:68 sparseTextureGatherOffsets ( global int)
188-0:68 's2DRectShadow' ( uniform sampler2DRectShadow)
189-0:68 'c2' ( smooth in 2-component vector of float)
190-0:68 Constant:
191-0:68 2.000000
192-0:68 Constant:
193-0:68 1 (const int)
194-0:68 2 (const int)
195-0:68 3 (const int)
196-0:68 4 (const int)
197-0:68 15 (const int)
198-0:68 16 (const int)
199-0:68 -2 (const int)
200-0:68 0 (const int)
201-0:68 'texel' ( temp 4-component vector of float)
202-0:70 sparseTextureGatherOffsets ( global int)
203-0:70 's2D' ( uniform sampler2D)
204-0:70 'c2' ( smooth in 2-component vector of float)
205-0:70 'offsets' ( flat in 4-element array of 2-component vector of int)
206-0:70 'texel' ( temp 4-component vector of float)
207-0:71 sparseTextureGatherOffsets ( global int)
208-0:71 'is2DArray' ( uniform isampler2DArray)
209-0:71 'c3' ( smooth in 3-component vector of float)
210-0:71 'offsets' ( flat in 4-element array of 2-component vector of int)
211-0:71 'itexel' ( temp 4-component vector of int)
212-0:71 Constant:
213-0:71 2 (const int)
214-0:72 sparseTextureGatherOffsets ( global int)
215-0:72 's2DRectShadow' ( uniform sampler2DRectShadow)
216-0:72 'c2' ( smooth in 2-component vector of float)
217-0:72 Constant:
218-0:72 2.000000
219-0:72 'offsets' ( flat in 4-element array of 2-component vector of int)
220-0:72 'texel' ( temp 4-component vector of float)
221-0:78 Function Definition: cull(i1; ( global float)
222-0:78 Function Parameters:
223-0:78 'i' ( in int)
224-0:80 Sequence
225-0:80 Branch: Return with expression
226-0:80 Test condition and select ( temp float)
227-0:80 Condition
228-0:80 Compare Greater Than or Equal ( temp bool)
229-0:80 'i' ( in int)
230-0:80 Constant:
231-0:80 6 (const int)
232-0:80 true case
233-0:80 direct index ( smooth temp float CullDistance)
234-0:80 'gl_CullDistance' ( smooth in 6-element array of float CullDistance)
235-0:80 Constant:
236-0:80 5 (const int)
237-0:80 false case
238-0:80 indirect index ( smooth temp float CullDistance)
239-0:80 'gl_CullDistance' ( smooth in 6-element array of float CullDistance)
240-0:80 'i' ( in int)
2410:? Linker Objects1560:? Linker Objects
2420:? 'in1' ( smooth in float)1570:? 'in1' ( smooth in float)
2430:? 'in2' ( smooth in 2-component vector of float)1580:? 'in2' ( smooth in 2-component vector of float)
@@ -248,12 +163,6 @@ ERROR: node is still EOpNull!
2480:? 'us2dmsa' ( uniform usampler2DMSArray)1630:? 'us2dmsa' ( uniform usampler2DMSArray)
2490:? 'ii2dms' (layout( rgba32i) uniform iimage2DMS)1640:? 'ii2dms' (layout( rgba32i) uniform iimage2DMS)
2500:? 'i2dmsa' (layout( rgba32f) uniform image2DMSArray)1650:? 'i2dmsa' (layout( rgba32f) uniform image2DMSArray)
251-0:? 's2D' ( uniform sampler2D)
252-0:? 'is2DArray' ( uniform isampler2DArray)
253-0:? 's2DRectShadow' ( uniform sampler2DRectShadow)
254-0:? 'offsets' ( flat in 4-element array of 2-component vector of int)
255-0:? 'c2' ( smooth in 2-component vector of float)
256-0:? 'c3' ( smooth in 3-component vector of float)
2570:? 'bInst1' ( in block{layout( location=6) in float f, layout( location=7) in float g, layout( location=8) in 4X4 matrix of float m})1660:? 'bInst1' ( in block{layout( location=6) in float f, layout( location=7) in float g, layout( location=8) in 4X4 matrix of float m})
2580:? 'bInst2' ( in 3-element array of block{layout( location=12) in float f, layout( location=13) in float g})1670:? 'bInst2' ( in 3-element array of block{layout( location=12) in float f, layout( location=13) in float g})
2590:? 'f' ( smooth in float)1680:? 'f' ( smooth in float)
@@ -263,7 +172,6 @@ Linked fragment stage:
263 172 
264 173 
265Shader version: 450174Shader version: 450
266-Requested GL_ARB_sparse_texture2
267ERROR: node is still EOpNull!175ERROR: node is still EOpNull!
2680:8 Function Definition: main( ( global void)1760:8 Function Definition: main( ( global void)
2690:8 Function Parameters: 1770:8 Function Parameters:
@@ -371,12 +279,6 @@ ERROR: node is still EOpNull!
3710:? 'us2dmsa' ( uniform usampler2DMSArray)2790:? 'us2dmsa' ( uniform usampler2DMSArray)
3720:? 'ii2dms' (layout( rgba32i) uniform iimage2DMS)2800:? 'ii2dms' (layout( rgba32i) uniform iimage2DMS)
3730:? 'i2dmsa' (layout( rgba32f) uniform image2DMSArray)2810:? 'i2dmsa' (layout( rgba32f) uniform image2DMSArray)
374-0:? 's2D' ( uniform sampler2D)
375-0:? 'is2DArray' ( uniform isampler2DArray)
376-0:? 's2DRectShadow' ( uniform sampler2DRectShadow)
377-0:? 'offsets' ( flat in 4-element array of 2-component vector of int)
378-0:? 'c2' ( smooth in 2-component vector of float)
379-0:? 'c3' ( smooth in 3-component vector of float)
3800:? 'bInst1' ( in block{layout( location=6) in float f, layout( location=7) in float g, layout( location=8) in 4X4 matrix of float m})2820:? 'bInst1' ( in block{layout( location=6) in float f, layout( location=7) in float g, layout( location=8) in 4X4 matrix of float m})
3810:? 'bInst2' ( in 3-element array of block{layout( location=12) in float f, layout( location=13) in float g})2830:? 'bInst2' ( in 3-element array of block{layout( location=12) in float f, layout( location=13) in float g})
3820:? 'f' ( smooth in float)2840:? 'f' ( smooth in float)
@@ -1,6 +1,6 @@
1450.geom1450.geom
2ERROR: 0:15: '[' : array index out of range '3'2ERROR: 0:15: '[' : array index out of range '3'
3-ERROR: 0:15: 'gl_Position' : no such field in structure 'gl_in'3+ERROR: 0:15: 'gl_Position' : no such field in structure
4ERROR: 0:19: 'points' : can only apply to a standalone qualifier 4ERROR: 0:19: 'points' : can only apply to a standalone qualifier
5ERROR: 3 compilation errors. No code generated.5ERROR: 3 compilation errors. No code generated.
6 6 
@@ -34,7 +34,7 @@ ERROR: node is still EOpNull!
340:9 gl_CullDistance: direct index for structure ( out 3-element array of float CullDistance)340:9 gl_CullDistance: direct index for structure ( out 3-element array of float CullDistance)
350:9 'anon@0' ( out block{ out 3-element array of float CullDistance gl_CullDistance})350:9 'anon@0' ( out block{ out 3-element array of float CullDistance gl_CullDistance})
360:9 Constant:360:9 Constant:
37-0:9 3 (const uint)37+0:9 10 (const uint)
380:9 Constant:380:9 Constant:
390:9 2 (const int)390:9 2 (const int)
400:9 Constant:400:9 Constant:
@@ -98,7 +98,7 @@ ERROR: node is still EOpNull!
980:9 gl_CullDistance: direct index for structure ( out 3-element array of float CullDistance)980:9 gl_CullDistance: direct index for structure ( out 3-element array of float CullDistance)
990:9 'anon@0' ( out block{ out 3-element array of float CullDistance gl_CullDistance})990:9 'anon@0' ( out block{ out 3-element array of float CullDistance gl_CullDistance})
1000:9 Constant:1000:9 Constant:
101-0:9 3 (const uint)101+0:9 10 (const uint)
1020:9 Constant:1020:9 Constant:
1030:9 2 (const int)1030:9 2 (const int)
1040:9 Constant:1040:9 Constant:
@@ -1,206 +0,0 @@
1-BestMatchFunction.vert
2-WARNING: 0:2: '#extension' : extension is only partially supported: GL_ARB_gpu_shader5
3- 
4-Shader version: 150
5-Requested GL_ARB_gpu_shader5
6-0:? Sequence
7-0:7 Function Definition: f(vf4;vf4; ( global 4-component vector of float)
8-0:7 Function Parameters:
9-0:7 'a' ( in 4-component vector of float)
10-0:7 'b' ( in 4-component vector of float)
11-0:7 Sequence
12-0:7 Branch: Return with expression
13-0:7 component-wise multiply ( temp 4-component vector of float)
14-0:7 'a' ( in 4-component vector of float)
15-0:7 'b' ( in 4-component vector of float)
16-0:8 Function Definition: f(vu4;vu4; ( global 4-component vector of float)
17-0:8 Function Parameters:
18-0:8 'a' ( in 4-component vector of uint)
19-0:8 'b' ( in 4-component vector of uint)
20-0:8 Sequence
21-0:8 Branch: Return with expression
22-0:8 Convert uint to float ( temp 4-component vector of float)
23-0:8 subtract ( temp 4-component vector of uint)
24-0:8 'a' ( in 4-component vector of uint)
25-0:8 'b' ( in 4-component vector of uint)
26-0:10 Function Definition: main( ( global void)
27-0:10 Function Parameters:
28-0:12 Sequence
29-0:12 move second child to first child ( temp 4-component vector of float)
30-0:12 'result' ( smooth out 4-component vector of float)
31-0:12 Function Call: f(vu4;vu4; ( global 4-component vector of float)
32-0:12 Convert int to uint ( temp 4-component vector of uint)
33-0:12 'u1' ( uniform 4-component vector of int)
34-0:12 'u2' ( uniform 4-component vector of uint)
35-0:13 switch
36-0:13 condition
37-0:13 'gl_VertexID' ( gl_VertexId int VertexId)
38-0:13 body
39-0:13 Sequence
40-0:15 case: with expression
41-0:15 Constant:
42-0:15 0 (const int)
43-0:? Sequence
44-0:15 move second child to first child ( temp 4-component vector of float)
45-0:15 gl_Position: direct index for structure ( gl_Position 4-component vector of float Position)
46-0:15 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out unsized 1-element array of float ClipDistance gl_ClipDistance})
47-0:15 Constant:
48-0:15 0 (const uint)
49-0:15 Constant:
50-0:15 -1.000000
51-0:15 1.000000
52-0:15 0.000000
53-0:15 1.000000
54-0:15 Branch: Break
55-0:16 case: with expression
56-0:16 Constant:
57-0:16 1 (const int)
58-0:? Sequence
59-0:16 move second child to first child ( temp 4-component vector of float)
60-0:16 gl_Position: direct index for structure ( gl_Position 4-component vector of float Position)
61-0:16 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out unsized 1-element array of float ClipDistance gl_ClipDistance})
62-0:16 Constant:
63-0:16 0 (const uint)
64-0:16 Constant:
65-0:16 1.000000
66-0:16 1.000000
67-0:16 0.000000
68-0:16 1.000000
69-0:16 Branch: Break
70-0:17 case: with expression
71-0:17 Constant:
72-0:17 2 (const int)
73-0:? Sequence
74-0:17 move second child to first child ( temp 4-component vector of float)
75-0:17 gl_Position: direct index for structure ( gl_Position 4-component vector of float Position)
76-0:17 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out unsized 1-element array of float ClipDistance gl_ClipDistance})
77-0:17 Constant:
78-0:17 0 (const uint)
79-0:17 Constant:
80-0:17 -1.000000
81-0:17 -1.000000
82-0:17 0.000000
83-0:17 1.000000
84-0:17 Branch: Break
85-0:18 case: with expression
86-0:18 Constant:
87-0:18 3 (const int)
88-0:? Sequence
89-0:18 move second child to first child ( temp 4-component vector of float)
90-0:18 gl_Position: direct index for structure ( gl_Position 4-component vector of float Position)
91-0:18 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out unsized 1-element array of float ClipDistance gl_ClipDistance})
92-0:18 Constant:
93-0:18 0 (const uint)
94-0:18 Constant:
95-0:18 1.000000
96-0:18 -1.000000
97-0:18 0.000000
98-0:18 1.000000
99-0:18 Branch: Break
100-0:? Linker Objects
101-0:? 'u1' ( uniform 4-component vector of int)
102-0:? 'u2' ( uniform 4-component vector of uint)
103-0:? 'result' ( smooth out 4-component vector of float)
104-0:? 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out unsized 1-element array of float ClipDistance gl_ClipDistance})
105-0:? 'gl_VertexID' ( gl_VertexId int VertexId)
106-0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId)
107- 
108- 
109-Linked vertex stage:
110- 
111- 
112-Shader version: 150
113-Requested GL_ARB_gpu_shader5
114-0:? Sequence
115-0:8 Function Definition: f(vu4;vu4; ( global 4-component vector of float)
116-0:8 Function Parameters:
117-0:8 'a' ( in 4-component vector of uint)
118-0:8 'b' ( in 4-component vector of uint)
119-0:8 Sequence
120-0:8 Branch: Return with expression
121-0:8 Convert uint to float ( temp 4-component vector of float)
122-0:8 subtract ( temp 4-component vector of uint)
123-0:8 'a' ( in 4-component vector of uint)
124-0:8 'b' ( in 4-component vector of uint)
125-0:10 Function Definition: main( ( global void)
126-0:10 Function Parameters:
127-0:12 Sequence
128-0:12 move second child to first child ( temp 4-component vector of float)
129-0:12 'result' ( smooth out 4-component vector of float)
130-0:12 Function Call: f(vu4;vu4; ( global 4-component vector of float)
131-0:12 Convert int to uint ( temp 4-component vector of uint)
132-0:12 'u1' ( uniform 4-component vector of int)
133-0:12 'u2' ( uniform 4-component vector of uint)
134-0:13 switch
135-0:13 condition
136-0:13 'gl_VertexID' ( gl_VertexId int VertexId)
137-0:13 body
138-0:13 Sequence
139-0:15 case: with expression
140-0:15 Constant:
141-0:15 0 (const int)
142-0:? Sequence
143-0:15 move second child to first child ( temp 4-component vector of float)
144-0:15 gl_Position: direct index for structure ( gl_Position 4-component vector of float Position)
145-0:15 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance})
146-0:15 Constant:
147-0:15 0 (const uint)
148-0:15 Constant:
149-0:15 -1.000000
150-0:15 1.000000
151-0:15 0.000000
152-0:15 1.000000
153-0:15 Branch: Break
154-0:16 case: with expression
155-0:16 Constant:
156-0:16 1 (const int)
157-0:? Sequence
158-0:16 move second child to first child ( temp 4-component vector of float)
159-0:16 gl_Position: direct index for structure ( gl_Position 4-component vector of float Position)
160-0:16 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance})
161-0:16 Constant:
162-0:16 0 (const uint)
163-0:16 Constant:
164-0:16 1.000000
165-0:16 1.000000
166-0:16 0.000000
167-0:16 1.000000
168-0:16 Branch: Break
169-0:17 case: with expression
170-0:17 Constant:
171-0:17 2 (const int)
172-0:? Sequence
173-0:17 move second child to first child ( temp 4-component vector of float)
174-0:17 gl_Position: direct index for structure ( gl_Position 4-component vector of float Position)
175-0:17 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance})
176-0:17 Constant:
177-0:17 0 (const uint)
178-0:17 Constant:
179-0:17 -1.000000
180-0:17 -1.000000
181-0:17 0.000000
182-0:17 1.000000
183-0:17 Branch: Break
184-0:18 case: with expression
185-0:18 Constant:
186-0:18 3 (const int)
187-0:? Sequence
188-0:18 move second child to first child ( temp 4-component vector of float)
189-0:18 gl_Position: direct index for structure ( gl_Position 4-component vector of float Position)
190-0:18 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance})
191-0:18 Constant:
192-0:18 0 (const uint)
193-0:18 Constant:
194-0:18 1.000000
195-0:18 -1.000000
196-0:18 0.000000
197-0:18 1.000000
198-0:18 Branch: Break
199-0:? Linker Objects
200-0:? 'u1' ( uniform 4-component vector of int)
201-0:? 'u2' ( uniform 4-component vector of uint)
202-0:? 'result' ( smooth out 4-component vector of float)
203-0:? 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance})
204-0:? 'gl_VertexID' ( gl_VertexId int VertexId)
205-0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId)
206- 
@@ -1,97 +0,0 @@
1-EndStreamPrimitive.geom
2-WARNING: 0:2: '#extension' : extension is only partially supported: GL_ARB_gpu_shader5
3- 
4-Shader version: 150
5-Requested GL_ARB_gpu_shader5
6-invocations = -1
7-max_vertices = 1
8-input primitive = points
9-output primitive = points
10-0:? Sequence
11-0:10 Function Definition: main( ( global void)
12-0:10 Function Parameters:
13-0:12 Sequence
14-0:12 move second child to first child ( temp float)
15-0:12 'output1' (layout( stream=0) out float)
16-0:12 Constant:
17-0:12 1.000000
18-0:13 move second child to first child ( temp float)
19-0:13 'output2' (layout( stream=0) out float)
20-0:13 Constant:
21-0:13 2.000000
22-0:14 EmitStreamVertex ( global void)
23-0:14 Constant:
24-0:14 0 (const int)
25-0:15 EndStreamPrimitive ( global void)
26-0:15 Constant:
27-0:15 0 (const int)
28-0:16 move second child to first child ( temp float)
29-0:16 'output3' (layout( stream=1) out float)
30-0:16 Constant:
31-0:16 3.000000
32-0:17 move second child to first child ( temp float)
33-0:17 'output4' (layout( stream=1) out float)
34-0:17 Constant:
35-0:17 4.000000
36-0:18 EmitStreamVertex ( global void)
37-0:18 Constant:
38-0:18 1 (const int)
39-0:19 EndStreamPrimitive ( global void)
40-0:19 Constant:
41-0:19 1 (const int)
42-0:? Linker Objects
43-0:? 'output1' (layout( stream=0) out float)
44-0:? 'output2' (layout( stream=0) out float)
45-0:? 'output3' (layout( stream=1) out float)
46-0:? 'output4' (layout( stream=1) out float)
47-0:? 'stream' ( uniform uint)
48- 
49- 
50-Linked geometry stage:
51- 
52- 
53-Shader version: 150
54-Requested GL_ARB_gpu_shader5
55-invocations = 1
56-max_vertices = 1
57-input primitive = points
58-output primitive = points
59-0:? Sequence
60-0:10 Function Definition: main( ( global void)
61-0:10 Function Parameters:
62-0:12 Sequence
63-0:12 move second child to first child ( temp float)
64-0:12 'output1' (layout( stream=0) out float)
65-0:12 Constant:
66-0:12 1.000000
67-0:13 move second child to first child ( temp float)
68-0:13 'output2' (layout( stream=0) out float)
69-0:13 Constant:
70-0:13 2.000000
71-0:14 EmitStreamVertex ( global void)
72-0:14 Constant:
73-0:14 0 (const int)
74-0:15 EndStreamPrimitive ( global void)
75-0:15 Constant:
76-0:15 0 (const int)
77-0:16 move second child to first child ( temp float)
78-0:16 'output3' (layout( stream=1) out float)
79-0:16 Constant:
80-0:16 3.000000
81-0:17 move second child to first child ( temp float)
82-0:17 'output4' (layout( stream=1) out float)
83-0:17 Constant:
84-0:17 4.000000
85-0:18 EmitStreamVertex ( global void)
86-0:18 Constant:
87-0:18 1 (const int)
88-0:19 EndStreamPrimitive ( global void)
89-0:19 Constant:
90-0:19 1 (const int)
91-0:? Linker Objects
92-0:? 'output1' (layout( stream=0) out float)
93-0:? 'output2' (layout( stream=0) out float)
94-0:? 'output3' (layout( stream=1) out float)
95-0:? 'output4' (layout( stream=1) out float)
96-0:? 'stream' ( uniform uint)
97- 
@@ -1,189 +0,0 @@
1-GL_ARB_draw_instanced.vert
2-Shader version: 150
3-Requested GL_ARB_draw_instanced
4-0:? Sequence
5-0:10 Function Definition: main( ( global void)
6-0:10 Function Parameters:
7-0:12 Sequence
8-0:12 Sequence
9-0:12 move second child to first child ( temp 4-component vector of float)
10-0:12 'vertex' ( temp 4-component vector of float)
11-0:12 add ( temp 4-component vector of float)
12-0:12 Construct vec4 ( temp 4-component vector of float)
13-0:12 divide ( temp 2-component vector of float)
14-0:12 vector swizzle ( temp 2-component vector of float)
15-0:12 direct index ( temp 4-component vector of float)
16-0:12 'va' ( in 64-element array of 4-component vector of float)
17-0:12 Constant:
18-0:12 0 (const int)
19-0:12 Sequence
20-0:12 Constant:
21-0:12 0 (const int)
22-0:12 Constant:
23-0:12 1 (const int)
24-0:12 Constant:
25-0:12 3.000000
26-0:12 vector swizzle ( temp 2-component vector of float)
27-0:12 direct index ( temp 4-component vector of float)
28-0:12 'va' ( in 64-element array of 4-component vector of float)
29-0:12 Constant:
30-0:12 0 (const int)
31-0:12 Sequence
32-0:12 Constant:
33-0:12 2 (const int)
34-0:12 Constant:
35-0:12 3 (const int)
36-0:12 Construct vec4 ( temp 4-component vector of float)
37-0:12 indirect index ( temp 3-component vector of float)
38-0:12 'instanceOffsets' ( uniform 3-element array of 3-component vector of float)
39-0:12 'gl_InstanceID' ( gl_InstanceId int InstanceId)
40-0:12 Constant:
41-0:12 1.000000
42-0:13 move second child to first child ( temp 4-component vector of float)
43-0:13 'color' ( smooth out 4-component vector of float)
44-0:13 Constant:
45-0:13 0.000000
46-0:13 0.000000
47-0:13 0.000000
48-0:13 0.000000
49-0:14 Sequence
50-0:14 Sequence
51-0:14 move second child to first child ( temp int)
52-0:14 'i' ( temp int)
53-0:14 Constant:
54-0:14 1 (const int)
55-0:14 Loop with condition tested first
56-0:14 Loop Condition
57-0:14 Compare Less Than ( temp bool)
58-0:14 'i' ( temp int)
59-0:14 Constant:
60-0:14 64 (const int)
61-0:14 Loop Body
62-0:15 add second child into first child ( temp 4-component vector of float)
63-0:15 'color' ( smooth out 4-component vector of float)
64-0:15 indirect index ( temp 4-component vector of float)
65-0:15 'va' ( in 64-element array of 4-component vector of float)
66-0:15 'i' ( temp int)
67-0:14 Loop Terminal Expression
68-0:14 Post-Increment ( temp int)
69-0:14 'i' ( temp int)
70-0:16 move second child to first child ( temp 4-component vector of float)
71-0:16 gl_Position: direct index for structure ( gl_Position 4-component vector of float Position)
72-0:16 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out unsized 1-element array of float ClipDistance gl_ClipDistance})
73-0:16 Constant:
74-0:16 0 (const uint)
75-0:16 matrix-times-vector ( temp 4-component vector of float)
76-0:16 'gtf_ModelViewProjectionMatrix' ( uniform 4X4 matrix of float)
77-0:16 'vertex' ( temp 4-component vector of float)
78-0:17 move second child to first child ( temp float)
79-0:17 gl_PointSize: direct index for structure ( gl_PointSize float PointSize)
80-0:17 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out unsized 1-element array of float ClipDistance gl_ClipDistance})
81-0:17 Constant:
82-0:17 1 (const uint)
83-0:17 Constant:
84-0:17 1.000000
85-0:? Linker Objects
86-0:? 'gtf_ModelViewProjectionMatrix' ( uniform 4X4 matrix of float)
87-0:? 'instanceOffsets' ( uniform 3-element array of 3-component vector of float)
88-0:? 'va' ( in 64-element array of 4-component vector of float)
89-0:? 'color' ( smooth out 4-component vector of float)
90-0:? 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out unsized 1-element array of float ClipDistance gl_ClipDistance})
91-0:? 'gl_VertexID' ( gl_VertexId int VertexId)
92-0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId)
93- 
94- 
95-Linked vertex stage:
96- 
97- 
98-Shader version: 150
99-Requested GL_ARB_draw_instanced
100-0:? Sequence
101-0:10 Function Definition: main( ( global void)
102-0:10 Function Parameters:
103-0:12 Sequence
104-0:12 Sequence
105-0:12 move second child to first child ( temp 4-component vector of float)
106-0:12 'vertex' ( temp 4-component vector of float)
107-0:12 add ( temp 4-component vector of float)
108-0:12 Construct vec4 ( temp 4-component vector of float)
109-0:12 divide ( temp 2-component vector of float)
110-0:12 vector swizzle ( temp 2-component vector of float)
111-0:12 direct index ( temp 4-component vector of float)
112-0:12 'va' ( in 64-element array of 4-component vector of float)
113-0:12 Constant:
114-0:12 0 (const int)
115-0:12 Sequence
116-0:12 Constant:
117-0:12 0 (const int)
118-0:12 Constant:
119-0:12 1 (const int)
120-0:12 Constant:
121-0:12 3.000000
122-0:12 vector swizzle ( temp 2-component vector of float)
123-0:12 direct index ( temp 4-component vector of float)
124-0:12 'va' ( in 64-element array of 4-component vector of float)
125-0:12 Constant:
126-0:12 0 (const int)
127-0:12 Sequence
128-0:12 Constant:
129-0:12 2 (const int)
130-0:12 Constant:
131-0:12 3 (const int)
132-0:12 Construct vec4 ( temp 4-component vector of float)
133-0:12 indirect index ( temp 3-component vector of float)
134-0:12 'instanceOffsets' ( uniform 3-element array of 3-component vector of float)
135-0:12 'gl_InstanceID' ( gl_InstanceId int InstanceId)
136-0:12 Constant:
137-0:12 1.000000
138-0:13 move second child to first child ( temp 4-component vector of float)
139-0:13 'color' ( smooth out 4-component vector of float)
140-0:13 Constant:
141-0:13 0.000000
142-0:13 0.000000
143-0:13 0.000000
144-0:13 0.000000
145-0:14 Sequence
146-0:14 Sequence
147-0:14 move second child to first child ( temp int)
148-0:14 'i' ( temp int)
149-0:14 Constant:
150-0:14 1 (const int)
151-0:14 Loop with condition tested first
152-0:14 Loop Condition
153-0:14 Compare Less Than ( temp bool)
154-0:14 'i' ( temp int)
155-0:14 Constant:
156-0:14 64 (const int)
157-0:14 Loop Body
158-0:15 add second child into first child ( temp 4-component vector of float)
159-0:15 'color' ( smooth out 4-component vector of float)
160-0:15 indirect index ( temp 4-component vector of float)
161-0:15 'va' ( in 64-element array of 4-component vector of float)
162-0:15 'i' ( temp int)
163-0:14 Loop Terminal Expression
164-0:14 Post-Increment ( temp int)
165-0:14 'i' ( temp int)
166-0:16 move second child to first child ( temp 4-component vector of float)
167-0:16 gl_Position: direct index for structure ( gl_Position 4-component vector of float Position)
168-0:16 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance})
169-0:16 Constant:
170-0:16 0 (const uint)
171-0:16 matrix-times-vector ( temp 4-component vector of float)
172-0:16 'gtf_ModelViewProjectionMatrix' ( uniform 4X4 matrix of float)
173-0:16 'vertex' ( temp 4-component vector of float)
174-0:17 move second child to first child ( temp float)
175-0:17 gl_PointSize: direct index for structure ( gl_PointSize float PointSize)
176-0:17 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance})
177-0:17 Constant:
178-0:17 1 (const uint)
179-0:17 Constant:
180-0:17 1.000000
181-0:? Linker Objects
182-0:? 'gtf_ModelViewProjectionMatrix' ( uniform 4X4 matrix of float)
183-0:? 'instanceOffsets' ( uniform 3-element array of 3-component vector of float)
184-0:? 'va' ( in 64-element array of 4-component vector of float)
185-0:? 'color' ( smooth out 4-component vector of float)
186-0:? 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance})
187-0:? 'gl_VertexID' ( gl_VertexId int VertexId)
188-0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId)
189-