Unverified Commit d0848b72 by John Kessenich Committed by GitHub

Merge branch 'master' into separate-web-and-emscripten

parents 230117a0 e0932f67
...@@ -168,19 +168,19 @@ the web grammar subset (see more about the web subset in the next section). ...@@ -168,19 +168,19 @@ the web grammar subset (see more about the web subset in the next section).
### Building to WASM for the Web and Node ### Building to WASM for the Web and Node
Use the steps in [Build Steps](#build-steps), which following notes/exceptions: Use the steps in [Build Steps](#build-steps), with the following notes/exceptions:
* For building the web subset of core glslang: * For building the web subset of core glslang:
+ update the grammar: run `m4` with `-DGLSLANG_WEB`, or simply execute + execute `updateGrammar web` from the glslang subdirectory
`updateGrammar web` from the glslang subdirectory (or if using your own scripts, `m4` needs a `-DGLSLANG_WEB` argument)
+ set `-DENABLE_HLSL=OFF -DBUILD_TESTING=OFF -DENABLE_OPT=OFF -DINSTALL_GTEST=OFF` + set `-DENABLE_HLSL=OFF -DBUILD_TESTING=OFF -DENABLE_OPT=OFF -DINSTALL_GTEST=OFF`
+ turn on `-DENABLE_GLSLANG_WEB=ON` + turn on `-DENABLE_GLSLANG_WEB=ON`
+ optionally, for GLSL compilation error messages, turn on `-DENABLE_GLSLANG_WEB_DEVEL=ON` + optionally, for GLSL compilation error messages, turn on `-DENABLE_GLSLANG_WEB_DEVEL=ON`
* `emsdk` needs to be present in your executable search path, *PATH* for * `emsdk` needs to be present in your executable search path, *PATH* for
Bash-like enivironments Bash-like enivironments
+ Instructions located + [Instructions located
[here](https://emscripten.org/docs/getting_started/downloads.html#sdk-download-and-install) here](https://emscripten.org/docs/getting_started/downloads.html#sdk-download-and-install)
* Wrap cmake call: `emcmake cmake` * Wrap cmake call: `emcmake cmake`
* To get a 'true' minimized build, make sure to use `brotli` to compress the .js * To get a fully minimized build, make sure to use `brotli` to compress the .js
and .wasm files and .wasm files
Example: Example:
......
...@@ -6832,8 +6832,9 @@ spv::Id TGlslangToSpvTraverser::createSubgroupOperation(glslang::TOperator op, s ...@@ -6832,8 +6832,9 @@ spv::Id TGlslangToSpvTraverser::createSubgroupOperation(glslang::TOperator op, s
default: assert(0 && "Unhandled subgroup operation!"); default: assert(0 && "Unhandled subgroup operation!");
} }
const bool isUnsigned = typeProxy == glslang::EbtUint || typeProxy == glslang::EbtUint64;
const bool isFloat = typeProxy == glslang::EbtFloat || typeProxy == glslang::EbtDouble; const bool isUnsigned = isTypeUnsignedInt(typeProxy);
const bool isFloat = isTypeFloat(typeProxy);
const bool isBool = typeProxy == glslang::EbtBool; const bool isBool = typeProxy == glslang::EbtBool;
spv::Op opCode = spv::OpNop; spv::Op opCode = spv::OpNop;
......
...@@ -11,7 +11,7 @@ spv.specConstant.vert ...@@ -11,7 +11,7 @@ spv.specConstant.vert
Source GLSL 400 Source GLSL 400
Name 4 "main" Name 4 "main"
Name 9 "arraySize" Name 9 "arraySize"
Name 14 "foo(vf4[s2769];" Name 14 "foo(vf4[s4393];"
Name 13 "p" Name 13 "p"
Name 17 "builtin_spec_constant(" Name 17 "builtin_spec_constant("
Name 20 "color" Name 20 "color"
...@@ -102,10 +102,10 @@ spv.specConstant.vert ...@@ -102,10 +102,10 @@ spv.specConstant.vert
Store 20(color) 46 Store 20(color) 46
48: 10 Load 22(ucol) 48: 10 Load 22(ucol)
Store 47(param) 48 Store 47(param) 48
49: 2 FunctionCall 14(foo(vf4[s2769];) 47(param) 49: 2 FunctionCall 14(foo(vf4[s4393];) 47(param)
Return Return
FunctionEnd FunctionEnd
14(foo(vf4[s2769];): 2 Function None 12 14(foo(vf4[s4393];): 2 Function None 12
13(p): 11(ptr) FunctionParameter 13(p): 11(ptr) FunctionParameter
15: Label 15: Label
54: 24(ptr) AccessChain 53(dupUcol) 23 54: 24(ptr) AccessChain 53(dupUcol) 23
......
This source diff could not be displayed because it is too large. You can view the blob instead.
spv.subgroupExtendedTypesBallotNeg.comp
ERROR: 0:26: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
ERROR: 0:27: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
ERROR: 0:28: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
ERROR: 0:29: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
ERROR: 0:30: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
ERROR: 0:31: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
ERROR: 0:32: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
ERROR: 0:33: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
ERROR: 0:35: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
ERROR: 0:36: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
ERROR: 0:37: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
ERROR: 0:38: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
ERROR: 0:39: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
ERROR: 0:40: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
ERROR: 0:41: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
ERROR: 0:42: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
ERROR: 0:44: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
ERROR: 0:45: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
ERROR: 0:46: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
ERROR: 0:47: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
ERROR: 0:48: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
ERROR: 0:49: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
ERROR: 0:50: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
ERROR: 0:51: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
ERROR: 0:53: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
ERROR: 0:54: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
ERROR: 0:55: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
ERROR: 0:56: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
ERROR: 0:57: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
ERROR: 0:58: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
ERROR: 0:59: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
ERROR: 0:60: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
ERROR: 0:62: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
ERROR: 0:63: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
ERROR: 0:64: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
ERROR: 0:65: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
ERROR: 0:66: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
ERROR: 0:67: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
ERROR: 0:68: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
ERROR: 0:69: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
ERROR: 0:71: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
ERROR: 0:72: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
ERROR: 0:73: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
ERROR: 0:74: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
ERROR: 0:75: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
ERROR: 0:76: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
ERROR: 0:77: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
ERROR: 0:78: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
ERROR: 0:80: ' temp float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
ERROR: 0:81: ' temp 2-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
ERROR: 0:82: ' temp 3-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
ERROR: 0:83: 'layout( column_major std430) buffer 4-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
ERROR: 0:84: ' temp float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
ERROR: 0:85: ' temp 2-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
ERROR: 0:86: ' temp 3-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
ERROR: 0:87: 'layout( column_major std430) buffer 4-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
ERROR: 56 compilation errors. No code generated.
SPIR-V is not generated for failed compile or link
spv.subgroupExtendedTypesBasic.comp
ERROR: #version: compute shaders require es profile with version 310 or above, or non-es profile with version 420 or above
ERROR: #version: statement must appear first in es-profile shader; before comments or newlines
ERROR: 1 compilation errors. No code generated.
ERROR: Linking compute stage: Missing entry point: Each stage requires one entry point
SPIR-V is not generated for failed compile or link
spv.subgroupExtendedTypesShuffleNeg.comp
ERROR: 0:26: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
ERROR: 0:27: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
ERROR: 0:28: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
ERROR: 0:29: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
ERROR: 0:31: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
ERROR: 0:32: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
ERROR: 0:33: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
ERROR: 0:34: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
ERROR: 0:36: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
ERROR: 0:37: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
ERROR: 0:38: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
ERROR: 0:39: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
ERROR: 0:41: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
ERROR: 0:42: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
ERROR: 0:43: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
ERROR: 0:44: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
ERROR: 0:46: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
ERROR: 0:47: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
ERROR: 0:48: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
ERROR: 0:49: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
ERROR: 0:51: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
ERROR: 0:52: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
ERROR: 0:53: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
ERROR: 0:54: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
ERROR: 0:56: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
ERROR: 0:57: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
ERROR: 0:58: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
ERROR: 0:59: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
ERROR: 0:61: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
ERROR: 0:62: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
ERROR: 0:63: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
ERROR: 0:64: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
ERROR: 0:66: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
ERROR: 0:67: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
ERROR: 0:68: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
ERROR: 0:69: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
ERROR: 0:71: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
ERROR: 0:72: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
ERROR: 0:73: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
ERROR: 0:74: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
ERROR: 0:76: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
ERROR: 0:77: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
ERROR: 0:78: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
ERROR: 0:79: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
ERROR: 0:81: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
ERROR: 0:82: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
ERROR: 0:83: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
ERROR: 0:84: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
ERROR: 0:86: ' temp highp float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
ERROR: 0:87: ' temp highp 2-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
ERROR: 0:88: ' temp highp 3-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
ERROR: 0:89: 'layout( column_major std430) buffer highp 4-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
ERROR: 0:91: ' temp highp float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
ERROR: 0:92: ' temp highp 2-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
ERROR: 0:93: ' temp highp 3-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
ERROR: 0:94: 'layout( column_major std430) buffer highp 4-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
ERROR: 56 compilation errors. No code generated.
SPIR-V is not generated for failed compile or link
spv.subgroupExtendedTypesShuffleRelativeNeg.comp
ERROR: 0:26: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
ERROR: 0:27: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
ERROR: 0:28: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
ERROR: 0:29: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
ERROR: 0:31: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
ERROR: 0:32: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
ERROR: 0:33: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
ERROR: 0:34: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
ERROR: 0:36: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
ERROR: 0:37: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
ERROR: 0:38: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
ERROR: 0:39: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
ERROR: 0:41: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
ERROR: 0:42: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
ERROR: 0:43: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
ERROR: 0:44: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
ERROR: 0:46: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
ERROR: 0:47: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
ERROR: 0:48: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
ERROR: 0:49: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
ERROR: 0:51: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
ERROR: 0:52: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
ERROR: 0:53: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
ERROR: 0:54: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
ERROR: 0:56: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
ERROR: 0:57: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
ERROR: 0:58: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
ERROR: 0:59: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
ERROR: 0:61: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
ERROR: 0:62: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
ERROR: 0:63: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
ERROR: 0:64: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
ERROR: 0:66: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
ERROR: 0:67: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
ERROR: 0:68: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
ERROR: 0:69: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
ERROR: 0:71: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
ERROR: 0:72: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
ERROR: 0:73: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
ERROR: 0:74: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
ERROR: 0:76: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
ERROR: 0:77: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
ERROR: 0:78: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
ERROR: 0:79: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
ERROR: 0:81: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
ERROR: 0:82: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
ERROR: 0:83: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
ERROR: 0:84: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
ERROR: 0:86: ' temp highp float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
ERROR: 0:87: ' temp highp 2-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
ERROR: 0:88: ' temp highp 3-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
ERROR: 0:89: 'layout( column_major std430) buffer highp 4-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
ERROR: 0:91: ' temp highp float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
ERROR: 0:92: ' temp highp 2-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
ERROR: 0:93: ' temp highp 3-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
ERROR: 0:94: 'layout( column_major std430) buffer highp 4-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
ERROR: 56 compilation errors. No code generated.
SPIR-V is not generated for failed compile or link
spv.subgroupExtendedTypesVoteNeg.comp
ERROR: 0:29: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
ERROR: 0:30: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
ERROR: 0:31: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
ERROR: 0:32: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
ERROR: 0:34: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
ERROR: 0:35: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
ERROR: 0:36: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
ERROR: 0:37: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
ERROR: 0:39: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
ERROR: 0:40: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
ERROR: 0:41: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
ERROR: 0:42: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
ERROR: 0:44: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
ERROR: 0:45: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
ERROR: 0:46: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
ERROR: 0:47: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
ERROR: 0:51: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
ERROR: 0:52: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
ERROR: 0:53: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
ERROR: 0:54: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
ERROR: 0:56: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
ERROR: 0:57: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
ERROR: 0:58: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
ERROR: 0:59: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
ERROR: 0:61: ' temp float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
ERROR: 0:62: ' temp 2-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
ERROR: 0:63: ' temp 3-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
ERROR: 0:64: 'layout( column_major std430) buffer 4-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
ERROR: 28 compilation errors. No code generated.
SPIR-V is not generated for failed compile or link
#version 450
#extension GL_KHR_shader_subgroup_ballot: enable
#extension GL_EXT_shader_subgroup_extended_types_int8: enable
#extension GL_EXT_shader_subgroup_extended_types_int16: enable
#extension GL_EXT_shader_subgroup_extended_types_int64: enable
#extension GL_EXT_shader_subgroup_extended_types_float16: enable
layout (local_size_x = 8) in;
layout(binding = 0) buffer Buffers
{
i8vec4 i8;
u8vec4 u8;
i16vec4 i16;
u16vec4 u16;
i64vec4 i64;
u64vec4 u64;
f16vec4 f16;
} data[4];
void main()
{
uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4;
data[invocation].i8.x = subgroupBroadcast(data[0].i8.x, 3);
data[invocation].i8.xy = subgroupBroadcast(data[1].i8.xy, 3);
data[invocation].i8.xyz = subgroupBroadcast(data[2].i8.xyz, 3);
data[invocation].i8 = subgroupBroadcast(data[3].i8, 3);
data[invocation].i8.x = subgroupBroadcastFirst(data[0].i8.x);
data[invocation].i8.xy = subgroupBroadcastFirst(data[1].i8.xy);
data[invocation].i8.xyz = subgroupBroadcastFirst(data[2].i8.xyz);
data[invocation].i8 = subgroupBroadcastFirst(data[3].i8);
data[invocation].u8.x = subgroupBroadcast(data[0].u8.x, 3);
data[invocation].u8.xy = subgroupBroadcast(data[1].u8.xy, 3);
data[invocation].u8.xyz = subgroupBroadcast(data[2].u8.xyz, 3);
data[invocation].u8 = subgroupBroadcast(data[3].u8, 3);
data[invocation].u8.x = subgroupBroadcastFirst(data[0].u8.x);
data[invocation].u8.xy = subgroupBroadcastFirst(data[1].u8.xy);
data[invocation].u8.xyz = subgroupBroadcastFirst(data[2].u8.xyz);
data[invocation].u8 = subgroupBroadcastFirst(data[3].u8);
data[invocation].i16.x = subgroupBroadcast(data[0].i16.x, 3);
data[invocation].i16.xy = subgroupBroadcast(data[1].i16.xy, 3);
data[invocation].i16.xyz = subgroupBroadcast(data[2].i16.xyz, 3);
data[invocation].i16 = subgroupBroadcast(data[3].i16, 3);
data[invocation].i16.x = subgroupBroadcastFirst(data[0].i16.x);
data[invocation].i16.xy = subgroupBroadcastFirst(data[1].i16.xy);
data[invocation].i16.xyz = subgroupBroadcastFirst(data[2].i16.xyz);
data[invocation].i16 = subgroupBroadcastFirst(data[3].i16);
data[invocation].u16.x = subgroupBroadcast(data[0].u16.x, 3);
data[invocation].u16.xy = subgroupBroadcast(data[1].u16.xy, 3);
data[invocation].u16.xyz = subgroupBroadcast(data[2].u16.xyz, 3);
data[invocation].u16 = subgroupBroadcast(data[3].u16, 3);
data[invocation].u16.x = subgroupBroadcastFirst(data[0].u16.x);
data[invocation].u16.xy = subgroupBroadcastFirst(data[1].u16.xy);
data[invocation].u16.xyz = subgroupBroadcastFirst(data[2].u16.xyz);
data[invocation].u16 = subgroupBroadcastFirst(data[3].u16);
data[invocation].i64.x = subgroupBroadcast(data[0].i64.x, 3);
data[invocation].i64.xy = subgroupBroadcast(data[1].i64.xy, 3);
data[invocation].i64.xyz = subgroupBroadcast(data[2].i64.xyz, 3);
data[invocation].i64 = subgroupBroadcast(data[3].i64, 3);
data[invocation].i64.x = subgroupBroadcastFirst(data[0].i64.x);
data[invocation].i64.xy = subgroupBroadcastFirst(data[1].i64.xy);
data[invocation].i64.xyz = subgroupBroadcastFirst(data[2].i64.xyz);
data[invocation].i64 = subgroupBroadcastFirst(data[3].i64);
data[invocation].u64.x = subgroupBroadcast(data[0].u64.x, 3);
data[invocation].u64.xy = subgroupBroadcast(data[1].u64.xy, 3);
data[invocation].u64.xyz = subgroupBroadcast(data[2].u64.xyz, 3);
data[invocation].u64 = subgroupBroadcast(data[3].u64, 3);
data[invocation].u64.x = subgroupBroadcastFirst(data[0].u64.x);
data[invocation].u64.xy = subgroupBroadcastFirst(data[1].u64.xy);
data[invocation].u64.xyz = subgroupBroadcastFirst(data[2].u64.xyz);
data[invocation].u64 = subgroupBroadcastFirst(data[3].u64);
data[invocation].f16.x = subgroupBroadcast(data[0].f16.x, 3);
data[invocation].f16.xy = subgroupBroadcast(data[1].f16.xy, 3);
data[invocation].f16.xyz = subgroupBroadcast(data[2].f16.xyz, 3);
data[invocation].f16 = subgroupBroadcast(data[3].f16, 3);
data[invocation].f16.x = subgroupBroadcastFirst(data[0].f16.x);
data[invocation].f16.xy = subgroupBroadcastFirst(data[1].f16.xy);
data[invocation].f16.xyz = subgroupBroadcastFirst(data[2].f16.xyz);
data[invocation].f16 = subgroupBroadcastFirst(data[3].f16);
}
#version 450
#extension GL_KHR_shader_subgroup_ballot: enable
#extension GL_EXT_shader_explicit_arithmetic_types_int8: enable
#extension GL_EXT_shader_explicit_arithmetic_types_int16: enable
#extension GL_EXT_shader_explicit_arithmetic_types_int64: enable
#extension GL_EXT_shader_explicit_arithmetic_types_float16: enable
layout (local_size_x = 8) in;
layout(binding = 0) buffer Buffers
{
i8vec4 i8;
u8vec4 u8;
i16vec4 i16;
u16vec4 u16;
i64vec4 i64;
u64vec4 u64;
f16vec4 f16;
} data[4];
void main()
{
uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4;
data[invocation].i8.x = subgroupBroadcast(data[0].i8.x, 3);
data[invocation].i8.xy = subgroupBroadcast(data[1].i8.xy, 3);
data[invocation].i8.xyz = subgroupBroadcast(data[2].i8.xyz, 3);
data[invocation].i8 = subgroupBroadcast(data[3].i8, 3);
data[invocation].i8.x = subgroupBroadcastFirst(data[0].i8.x);
data[invocation].i8.xy = subgroupBroadcastFirst(data[1].i8.xy);
data[invocation].i8.xyz = subgroupBroadcastFirst(data[2].i8.xyz);
data[invocation].i8 = subgroupBroadcastFirst(data[3].i8);
data[invocation].u8.x = subgroupBroadcast(data[0].u8.x, 3);
data[invocation].u8.xy = subgroupBroadcast(data[1].u8.xy, 3);
data[invocation].u8.xyz = subgroupBroadcast(data[2].u8.xyz, 3);
data[invocation].u8 = subgroupBroadcast(data[3].u8, 3);
data[invocation].u8.x = subgroupBroadcastFirst(data[0].u8.x);
data[invocation].u8.xy = subgroupBroadcastFirst(data[1].u8.xy);
data[invocation].u8.xyz = subgroupBroadcastFirst(data[2].u8.xyz);
data[invocation].u8 = subgroupBroadcastFirst(data[3].u8);
data[invocation].i16.x = subgroupBroadcast(data[0].i16.x, 3);
data[invocation].i16.xy = subgroupBroadcast(data[1].i16.xy, 3);
data[invocation].i16.xyz = subgroupBroadcast(data[2].i16.xyz, 3);
data[invocation].i16 = subgroupBroadcast(data[3].i16, 3);
data[invocation].i16.x = subgroupBroadcastFirst(data[0].i16.x);
data[invocation].i16.xy = subgroupBroadcastFirst(data[1].i16.xy);
data[invocation].i16.xyz = subgroupBroadcastFirst(data[2].i16.xyz);
data[invocation].i16 = subgroupBroadcastFirst(data[3].i16);
data[invocation].u16.x = subgroupBroadcast(data[0].u16.x, 3);
data[invocation].u16.xy = subgroupBroadcast(data[1].u16.xy, 3);
data[invocation].u16.xyz = subgroupBroadcast(data[2].u16.xyz, 3);
data[invocation].u16 = subgroupBroadcast(data[3].u16, 3);
data[invocation].u16.x = subgroupBroadcastFirst(data[0].u16.x);
data[invocation].u16.xy = subgroupBroadcastFirst(data[1].u16.xy);
data[invocation].u16.xyz = subgroupBroadcastFirst(data[2].u16.xyz);
data[invocation].u16 = subgroupBroadcastFirst(data[3].u16);
data[invocation].i64.x = subgroupBroadcast(data[0].i64.x, 3);
data[invocation].i64.xy = subgroupBroadcast(data[1].i64.xy, 3);
data[invocation].i64.xyz = subgroupBroadcast(data[2].i64.xyz, 3);
data[invocation].i64 = subgroupBroadcast(data[3].i64, 3);
data[invocation].i64.x = subgroupBroadcastFirst(data[0].i64.x);
data[invocation].i64.xy = subgroupBroadcastFirst(data[1].i64.xy);
data[invocation].i64.xyz = subgroupBroadcastFirst(data[2].i64.xyz);
data[invocation].i64 = subgroupBroadcastFirst(data[3].i64);
data[invocation].u64.x = subgroupBroadcast(data[0].u64.x, 3);
data[invocation].u64.xy = subgroupBroadcast(data[1].u64.xy, 3);
data[invocation].u64.xyz = subgroupBroadcast(data[2].u64.xyz, 3);
data[invocation].u64 = subgroupBroadcast(data[3].u64, 3);
data[invocation].u64.x = subgroupBroadcastFirst(data[0].u64.x);
data[invocation].u64.xy = subgroupBroadcastFirst(data[1].u64.xy);
data[invocation].u64.xyz = subgroupBroadcastFirst(data[2].u64.xyz);
data[invocation].u64 = subgroupBroadcastFirst(data[3].u64);
data[invocation].f16.x = subgroupBroadcast(data[0].f16.x, 3);
data[invocation].f16.xy = subgroupBroadcast(data[1].f16.xy, 3);
data[invocation].f16.xyz = subgroupBroadcast(data[2].f16.xyz, 3);
data[invocation].f16 = subgroupBroadcast(data[3].f16, 3);
data[invocation].f16.x = subgroupBroadcastFirst(data[0].f16.x);
data[invocation].f16.xy = subgroupBroadcastFirst(data[1].f16.xy);
data[invocation].f16.xyz = subgroupBroadcastFirst(data[2].f16.xyz);
data[invocation].f16 = subgroupBroadcastFirst(data[3].f16);
}
#version 450
#extension GL_KHR_shader_subgroup_quad: enable
#extension GL_EXT_shader_subgroup_extended_types_int8: enable
#extension GL_EXT_shader_subgroup_extended_types_int16: enable
#extension GL_EXT_shader_subgroup_extended_types_int64: enable
#extension GL_EXT_shader_subgroup_extended_types_float16: enable
layout (local_size_x = 8) in;
layout(binding = 0) buffer Buffers
{
i8vec4 i8;
u8vec4 u8;
i16vec4 i16;
u16vec4 u16;
i64vec4 i64;
u64vec4 u64;
f16vec4 f16;
} data[4];
void main()
{
uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4;
data[invocation].i8.x = subgroupQuadBroadcast(data[0].i8.x, 1);
data[invocation].i8.xy = subgroupQuadBroadcast(data[1].i8.xy, 1);
data[invocation].i8.xyz = subgroupQuadBroadcast(data[2].i8.xyz, 1);
data[invocation].i8 = subgroupQuadBroadcast(data[3].i8, 1);
data[invocation].i8.x = subgroupQuadSwapHorizontal(data[0].i8.x);
data[invocation].i8.xy = subgroupQuadSwapHorizontal(data[1].i8.xy);
data[invocation].i8.xyz = subgroupQuadSwapHorizontal(data[2].i8.xyz);
data[invocation].i8 = subgroupQuadSwapHorizontal(data[3].i8);
data[invocation].i8.x = subgroupQuadSwapVertical(data[0].i8.x);
data[invocation].i8.xy = subgroupQuadSwapVertical(data[1].i8.xy);
data[invocation].i8.xyz = subgroupQuadSwapVertical(data[2].i8.xyz);
data[invocation].i8 = subgroupQuadSwapVertical(data[3].i8);
data[invocation].i8.x = subgroupQuadSwapDiagonal(data[0].i8.x);
data[invocation].i8.xy = subgroupQuadSwapDiagonal(data[1].i8.xy);
data[invocation].i8.xyz = subgroupQuadSwapDiagonal(data[2].i8.xyz);
data[invocation].i8 = subgroupQuadSwapDiagonal(data[3].i8);
data[invocation].u8.x = subgroupQuadBroadcast(data[0].u8.x, 1);
data[invocation].u8.xy = subgroupQuadBroadcast(data[1].u8.xy, 1);
data[invocation].u8.xyz = subgroupQuadBroadcast(data[2].u8.xyz, 1);
data[invocation].u8 = subgroupQuadBroadcast(data[3].u8, 1);
data[invocation].u8.x = subgroupQuadSwapHorizontal(data[0].u8.x);
data[invocation].u8.xy = subgroupQuadSwapHorizontal(data[1].u8.xy);
data[invocation].u8.xyz = subgroupQuadSwapHorizontal(data[2].u8.xyz);
data[invocation].u8 = subgroupQuadSwapHorizontal(data[3].u8);
data[invocation].u8.x = subgroupQuadSwapVertical(data[0].u8.x);
data[invocation].u8.xy = subgroupQuadSwapVertical(data[1].u8.xy);
data[invocation].u8.xyz = subgroupQuadSwapVertical(data[2].u8.xyz);
data[invocation].u8 = subgroupQuadSwapVertical(data[3].u8);
data[invocation].u8.x = subgroupQuadSwapDiagonal(data[0].u8.x);
data[invocation].u8.xy = subgroupQuadSwapDiagonal(data[1].u8.xy);
data[invocation].u8.xyz = subgroupQuadSwapDiagonal(data[2].u8.xyz);
data[invocation].u8 = subgroupQuadSwapDiagonal(data[3].u8);
data[invocation].i16.x = subgroupQuadBroadcast(data[0].i16.x, 1);
data[invocation].i16.xy = subgroupQuadBroadcast(data[1].i16.xy, 1);
data[invocation].i16.xyz = subgroupQuadBroadcast(data[2].i16.xyz, 1);
data[invocation].i16 = subgroupQuadBroadcast(data[3].i16, 1);
data[invocation].i16.x = subgroupQuadSwapHorizontal(data[0].i16.x);
data[invocation].i16.xy = subgroupQuadSwapHorizontal(data[1].i16.xy);
data[invocation].i16.xyz = subgroupQuadSwapHorizontal(data[2].i16.xyz);
data[invocation].i16 = subgroupQuadSwapHorizontal(data[3].i16);
data[invocation].i16.x = subgroupQuadSwapVertical(data[0].i16.x);
data[invocation].i16.xy = subgroupQuadSwapVertical(data[1].i16.xy);
data[invocation].i16.xyz = subgroupQuadSwapVertical(data[2].i16.xyz);
data[invocation].i16 = subgroupQuadSwapVertical(data[3].i16);
data[invocation].i16.x = subgroupQuadSwapDiagonal(data[0].i16.x);
data[invocation].i16.xy = subgroupQuadSwapDiagonal(data[1].i16.xy);
data[invocation].i16.xyz = subgroupQuadSwapDiagonal(data[2].i16.xyz);
data[invocation].i16 = subgroupQuadSwapDiagonal(data[3].i16);
data[invocation].u16.x = subgroupQuadBroadcast(data[0].u16.x, 1);
data[invocation].u16.xy = subgroupQuadBroadcast(data[1].u16.xy, 1);
data[invocation].u16.xyz = subgroupQuadBroadcast(data[2].u16.xyz, 1);
data[invocation].u16 = subgroupQuadBroadcast(data[3].u16, 1);
data[invocation].u16.x = subgroupQuadSwapHorizontal(data[0].u16.x);
data[invocation].u16.xy = subgroupQuadSwapHorizontal(data[1].u16.xy);
data[invocation].u16.xyz = subgroupQuadSwapHorizontal(data[2].u16.xyz);
data[invocation].u16 = subgroupQuadSwapHorizontal(data[3].u16);
data[invocation].u16.x = subgroupQuadSwapVertical(data[0].u16.x);
data[invocation].u16.xy = subgroupQuadSwapVertical(data[1].u16.xy);
data[invocation].u16.xyz = subgroupQuadSwapVertical(data[2].u16.xyz);
data[invocation].u16 = subgroupQuadSwapVertical(data[3].u16);
data[invocation].u16.x = subgroupQuadSwapDiagonal(data[0].u16.x);
data[invocation].u16.xy = subgroupQuadSwapDiagonal(data[1].u16.xy);
data[invocation].u16.xyz = subgroupQuadSwapDiagonal(data[2].u16.xyz);
data[invocation].u16 = subgroupQuadSwapDiagonal(data[3].u16);
data[invocation].i64.x = subgroupQuadBroadcast(data[0].i64.x, 1);
data[invocation].i64.xy = subgroupQuadBroadcast(data[1].i64.xy, 1);
data[invocation].i64.xyz = subgroupQuadBroadcast(data[2].i64.xyz, 1);
data[invocation].i64 = subgroupQuadBroadcast(data[3].i64, 1);
data[invocation].i64.x = subgroupQuadSwapHorizontal(data[0].i64.x);
data[invocation].i64.xy = subgroupQuadSwapHorizontal(data[1].i64.xy);
data[invocation].i64.xyz = subgroupQuadSwapHorizontal(data[2].i64.xyz);
data[invocation].i64 = subgroupQuadSwapHorizontal(data[3].i64);
data[invocation].i64.x = subgroupQuadSwapVertical(data[0].i64.x);
data[invocation].i64.xy = subgroupQuadSwapVertical(data[1].i64.xy);
data[invocation].i64.xyz = subgroupQuadSwapVertical(data[2].i64.xyz);
data[invocation].i64 = subgroupQuadSwapVertical(data[3].i64);
data[invocation].i64.x = subgroupQuadSwapDiagonal(data[0].i64.x);
data[invocation].i64.xy = subgroupQuadSwapDiagonal(data[1].i64.xy);
data[invocation].i64.xyz = subgroupQuadSwapDiagonal(data[2].i64.xyz);
data[invocation].i64 = subgroupQuadSwapDiagonal(data[3].i64);
data[invocation].u64.x = subgroupQuadBroadcast(data[0].u64.x, 1);
data[invocation].u64.xy = subgroupQuadBroadcast(data[1].u64.xy, 1);
data[invocation].u64.xyz = subgroupQuadBroadcast(data[2].u64.xyz, 1);
data[invocation].u64 = subgroupQuadBroadcast(data[3].u64, 1);
data[invocation].u64.x = subgroupQuadSwapHorizontal(data[0].u64.x);
data[invocation].u64.xy = subgroupQuadSwapHorizontal(data[1].u64.xy);
data[invocation].u64.xyz = subgroupQuadSwapHorizontal(data[2].u64.xyz);
data[invocation].u64 = subgroupQuadSwapHorizontal(data[3].u64);
data[invocation].u64.x = subgroupQuadSwapVertical(data[0].u64.x);
data[invocation].u64.xy = subgroupQuadSwapVertical(data[1].u64.xy);
data[invocation].u64.xyz = subgroupQuadSwapVertical(data[2].u64.xyz);
data[invocation].u64 = subgroupQuadSwapVertical(data[3].u64);
data[invocation].u64.x = subgroupQuadSwapDiagonal(data[0].u64.x);
data[invocation].u64.xy = subgroupQuadSwapDiagonal(data[1].u64.xy);
data[invocation].u64.xyz = subgroupQuadSwapDiagonal(data[2].u64.xyz);
data[invocation].u64 = subgroupQuadSwapDiagonal(data[3].u64);
data[invocation].f16.x = subgroupQuadBroadcast(data[0].f16.x, 1);
data[invocation].f16.xy = subgroupQuadBroadcast(data[1].f16.xy, 1);
data[invocation].f16.xyz = subgroupQuadBroadcast(data[2].f16.xyz, 1);
data[invocation].f16 = subgroupQuadBroadcast(data[3].f16, 1);
data[invocation].f16.x = subgroupQuadSwapHorizontal(data[0].f16.x);
data[invocation].f16.xy = subgroupQuadSwapHorizontal(data[1].f16.xy);
data[invocation].f16.xyz = subgroupQuadSwapHorizontal(data[2].f16.xyz);
data[invocation].f16 = subgroupQuadSwapHorizontal(data[3].f16);
data[invocation].f16.x = subgroupQuadSwapVertical(data[0].f16.x);
data[invocation].f16.xy = subgroupQuadSwapVertical(data[1].f16.xy);
data[invocation].f16.xyz = subgroupQuadSwapVertical(data[2].f16.xyz);
data[invocation].f16 = subgroupQuadSwapVertical(data[3].f16);
data[invocation].f16.x = subgroupQuadSwapDiagonal(data[0].f16.x);
data[invocation].f16.xy = subgroupQuadSwapDiagonal(data[1].f16.xy);
data[invocation].f16.xyz = subgroupQuadSwapDiagonal(data[2].f16.xyz);
data[invocation].f16 = subgroupQuadSwapDiagonal(data[3].f16);
}
#version 450
#extension GL_KHR_shader_subgroup_quad: enable
#extension GL_EXT_shader_explicit_arithmetic_types_int8: enable
#extension GL_EXT_shader_explicit_arithmetic_types_int16: enable
#extension GL_EXT_shader_explicit_arithmetic_types_int64: enable
#extension GL_EXT_shader_explicit_arithmetic_types_float16: enable
layout (local_size_x = 8) in;
layout(binding = 0) buffer Buffers
{
i8vec4 i8;
u8vec4 u8;
i16vec4 i16;
u16vec4 u16;
i64vec4 i64;
u64vec4 u64;
f16vec4 f16;
} data[4];
void main()
{
uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4;
data[invocation].i8.x = subgroupQuadBroadcast(data[0].i8.x, 1);
data[invocation].i8.xy = subgroupQuadBroadcast(data[1].i8.xy, 1);
data[invocation].i8.xyz = subgroupQuadBroadcast(data[2].i8.xyz, 1);
data[invocation].i8 = subgroupQuadBroadcast(data[3].i8, 1);
data[invocation].i8.x = subgroupQuadSwapHorizontal(data[0].i8.x);
data[invocation].i8.xy = subgroupQuadSwapHorizontal(data[1].i8.xy);
data[invocation].i8.xyz = subgroupQuadSwapHorizontal(data[2].i8.xyz);
data[invocation].i8 = subgroupQuadSwapHorizontal(data[3].i8);
data[invocation].i8.x = subgroupQuadSwapVertical(data[0].i8.x);
data[invocation].i8.xy = subgroupQuadSwapVertical(data[1].i8.xy);
data[invocation].i8.xyz = subgroupQuadSwapVertical(data[2].i8.xyz);
data[invocation].i8 = subgroupQuadSwapVertical(data[3].i8);
data[invocation].i8.x = subgroupQuadSwapDiagonal(data[0].i8.x);
data[invocation].i8.xy = subgroupQuadSwapDiagonal(data[1].i8.xy);
data[invocation].i8.xyz = subgroupQuadSwapDiagonal(data[2].i8.xyz);
data[invocation].i8 = subgroupQuadSwapDiagonal(data[3].i8);
data[invocation].u8.x = subgroupQuadBroadcast(data[0].u8.x, 1);
data[invocation].u8.xy = subgroupQuadBroadcast(data[1].u8.xy, 1);
data[invocation].u8.xyz = subgroupQuadBroadcast(data[2].u8.xyz, 1);
data[invocation].u8 = subgroupQuadBroadcast(data[3].u8, 1);
data[invocation].u8.x = subgroupQuadSwapHorizontal(data[0].u8.x);
data[invocation].u8.xy = subgroupQuadSwapHorizontal(data[1].u8.xy);
data[invocation].u8.xyz = subgroupQuadSwapHorizontal(data[2].u8.xyz);
data[invocation].u8 = subgroupQuadSwapHorizontal(data[3].u8);
data[invocation].u8.x = subgroupQuadSwapVertical(data[0].u8.x);
data[invocation].u8.xy = subgroupQuadSwapVertical(data[1].u8.xy);
data[invocation].u8.xyz = subgroupQuadSwapVertical(data[2].u8.xyz);
data[invocation].u8 = subgroupQuadSwapVertical(data[3].u8);
data[invocation].u8.x = subgroupQuadSwapDiagonal(data[0].u8.x);
data[invocation].u8.xy = subgroupQuadSwapDiagonal(data[1].u8.xy);
data[invocation].u8.xyz = subgroupQuadSwapDiagonal(data[2].u8.xyz);
data[invocation].u8 = subgroupQuadSwapDiagonal(data[3].u8);
data[invocation].i16.x = subgroupQuadBroadcast(data[0].i16.x, 1);
data[invocation].i16.xy = subgroupQuadBroadcast(data[1].i16.xy, 1);
data[invocation].i16.xyz = subgroupQuadBroadcast(data[2].i16.xyz, 1);
data[invocation].i16 = subgroupQuadBroadcast(data[3].i16, 1);
data[invocation].i16.x = subgroupQuadSwapHorizontal(data[0].i16.x);
data[invocation].i16.xy = subgroupQuadSwapHorizontal(data[1].i16.xy);
data[invocation].i16.xyz = subgroupQuadSwapHorizontal(data[2].i16.xyz);
data[invocation].i16 = subgroupQuadSwapHorizontal(data[3].i16);
data[invocation].i16.x = subgroupQuadSwapVertical(data[0].i16.x);
data[invocation].i16.xy = subgroupQuadSwapVertical(data[1].i16.xy);
data[invocation].i16.xyz = subgroupQuadSwapVertical(data[2].i16.xyz);
data[invocation].i16 = subgroupQuadSwapVertical(data[3].i16);
data[invocation].i16.x = subgroupQuadSwapDiagonal(data[0].i16.x);
data[invocation].i16.xy = subgroupQuadSwapDiagonal(data[1].i16.xy);
data[invocation].i16.xyz = subgroupQuadSwapDiagonal(data[2].i16.xyz);
data[invocation].i16 = subgroupQuadSwapDiagonal(data[3].i16);
data[invocation].u16.x = subgroupQuadBroadcast(data[0].u16.x, 1);
data[invocation].u16.xy = subgroupQuadBroadcast(data[1].u16.xy, 1);
data[invocation].u16.xyz = subgroupQuadBroadcast(data[2].u16.xyz, 1);
data[invocation].u16 = subgroupQuadBroadcast(data[3].u16, 1);
data[invocation].u16.x = subgroupQuadSwapHorizontal(data[0].u16.x);
data[invocation].u16.xy = subgroupQuadSwapHorizontal(data[1].u16.xy);
data[invocation].u16.xyz = subgroupQuadSwapHorizontal(data[2].u16.xyz);
data[invocation].u16 = subgroupQuadSwapHorizontal(data[3].u16);
data[invocation].u16.x = subgroupQuadSwapVertical(data[0].u16.x);
data[invocation].u16.xy = subgroupQuadSwapVertical(data[1].u16.xy);
data[invocation].u16.xyz = subgroupQuadSwapVertical(data[2].u16.xyz);
data[invocation].u16 = subgroupQuadSwapVertical(data[3].u16);
data[invocation].u16.x = subgroupQuadSwapDiagonal(data[0].u16.x);
data[invocation].u16.xy = subgroupQuadSwapDiagonal(data[1].u16.xy);
data[invocation].u16.xyz = subgroupQuadSwapDiagonal(data[2].u16.xyz);
data[invocation].u16 = subgroupQuadSwapDiagonal(data[3].u16);
data[invocation].i64.x = subgroupQuadBroadcast(data[0].i64.x, 1);
data[invocation].i64.xy = subgroupQuadBroadcast(data[1].i64.xy, 1);
data[invocation].i64.xyz = subgroupQuadBroadcast(data[2].i64.xyz, 1);
data[invocation].i64 = subgroupQuadBroadcast(data[3].i64, 1);
data[invocation].i64.x = subgroupQuadSwapHorizontal(data[0].i64.x);
data[invocation].i64.xy = subgroupQuadSwapHorizontal(data[1].i64.xy);
data[invocation].i64.xyz = subgroupQuadSwapHorizontal(data[2].i64.xyz);
data[invocation].i64 = subgroupQuadSwapHorizontal(data[3].i64);
data[invocation].i64.x = subgroupQuadSwapVertical(data[0].i64.x);
data[invocation].i64.xy = subgroupQuadSwapVertical(data[1].i64.xy);
data[invocation].i64.xyz = subgroupQuadSwapVertical(data[2].i64.xyz);
data[invocation].i64 = subgroupQuadSwapVertical(data[3].i64);
data[invocation].i64.x = subgroupQuadSwapDiagonal(data[0].i64.x);
data[invocation].i64.xy = subgroupQuadSwapDiagonal(data[1].i64.xy);
data[invocation].i64.xyz = subgroupQuadSwapDiagonal(data[2].i64.xyz);
data[invocation].i64 = subgroupQuadSwapDiagonal(data[3].i64);
data[invocation].u64.x = subgroupQuadBroadcast(data[0].u64.x, 1);
data[invocation].u64.xy = subgroupQuadBroadcast(data[1].u64.xy, 1);
data[invocation].u64.xyz = subgroupQuadBroadcast(data[2].u64.xyz, 1);
data[invocation].u64 = subgroupQuadBroadcast(data[3].u64, 1);
data[invocation].u64.x = subgroupQuadSwapHorizontal(data[0].u64.x);
data[invocation].u64.xy = subgroupQuadSwapHorizontal(data[1].u64.xy);
data[invocation].u64.xyz = subgroupQuadSwapHorizontal(data[2].u64.xyz);
data[invocation].u64 = subgroupQuadSwapHorizontal(data[3].u64);
data[invocation].u64.x = subgroupQuadSwapVertical(data[0].u64.x);
data[invocation].u64.xy = subgroupQuadSwapVertical(data[1].u64.xy);
data[invocation].u64.xyz = subgroupQuadSwapVertical(data[2].u64.xyz);
data[invocation].u64 = subgroupQuadSwapVertical(data[3].u64);
data[invocation].u64.x = subgroupQuadSwapDiagonal(data[0].u64.x);
data[invocation].u64.xy = subgroupQuadSwapDiagonal(data[1].u64.xy);
data[invocation].u64.xyz = subgroupQuadSwapDiagonal(data[2].u64.xyz);
data[invocation].u64 = subgroupQuadSwapDiagonal(data[3].u64);
data[invocation].f16.x = subgroupQuadBroadcast(data[0].f16.x, 1);
data[invocation].f16.xy = subgroupQuadBroadcast(data[1].f16.xy, 1);
data[invocation].f16.xyz = subgroupQuadBroadcast(data[2].f16.xyz, 1);
data[invocation].f16 = subgroupQuadBroadcast(data[3].f16, 1);
data[invocation].f16.x = subgroupQuadSwapHorizontal(data[0].f16.x);
data[invocation].f16.xy = subgroupQuadSwapHorizontal(data[1].f16.xy);
data[invocation].f16.xyz = subgroupQuadSwapHorizontal(data[2].f16.xyz);
data[invocation].f16 = subgroupQuadSwapHorizontal(data[3].f16);
data[invocation].f16.x = subgroupQuadSwapVertical(data[0].f16.x);
data[invocation].f16.xy = subgroupQuadSwapVertical(data[1].f16.xy);
data[invocation].f16.xyz = subgroupQuadSwapVertical(data[2].f16.xyz);
data[invocation].f16 = subgroupQuadSwapVertical(data[3].f16);
data[invocation].f16.x = subgroupQuadSwapDiagonal(data[0].f16.x);
data[invocation].f16.xy = subgroupQuadSwapDiagonal(data[1].f16.xy);
data[invocation].f16.xyz = subgroupQuadSwapDiagonal(data[2].f16.xyz);
data[invocation].f16 = subgroupQuadSwapDiagonal(data[3].f16);
}
#version 450
#extension GL_KHR_shader_subgroup_shuffle: enable
#extension GL_EXT_shader_subgroup_extended_types_int8: enable
#extension GL_EXT_shader_subgroup_extended_types_int16: enable
#extension GL_EXT_shader_subgroup_extended_types_int64: enable
#extension GL_EXT_shader_subgroup_extended_types_float16: enable
layout (local_size_x = 8) in;
layout(binding = 0) buffer Buffers
{
i8vec4 i8;
u8vec4 u8;
i16vec4 i16;
u16vec4 u16;
i64vec4 i64;
u64vec4 u64;
f16vec4 f16;
} data[4];
void main()
{
uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4;
data[invocation].i8.x = subgroupShuffle(data[0].i8.x, invocation);
data[invocation].i8.xy = subgroupShuffle(data[1].i8.xy, invocation);
data[invocation].i8.xyz = subgroupShuffle(data[2].i8.xyz, invocation);
data[invocation].i8 = subgroupShuffle(data[3].i8, invocation);
data[invocation].i8.x = subgroupShuffleXor(data[0].i8.x, invocation);
data[invocation].i8.xy = subgroupShuffleXor(data[1].i8.xy, invocation);
data[invocation].i8.xyz = subgroupShuffleXor(data[2].i8.xyz, invocation);
data[invocation].i8 = subgroupShuffleXor(data[3].i8, invocation);
data[invocation].u8.x = subgroupShuffle(data[0].u8.x, invocation);
data[invocation].u8.xy = subgroupShuffle(data[1].u8.xy, invocation);
data[invocation].u8.xyz = subgroupShuffle(data[2].u8.xyz, invocation);
data[invocation].u8 = subgroupShuffle(data[3].u8, invocation);
data[invocation].u8.x = subgroupShuffleXor(data[0].u8.x, invocation);
data[invocation].u8.xy = subgroupShuffleXor(data[1].u8.xy, invocation);
data[invocation].u8.xyz = subgroupShuffleXor(data[2].u8.xyz, invocation);
data[invocation].u8 = subgroupShuffleXor(data[3].u8, invocation);
data[invocation].i16.x = subgroupShuffle(data[0].i16.x, invocation);
data[invocation].i16.xy = subgroupShuffle(data[1].i16.xy, invocation);
data[invocation].i16.xyz = subgroupShuffle(data[2].i16.xyz, invocation);
data[invocation].i16 = subgroupShuffle(data[3].i16, invocation);
data[invocation].i16.x = subgroupShuffleXor(data[0].i16.x, invocation);
data[invocation].i16.xy = subgroupShuffleXor(data[1].i16.xy, invocation);
data[invocation].i16.xyz = subgroupShuffleXor(data[2].i16.xyz, invocation);
data[invocation].i16 = subgroupShuffleXor(data[3].i16, invocation);
data[invocation].u16.x = subgroupShuffle(data[0].u16.x, invocation);
data[invocation].u16.xy = subgroupShuffle(data[1].u16.xy, invocation);
data[invocation].u16.xyz = subgroupShuffle(data[2].u16.xyz, invocation);
data[invocation].u16 = subgroupShuffle(data[3].u16, invocation);
data[invocation].u16.x = subgroupShuffleXor(data[0].u16.x, invocation);
data[invocation].u16.xy = subgroupShuffleXor(data[1].u16.xy, invocation);
data[invocation].u16.xyz = subgroupShuffleXor(data[2].u16.xyz, invocation);
data[invocation].u16 = subgroupShuffleXor(data[3].u16, invocation);
data[invocation].i64.x = subgroupShuffle(data[0].i64.x, invocation);
data[invocation].i64.xy = subgroupShuffle(data[1].i64.xy, invocation);
data[invocation].i64.xyz = subgroupShuffle(data[2].i64.xyz, invocation);
data[invocation].i64 = subgroupShuffle(data[3].i64, invocation);
data[invocation].i64.x = subgroupShuffleXor(data[0].i64.x, invocation);
data[invocation].i64.xy = subgroupShuffleXor(data[1].i64.xy, invocation);
data[invocation].i64.xyz = subgroupShuffleXor(data[2].i64.xyz, invocation);
data[invocation].i64 = subgroupShuffleXor(data[3].i64, invocation);
data[invocation].u64.x = subgroupShuffle(data[0].u64.x, invocation);
data[invocation].u64.xy = subgroupShuffle(data[1].u64.xy, invocation);
data[invocation].u64.xyz = subgroupShuffle(data[2].u64.xyz, invocation);
data[invocation].u64 = subgroupShuffle(data[3].u64, invocation);
data[invocation].u64.x = subgroupShuffleXor(data[0].u64.x, invocation);
data[invocation].u64.xy = subgroupShuffleXor(data[1].u64.xy, invocation);
data[invocation].u64.xyz = subgroupShuffleXor(data[2].u64.xyz, invocation);
data[invocation].u64 = subgroupShuffleXor(data[3].u64, invocation);
data[invocation].f16.x = subgroupShuffle(data[0].f16.x, invocation);
data[invocation].f16.xy = subgroupShuffle(data[1].f16.xy, invocation);
data[invocation].f16.xyz = subgroupShuffle(data[2].f16.xyz, invocation);
data[invocation].f16 = subgroupShuffle(data[3].f16, invocation);
data[invocation].f16.x = subgroupShuffleXor(data[0].f16.x, invocation);
data[invocation].f16.xy = subgroupShuffleXor(data[1].f16.xy, invocation);
data[invocation].f16.xyz = subgroupShuffleXor(data[2].f16.xyz, invocation);
data[invocation].f16 = subgroupShuffleXor(data[3].f16, invocation);
}
#version 450
#extension GL_KHR_shader_subgroup_shuffle: enable
#extension GL_EXT_shader_explicit_arithmetic_types_int8: enable
#extension GL_EXT_shader_explicit_arithmetic_types_int16: enable
#extension GL_EXT_shader_explicit_arithmetic_types_int64: enable
#extension GL_EXT_shader_explicit_arithmetic_types_float16: enable
layout (local_size_x = 8) in;
layout(binding = 0) buffer Buffers
{
i8vec4 i8;
u8vec4 u8;
i16vec4 i16;
u16vec4 u16;
i64vec4 i64;
u64vec4 u64;
f16vec4 f16;
} data[4];
void main()
{
uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4;
data[invocation].i8.x = subgroupShuffle(data[0].i8.x, invocation);
data[invocation].i8.xy = subgroupShuffle(data[1].i8.xy, invocation);
data[invocation].i8.xyz = subgroupShuffle(data[2].i8.xyz, invocation);
data[invocation].i8 = subgroupShuffle(data[3].i8, invocation);
data[invocation].i8.x = subgroupShuffleXor(data[0].i8.x, invocation);
data[invocation].i8.xy = subgroupShuffleXor(data[1].i8.xy, invocation);
data[invocation].i8.xyz = subgroupShuffleXor(data[2].i8.xyz, invocation);
data[invocation].i8 = subgroupShuffleXor(data[3].i8, invocation);
data[invocation].u8.x = subgroupShuffle(data[0].u8.x, invocation);
data[invocation].u8.xy = subgroupShuffle(data[1].u8.xy, invocation);
data[invocation].u8.xyz = subgroupShuffle(data[2].u8.xyz, invocation);
data[invocation].u8 = subgroupShuffle(data[3].u8, invocation);
data[invocation].u8.x = subgroupShuffleXor(data[0].u8.x, invocation);
data[invocation].u8.xy = subgroupShuffleXor(data[1].u8.xy, invocation);
data[invocation].u8.xyz = subgroupShuffleXor(data[2].u8.xyz, invocation);
data[invocation].u8 = subgroupShuffleXor(data[3].u8, invocation);
data[invocation].i16.x = subgroupShuffle(data[0].i16.x, invocation);
data[invocation].i16.xy = subgroupShuffle(data[1].i16.xy, invocation);
data[invocation].i16.xyz = subgroupShuffle(data[2].i16.xyz, invocation);
data[invocation].i16 = subgroupShuffle(data[3].i16, invocation);
data[invocation].i16.x = subgroupShuffleXor(data[0].i16.x, invocation);
data[invocation].i16.xy = subgroupShuffleXor(data[1].i16.xy, invocation);
data[invocation].i16.xyz = subgroupShuffleXor(data[2].i16.xyz, invocation);
data[invocation].i16 = subgroupShuffleXor(data[3].i16, invocation);
data[invocation].u16.x = subgroupShuffle(data[0].u16.x, invocation);
data[invocation].u16.xy = subgroupShuffle(data[1].u16.xy, invocation);
data[invocation].u16.xyz = subgroupShuffle(data[2].u16.xyz, invocation);
data[invocation].u16 = subgroupShuffle(data[3].u16, invocation);
data[invocation].u16.x = subgroupShuffleXor(data[0].u16.x, invocation);
data[invocation].u16.xy = subgroupShuffleXor(data[1].u16.xy, invocation);
data[invocation].u16.xyz = subgroupShuffleXor(data[2].u16.xyz, invocation);
data[invocation].u16 = subgroupShuffleXor(data[3].u16, invocation);
data[invocation].i64.x = subgroupShuffle(data[0].i64.x, invocation);
data[invocation].i64.xy = subgroupShuffle(data[1].i64.xy, invocation);
data[invocation].i64.xyz = subgroupShuffle(data[2].i64.xyz, invocation);
data[invocation].i64 = subgroupShuffle(data[3].i64, invocation);
data[invocation].i64.x = subgroupShuffleXor(data[0].i64.x, invocation);
data[invocation].i64.xy = subgroupShuffleXor(data[1].i64.xy, invocation);
data[invocation].i64.xyz = subgroupShuffleXor(data[2].i64.xyz, invocation);
data[invocation].i64 = subgroupShuffleXor(data[3].i64, invocation);
data[invocation].u64.x = subgroupShuffle(data[0].u64.x, invocation);
data[invocation].u64.xy = subgroupShuffle(data[1].u64.xy, invocation);
data[invocation].u64.xyz = subgroupShuffle(data[2].u64.xyz, invocation);
data[invocation].u64 = subgroupShuffle(data[3].u64, invocation);
data[invocation].u64.x = subgroupShuffleXor(data[0].u64.x, invocation);
data[invocation].u64.xy = subgroupShuffleXor(data[1].u64.xy, invocation);
data[invocation].u64.xyz = subgroupShuffleXor(data[2].u64.xyz, invocation);
data[invocation].u64 = subgroupShuffleXor(data[3].u64, invocation);
data[invocation].f16.x = subgroupShuffle(data[0].f16.x, invocation);
data[invocation].f16.xy = subgroupShuffle(data[1].f16.xy, invocation);
data[invocation].f16.xyz = subgroupShuffle(data[2].f16.xyz, invocation);
data[invocation].f16 = subgroupShuffle(data[3].f16, invocation);
data[invocation].f16.x = subgroupShuffleXor(data[0].f16.x, invocation);
data[invocation].f16.xy = subgroupShuffleXor(data[1].f16.xy, invocation);
data[invocation].f16.xyz = subgroupShuffleXor(data[2].f16.xyz, invocation);
data[invocation].f16 = subgroupShuffleXor(data[3].f16, invocation);
}
#version 450
#extension GL_KHR_shader_subgroup_shuffle_relative: enable
#extension GL_EXT_shader_subgroup_extended_types_int8: enable
#extension GL_EXT_shader_subgroup_extended_types_int16: enable
#extension GL_EXT_shader_subgroup_extended_types_int64: enable
#extension GL_EXT_shader_subgroup_extended_types_float16: enable
layout (local_size_x = 8) in;
layout(binding = 0) buffer Buffers
{
i8vec4 i8;
u8vec4 u8;
i16vec4 i16;
u16vec4 u16;
i64vec4 i64;
u64vec4 u64;
f16vec4 f16;
} data[4];
void main()
{
uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4;
data[invocation].i8.x = subgroupShuffleUp(data[0].i8.x, invocation);
data[invocation].i8.xy = subgroupShuffleUp(data[1].i8.xy, invocation);
data[invocation].i8.xyz = subgroupShuffleUp(data[2].i8.xyz, invocation);
data[invocation].i8 = subgroupShuffleUp(data[3].i8, invocation);
data[invocation].i8.x = subgroupShuffleDown(data[0].i8.x, invocation);
data[invocation].i8.xy = subgroupShuffleDown(data[1].i8.xy, invocation);
data[invocation].i8.xyz = subgroupShuffleDown(data[2].i8.xyz, invocation);
data[invocation].i8 = subgroupShuffleDown(data[3].i8, invocation);
data[invocation].u8.x = subgroupShuffleUp(data[0].u8.x, invocation);
data[invocation].u8.xy = subgroupShuffleUp(data[1].u8.xy, invocation);
data[invocation].u8.xyz = subgroupShuffleUp(data[2].u8.xyz, invocation);
data[invocation].u8 = subgroupShuffleUp(data[3].u8, invocation);
data[invocation].u8.x = subgroupShuffleDown(data[0].u8.x, invocation);
data[invocation].u8.xy = subgroupShuffleDown(data[1].u8.xy, invocation);
data[invocation].u8.xyz = subgroupShuffleDown(data[2].u8.xyz, invocation);
data[invocation].u8 = subgroupShuffleDown(data[3].u8, invocation);
data[invocation].i16.x = subgroupShuffleUp(data[0].i16.x, invocation);
data[invocation].i16.xy = subgroupShuffleUp(data[1].i16.xy, invocation);
data[invocation].i16.xyz = subgroupShuffleUp(data[2].i16.xyz, invocation);
data[invocation].i16 = subgroupShuffleUp(data[3].i16, invocation);
data[invocation].i16.x = subgroupShuffleDown(data[0].i16.x, invocation);
data[invocation].i16.xy = subgroupShuffleDown(data[1].i16.xy, invocation);
data[invocation].i16.xyz = subgroupShuffleDown(data[2].i16.xyz, invocation);
data[invocation].i16 = subgroupShuffleDown(data[3].i16, invocation);
data[invocation].u16.x = subgroupShuffleUp(data[0].u16.x, invocation);
data[invocation].u16.xy = subgroupShuffleUp(data[1].u16.xy, invocation);
data[invocation].u16.xyz = subgroupShuffleUp(data[2].u16.xyz, invocation);
data[invocation].u16 = subgroupShuffleUp(data[3].u16, invocation);
data[invocation].u16.x = subgroupShuffleDown(data[0].u16.x, invocation);
data[invocation].u16.xy = subgroupShuffleDown(data[1].u16.xy, invocation);
data[invocation].u16.xyz = subgroupShuffleDown(data[2].u16.xyz, invocation);
data[invocation].u16 = subgroupShuffleDown(data[3].u16, invocation);
data[invocation].i64.x = subgroupShuffleUp(data[0].i64.x, invocation);
data[invocation].i64.xy = subgroupShuffleUp(data[1].i64.xy, invocation);
data[invocation].i64.xyz = subgroupShuffleUp(data[2].i64.xyz, invocation);
data[invocation].i64 = subgroupShuffleUp(data[3].i64, invocation);
data[invocation].i64.x = subgroupShuffleDown(data[0].i64.x, invocation);
data[invocation].i64.xy = subgroupShuffleDown(data[1].i64.xy, invocation);
data[invocation].i64.xyz = subgroupShuffleDown(data[2].i64.xyz, invocation);
data[invocation].i64 = subgroupShuffleDown(data[3].i64, invocation);
data[invocation].u64.x = subgroupShuffleUp(data[0].u64.x, invocation);
data[invocation].u64.xy = subgroupShuffleUp(data[1].u64.xy, invocation);
data[invocation].u64.xyz = subgroupShuffleUp(data[2].u64.xyz, invocation);
data[invocation].u64 = subgroupShuffleUp(data[3].u64, invocation);
data[invocation].u64.x = subgroupShuffleDown(data[0].u64.x, invocation);
data[invocation].u64.xy = subgroupShuffleDown(data[1].u64.xy, invocation);
data[invocation].u64.xyz = subgroupShuffleDown(data[2].u64.xyz, invocation);
data[invocation].u64 = subgroupShuffleDown(data[3].u64, invocation);
data[invocation].f16.x = subgroupShuffleUp(data[0].f16.x, invocation);
data[invocation].f16.xy = subgroupShuffleUp(data[1].f16.xy, invocation);
data[invocation].f16.xyz = subgroupShuffleUp(data[2].f16.xyz, invocation);
data[invocation].f16 = subgroupShuffleUp(data[3].f16, invocation);
data[invocation].f16.x = subgroupShuffleDown(data[0].f16.x, invocation);
data[invocation].f16.xy = subgroupShuffleDown(data[1].f16.xy, invocation);
data[invocation].f16.xyz = subgroupShuffleDown(data[2].f16.xyz, invocation);
data[invocation].f16 = subgroupShuffleDown(data[3].f16, invocation);
}
#version 450
#extension GL_KHR_shader_subgroup_shuffle_relative: enable
#extension GL_EXT_shader_explicit_arithmetic_types_int8: enable
#extension GL_EXT_shader_explicit_arithmetic_types_int16: enable
#extension GL_EXT_shader_explicit_arithmetic_types_int64: enable
#extension GL_EXT_shader_explicit_arithmetic_types_float16: enable
layout (local_size_x = 8) in;
layout(binding = 0) buffer Buffers
{
i8vec4 i8;
u8vec4 u8;
i16vec4 i16;
u16vec4 u16;
i64vec4 i64;
u64vec4 u64;
f16vec4 f16;
} data[4];
void main()
{
uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4;
data[invocation].i8.x = subgroupShuffleUp(data[0].i8.x, invocation);
data[invocation].i8.xy = subgroupShuffleUp(data[1].i8.xy, invocation);
data[invocation].i8.xyz = subgroupShuffleUp(data[2].i8.xyz, invocation);
data[invocation].i8 = subgroupShuffleUp(data[3].i8, invocation);
data[invocation].i8.x = subgroupShuffleDown(data[0].i8.x, invocation);
data[invocation].i8.xy = subgroupShuffleDown(data[1].i8.xy, invocation);
data[invocation].i8.xyz = subgroupShuffleDown(data[2].i8.xyz, invocation);
data[invocation].i8 = subgroupShuffleDown(data[3].i8, invocation);
data[invocation].u8.x = subgroupShuffleUp(data[0].u8.x, invocation);
data[invocation].u8.xy = subgroupShuffleUp(data[1].u8.xy, invocation);
data[invocation].u8.xyz = subgroupShuffleUp(data[2].u8.xyz, invocation);
data[invocation].u8 = subgroupShuffleUp(data[3].u8, invocation);
data[invocation].u8.x = subgroupShuffleDown(data[0].u8.x, invocation);
data[invocation].u8.xy = subgroupShuffleDown(data[1].u8.xy, invocation);
data[invocation].u8.xyz = subgroupShuffleDown(data[2].u8.xyz, invocation);
data[invocation].u8 = subgroupShuffleDown(data[3].u8, invocation);
data[invocation].i16.x = subgroupShuffleUp(data[0].i16.x, invocation);
data[invocation].i16.xy = subgroupShuffleUp(data[1].i16.xy, invocation);
data[invocation].i16.xyz = subgroupShuffleUp(data[2].i16.xyz, invocation);
data[invocation].i16 = subgroupShuffleUp(data[3].i16, invocation);
data[invocation].i16.x = subgroupShuffleDown(data[0].i16.x, invocation);
data[invocation].i16.xy = subgroupShuffleDown(data[1].i16.xy, invocation);
data[invocation].i16.xyz = subgroupShuffleDown(data[2].i16.xyz, invocation);
data[invocation].i16 = subgroupShuffleDown(data[3].i16, invocation);
data[invocation].u16.x = subgroupShuffleUp(data[0].u16.x, invocation);
data[invocation].u16.xy = subgroupShuffleUp(data[1].u16.xy, invocation);
data[invocation].u16.xyz = subgroupShuffleUp(data[2].u16.xyz, invocation);
data[invocation].u16 = subgroupShuffleUp(data[3].u16, invocation);
data[invocation].u16.x = subgroupShuffleDown(data[0].u16.x, invocation);
data[invocation].u16.xy = subgroupShuffleDown(data[1].u16.xy, invocation);
data[invocation].u16.xyz = subgroupShuffleDown(data[2].u16.xyz, invocation);
data[invocation].u16 = subgroupShuffleDown(data[3].u16, invocation);
data[invocation].i64.x = subgroupShuffleUp(data[0].i64.x, invocation);
data[invocation].i64.xy = subgroupShuffleUp(data[1].i64.xy, invocation);
data[invocation].i64.xyz = subgroupShuffleUp(data[2].i64.xyz, invocation);
data[invocation].i64 = subgroupShuffleUp(data[3].i64, invocation);
data[invocation].i64.x = subgroupShuffleDown(data[0].i64.x, invocation);
data[invocation].i64.xy = subgroupShuffleDown(data[1].i64.xy, invocation);
data[invocation].i64.xyz = subgroupShuffleDown(data[2].i64.xyz, invocation);
data[invocation].i64 = subgroupShuffleDown(data[3].i64, invocation);
data[invocation].u64.x = subgroupShuffleUp(data[0].u64.x, invocation);
data[invocation].u64.xy = subgroupShuffleUp(data[1].u64.xy, invocation);
data[invocation].u64.xyz = subgroupShuffleUp(data[2].u64.xyz, invocation);
data[invocation].u64 = subgroupShuffleUp(data[3].u64, invocation);
data[invocation].u64.x = subgroupShuffleDown(data[0].u64.x, invocation);
data[invocation].u64.xy = subgroupShuffleDown(data[1].u64.xy, invocation);
data[invocation].u64.xyz = subgroupShuffleDown(data[2].u64.xyz, invocation);
data[invocation].u64 = subgroupShuffleDown(data[3].u64, invocation);
data[invocation].f16.x = subgroupShuffleUp(data[0].f16.x, invocation);
data[invocation].f16.xy = subgroupShuffleUp(data[1].f16.xy, invocation);
data[invocation].f16.xyz = subgroupShuffleUp(data[2].f16.xyz, invocation);
data[invocation].f16 = subgroupShuffleUp(data[3].f16, invocation);
data[invocation].f16.x = subgroupShuffleDown(data[0].f16.x, invocation);
data[invocation].f16.xy = subgroupShuffleDown(data[1].f16.xy, invocation);
data[invocation].f16.xyz = subgroupShuffleDown(data[2].f16.xyz, invocation);
data[invocation].f16 = subgroupShuffleDown(data[3].f16, invocation);
}
#version 450
#extension GL_KHR_shader_subgroup_vote: enable
#extension GL_EXT_shader_subgroup_extended_types_int8: enable
#extension GL_EXT_shader_subgroup_extended_types_int16: enable
#extension GL_EXT_shader_subgroup_extended_types_int64: enable
#extension GL_EXT_shader_subgroup_extended_types_float16: enable
layout (local_size_x = 8) in;
layout(binding = 0) buffer Buffers
{
i8vec4 i8;
u8vec4 u8;
i16vec4 i16;
u16vec4 u16;
i64vec4 i64;
u64vec4 u64;
f16vec4 f16;
int r;
} data[4];
void main()
{
uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4;
if (subgroupAll(data[invocation].r < 0))
{
data[invocation].r = int(subgroupAllEqual(data[0].i8.x));
data[invocation].r = int(subgroupAllEqual(data[1].i8.xy));
data[invocation].r = int(subgroupAllEqual(data[2].i8.xyz));
data[invocation].r = int(subgroupAllEqual(data[3].i8));
data[invocation].r = int(subgroupAllEqual(data[0].u8.x));
data[invocation].r = int(subgroupAllEqual(data[1].u8.xy));
data[invocation].r = int(subgroupAllEqual(data[2].u8.xyz));
data[invocation].r = int(subgroupAllEqual(data[3].u8));
data[invocation].r = int(subgroupAllEqual(data[0].i16.x));
data[invocation].r = int(subgroupAllEqual(data[1].i16.xy));
data[invocation].r = int(subgroupAllEqual(data[2].i16.xyz));
data[invocation].r = int(subgroupAllEqual(data[3].i16));
data[invocation].r = int(subgroupAllEqual(data[0].u16.x));
data[invocation].r = int(subgroupAllEqual(data[1].u16.xy));
data[invocation].r = int(subgroupAllEqual(data[2].u16.xyz));
data[invocation].r = int(subgroupAllEqual(data[3].u16));
}
else if (subgroupAny(data[invocation].r < 0))
{
data[invocation].r = int(subgroupAllEqual(data[0].i64.x));
data[invocation].r = int(subgroupAllEqual(data[1].i64.xy));
data[invocation].r = int(subgroupAllEqual(data[2].i64.xyz));
data[invocation].r = int(subgroupAllEqual(data[3].i64));
data[invocation].r = int(subgroupAllEqual(data[0].u64.x));
data[invocation].r = int(subgroupAllEqual(data[1].u64.xy));
data[invocation].r = int(subgroupAllEqual(data[2].u64.xyz));
data[invocation].r = int(subgroupAllEqual(data[3].u64));
data[invocation].r = int(subgroupAllEqual(data[0].f16.x));
data[invocation].r = int(subgroupAllEqual(data[1].f16.xy));
data[invocation].r = int(subgroupAllEqual(data[2].f16.xyz));
data[invocation].r = int(subgroupAllEqual(data[3].f16));
}
}
#version 450
#extension GL_KHR_shader_subgroup_vote: enable
#extension GL_EXT_shader_explicit_arithmetic_types_int8: enable
#extension GL_EXT_shader_explicit_arithmetic_types_int16: enable
#extension GL_EXT_shader_explicit_arithmetic_types_int64: enable
#extension GL_EXT_shader_explicit_arithmetic_types_float16: enable
layout (local_size_x = 8) in;
layout(binding = 0) buffer Buffers
{
i8vec4 i8;
u8vec4 u8;
i16vec4 i16;
u16vec4 u16;
i64vec4 i64;
u64vec4 u64;
f16vec4 f16;
int r;
} data[4];
void main()
{
uint invocation = (gl_SubgroupInvocationID + gl_SubgroupSize) % 4;
if (subgroupAll(data[invocation].r < 0))
{
data[invocation].r = int(subgroupAllEqual(data[0].i8.x));
data[invocation].r = int(subgroupAllEqual(data[1].i8.xy));
data[invocation].r = int(subgroupAllEqual(data[2].i8.xyz));
data[invocation].r = int(subgroupAllEqual(data[3].i8));
data[invocation].r = int(subgroupAllEqual(data[0].u8.x));
data[invocation].r = int(subgroupAllEqual(data[1].u8.xy));
data[invocation].r = int(subgroupAllEqual(data[2].u8.xyz));
data[invocation].r = int(subgroupAllEqual(data[3].u8));
data[invocation].r = int(subgroupAllEqual(data[0].i16.x));
data[invocation].r = int(subgroupAllEqual(data[1].i16.xy));
data[invocation].r = int(subgroupAllEqual(data[2].i16.xyz));
data[invocation].r = int(subgroupAllEqual(data[3].i16));
data[invocation].r = int(subgroupAllEqual(data[0].u16.x));
data[invocation].r = int(subgroupAllEqual(data[1].u16.xy));
data[invocation].r = int(subgroupAllEqual(data[2].u16.xyz));
data[invocation].r = int(subgroupAllEqual(data[3].u16));
}
else if (subgroupAny(data[invocation].r < 0))
{
data[invocation].r = int(subgroupAllEqual(data[0].i64.x));
data[invocation].r = int(subgroupAllEqual(data[1].i64.xy));
data[invocation].r = int(subgroupAllEqual(data[2].i64.xyz));
data[invocation].r = int(subgroupAllEqual(data[3].i64));
data[invocation].r = int(subgroupAllEqual(data[0].u64.x));
data[invocation].r = int(subgroupAllEqual(data[1].u64.xy));
data[invocation].r = int(subgroupAllEqual(data[2].u64.xyz));
data[invocation].r = int(subgroupAllEqual(data[3].u64));
data[invocation].r = int(subgroupAllEqual(data[0].f16.x));
data[invocation].r = int(subgroupAllEqual(data[1].f16.xy));
data[invocation].r = int(subgroupAllEqual(data[2].f16.xyz));
data[invocation].r = int(subgroupAllEqual(data[3].f16));
}
}
...@@ -2204,6 +2204,30 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan ...@@ -2204,6 +2204,30 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan
// these require SPIR-V 1.3 // these require SPIR-V 1.3
if (spvVersion.spv > 0 && spvVersion.spv < EShTargetSpv_1_3) if (spvVersion.spv > 0 && spvVersion.spv < EShTargetSpv_1_3)
error(loc, "requires SPIR-V 1.3", "subgroup op", ""); error(loc, "requires SPIR-V 1.3", "subgroup op", "");
// Check that if extended types are being used that the correct extensions are enabled.
if (arg0 != nullptr) {
const TType& type = arg0->getType();
switch (type.getBasicType()) {
default:
break;
case EbtInt8:
case EbtUint8:
requireExtensions(loc, 1, &E_GL_EXT_shader_subgroup_extended_types_int8, type.getCompleteString().c_str());
break;
case EbtInt16:
case EbtUint16:
requireExtensions(loc, 1, &E_GL_EXT_shader_subgroup_extended_types_int16, type.getCompleteString().c_str());
break;
case EbtInt64:
case EbtUint64:
requireExtensions(loc, 1, &E_GL_EXT_shader_subgroup_extended_types_int64, type.getCompleteString().c_str());
break;
case EbtFloat16:
requireExtensions(loc, 1, &E_GL_EXT_shader_subgroup_extended_types_float16, type.getCompleteString().c_str());
break;
}
}
} }
} }
......
...@@ -300,6 +300,12 @@ void TParseVersions::initializeExtensionBehavior() ...@@ -300,6 +300,12 @@ void TParseVersions::initializeExtensionBehavior()
extensionBehavior[E_GL_EXT_shader_explicit_arithmetic_types_float16] = EBhDisable; extensionBehavior[E_GL_EXT_shader_explicit_arithmetic_types_float16] = EBhDisable;
extensionBehavior[E_GL_EXT_shader_explicit_arithmetic_types_float32] = EBhDisable; extensionBehavior[E_GL_EXT_shader_explicit_arithmetic_types_float32] = EBhDisable;
extensionBehavior[E_GL_EXT_shader_explicit_arithmetic_types_float64] = EBhDisable; extensionBehavior[E_GL_EXT_shader_explicit_arithmetic_types_float64] = EBhDisable;
// subgroup extended types
extensionBehavior[E_GL_EXT_shader_subgroup_extended_types_int8] = EBhDisable;
extensionBehavior[E_GL_EXT_shader_subgroup_extended_types_int16] = EBhDisable;
extensionBehavior[E_GL_EXT_shader_subgroup_extended_types_int64] = EBhDisable;
extensionBehavior[E_GL_EXT_shader_subgroup_extended_types_float16] = EBhDisable;
} }
#endif // GLSLANG_WEB #endif // GLSLANG_WEB
...@@ -447,6 +453,11 @@ void TParseVersions::getPreamble(std::string& preamble) ...@@ -447,6 +453,11 @@ void TParseVersions::getPreamble(std::string& preamble)
"#define GL_EXT_shader_explicit_arithmetic_types_float16 1\n" "#define GL_EXT_shader_explicit_arithmetic_types_float16 1\n"
"#define GL_EXT_shader_explicit_arithmetic_types_float32 1\n" "#define GL_EXT_shader_explicit_arithmetic_types_float32 1\n"
"#define GL_EXT_shader_explicit_arithmetic_types_float64 1\n" "#define GL_EXT_shader_explicit_arithmetic_types_float64 1\n"
"#define GL_EXT_shader_subgroup_extended_types_int8 1\n"
"#define GL_EXT_shader_subgroup_extended_types_int16 1\n"
"#define GL_EXT_shader_subgroup_extended_types_int64 1\n"
"#define GL_EXT_shader_subgroup_extended_types_float16 1\n"
; ;
if (version >= 150) { if (version >= 150) {
...@@ -826,6 +837,15 @@ void TParseVersions::updateExtensionBehavior(int line, const char* extension, co ...@@ -826,6 +837,15 @@ void TParseVersions::updateExtensionBehavior(int line, const char* extension, co
updateExtensionBehavior(line, "GL_EXT_buffer_reference", behaviorString); updateExtensionBehavior(line, "GL_EXT_buffer_reference", behaviorString);
else if (strcmp(extension, "GL_NV_integer_cooperative_matrix") == 0) else if (strcmp(extension, "GL_NV_integer_cooperative_matrix") == 0)
updateExtensionBehavior(line, "GL_NV_cooperative_matrix", behaviorString); updateExtensionBehavior(line, "GL_NV_cooperative_matrix", behaviorString);
// subgroup extended types to explicit types
else if (strcmp(extension, "GL_EXT_shader_subgroup_extended_types_int8") == 0)
updateExtensionBehavior(line, "GL_EXT_shader_explicit_arithmetic_types_int8", behaviorString);
else if (strcmp(extension, "GL_EXT_shader_subgroup_extended_types_int16") == 0)
updateExtensionBehavior(line, "GL_EXT_shader_explicit_arithmetic_types_int16", behaviorString);
else if (strcmp(extension, "GL_EXT_shader_subgroup_extended_types_int64") == 0)
updateExtensionBehavior(line, "GL_EXT_shader_explicit_arithmetic_types_int64", behaviorString);
else if (strcmp(extension, "GL_EXT_shader_subgroup_extended_types_float16") == 0)
updateExtensionBehavior(line, "GL_EXT_shader_explicit_arithmetic_types_float16", behaviorString);
} }
void TParseVersions::updateExtensionBehavior(const char* extension, TExtensionBehavior behavior) void TParseVersions::updateExtensionBehavior(const char* extension, TExtensionBehavior behavior)
......
...@@ -257,7 +257,7 @@ const char* const E_GL_OES_tessellation_point_size = "GL_OES_tessel ...@@ -257,7 +257,7 @@ const char* const E_GL_OES_tessellation_point_size = "GL_OES_tessel
const char* const E_GL_OES_texture_buffer = "GL_OES_texture_buffer"; const char* const E_GL_OES_texture_buffer = "GL_OES_texture_buffer";
const char* const E_GL_OES_texture_cube_map_array = "GL_OES_texture_cube_map_array"; const char* const E_GL_OES_texture_cube_map_array = "GL_OES_texture_cube_map_array";
// KHX // EXT
const char* const E_GL_EXT_shader_explicit_arithmetic_types = "GL_EXT_shader_explicit_arithmetic_types"; const char* const E_GL_EXT_shader_explicit_arithmetic_types = "GL_EXT_shader_explicit_arithmetic_types";
const char* const E_GL_EXT_shader_explicit_arithmetic_types_int8 = "GL_EXT_shader_explicit_arithmetic_types_int8"; const char* const E_GL_EXT_shader_explicit_arithmetic_types_int8 = "GL_EXT_shader_explicit_arithmetic_types_int8";
const char* const E_GL_EXT_shader_explicit_arithmetic_types_int16 = "GL_EXT_shader_explicit_arithmetic_types_int16"; const char* const E_GL_EXT_shader_explicit_arithmetic_types_int16 = "GL_EXT_shader_explicit_arithmetic_types_int16";
...@@ -267,6 +267,11 @@ const char* const E_GL_EXT_shader_explicit_arithmetic_types_float16 = "GL_EXT_s ...@@ -267,6 +267,11 @@ const char* const E_GL_EXT_shader_explicit_arithmetic_types_float16 = "GL_EXT_s
const char* const E_GL_EXT_shader_explicit_arithmetic_types_float32 = "GL_EXT_shader_explicit_arithmetic_types_float32"; const char* const E_GL_EXT_shader_explicit_arithmetic_types_float32 = "GL_EXT_shader_explicit_arithmetic_types_float32";
const char* const E_GL_EXT_shader_explicit_arithmetic_types_float64 = "GL_EXT_shader_explicit_arithmetic_types_float64"; const char* const E_GL_EXT_shader_explicit_arithmetic_types_float64 = "GL_EXT_shader_explicit_arithmetic_types_float64";
const char* const E_GL_EXT_shader_subgroup_extended_types_int8 = "GL_EXT_shader_subgroup_extended_types_int8";
const char* const E_GL_EXT_shader_subgroup_extended_types_int16 = "GL_EXT_shader_subgroup_extended_types_int16";
const char* const E_GL_EXT_shader_subgroup_extended_types_int64 = "GL_EXT_shader_subgroup_extended_types_int64";
const char* const E_GL_EXT_shader_subgroup_extended_types_float16 = "GL_EXT_shader_subgroup_extended_types_float16";
// Arrays of extensions for the above AEP duplications // Arrays of extensions for the above AEP duplications
const char* const AEP_geometry_shader[] = { E_GL_EXT_geometry_shader, E_GL_OES_geometry_shader }; const char* const AEP_geometry_shader[] = { E_GL_EXT_geometry_shader, E_GL_OES_geometry_shader };
......
...@@ -459,6 +459,22 @@ INSTANTIATE_TEST_CASE_P( ...@@ -459,6 +459,22 @@ INSTANTIATE_TEST_CASE_P(
"spv.subgroupShuffleRelative.comp", "spv.subgroupShuffleRelative.comp",
"spv.subgroupQuad.comp", "spv.subgroupQuad.comp",
"spv.subgroupVote.comp", "spv.subgroupVote.comp",
"spv.subgroupExtendedTypesArithmetic.comp",
"spv.subgroupExtendedTypesArithmeticNeg.comp",
"spv.subgroupExtendedTypesBallot.comp",
"spv.subgroupExtendedTypesBallotNeg.comp",
"spv.subgroupExtendedTypesClustered.comp",
"spv.subgroupExtendedTypesClusteredNeg.comp",
"spv.subgroupExtendedTypesPartitioned.comp",
"spv.subgroupExtendedTypesPartitionedNeg.comp",
"spv.subgroupExtendedTypesShuffle.comp",
"spv.subgroupExtendedTypesShuffleNeg.comp",
"spv.subgroupExtendedTypesShuffleRelative.comp",
"spv.subgroupExtendedTypesShuffleRelativeNeg.comp",
"spv.subgroupExtendedTypesQuad.comp",
"spv.subgroupExtendedTypesQuadNeg.comp",
"spv.subgroupExtendedTypesVote.comp",
"spv.subgroupExtendedTypesVoteNeg.comp",
"spv.vulkan110.storageBuffer.vert", "spv.vulkan110.storageBuffer.vert",
})), })),
FileNameAsCustomTestSuffix FileNameAsCustomTestSuffix
......
...@@ -3221,6 +3221,11 @@ bool HlslGrammar::acceptConstructor(TIntermTyped*& node) ...@@ -3221,6 +3221,11 @@ bool HlslGrammar::acceptConstructor(TIntermTyped*& node)
return false; return false;
} }
if (arguments == nullptr) {
expected("one or more arguments");
return false;
}
// hook it up // hook it up
node = parseContext.handleFunctionCall(arguments->getLoc(), constructorFunction, arguments); node = parseContext.handleFunctionCall(arguments->getLoc(), constructorFunction, arguments);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment