Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/KhronosGroup/SPIRV-Cross.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHans-Kristian Arntzen <hans-kristian.arntzen@arm.com>2018-04-10 18:16:41 +0300
committerHans-Kristian Arntzen <hans-kristian.arntzen@arm.com>2018-04-10 18:16:41 +0300
commite1ccfd5dbb036a8893d517cc0b050adc57cdadde (patch)
tree517e8685bd6f8983be620f5e665857dae47200b1 /shaders
parentf6c0e53f58302be8ef696007efd0f4cb043ab6b1 (diff)
Implement all of subgroup.
Diffstat (limited to 'shaders')
-rw-r--r--shaders/vulkan/comp/subgroups.nocompat.vk.comp24
1 files changed, 24 insertions, 0 deletions
diff --git a/shaders/vulkan/comp/subgroups.nocompat.vk.comp b/shaders/vulkan/comp/subgroups.nocompat.vk.comp
index a5593f3f..68fc74f9 100644
--- a/shaders/vulkan/comp/subgroups.nocompat.vk.comp
+++ b/shaders/vulkan/comp/subgroups.nocompat.vk.comp
@@ -60,17 +60,29 @@ void main()
// arithmetic
vec4 added = subgroupAdd(vec4(20.0));
+ ivec4 iadded = subgroupAdd(ivec4(20));
vec4 multiplied = subgroupMul(vec4(20.0));
+ ivec4 imultiplied = subgroupMul(ivec4(20));
vec4 lo = subgroupMin(vec4(20.0));
vec4 hi = subgroupMax(vec4(20.0));
+ ivec4 slo = subgroupMin(ivec4(20));
+ ivec4 shi = subgroupMax(ivec4(20));
+ uvec4 ulo = subgroupMin(uvec4(20));
+ uvec4 uhi = subgroupMax(uvec4(20));
uvec4 anded = subgroupAnd(ballot_value);
uvec4 ored = subgroupOr(ballot_value);
uvec4 xored = subgroupXor(ballot_value);
added = subgroupInclusiveAdd(added);
+ iadded = subgroupInclusiveAdd(iadded);
multiplied = subgroupInclusiveMul(multiplied);
+ imultiplied = subgroupInclusiveMul(imultiplied);
lo = subgroupInclusiveMin(lo);
hi = subgroupInclusiveMax(hi);
+ slo = subgroupInclusiveMin(slo);
+ shi = subgroupInclusiveMax(shi);
+ ulo = subgroupInclusiveMin(ulo);
+ uhi = subgroupInclusiveMax(uhi);
anded = subgroupInclusiveAnd(anded);
ored = subgroupInclusiveOr(ored);
xored = subgroupInclusiveXor(ored);
@@ -78,8 +90,14 @@ void main()
added = subgroupExclusiveAdd(multiplied);
multiplied = subgroupExclusiveMul(multiplied);
+ iadded = subgroupExclusiveAdd(imultiplied);
+ imultiplied = subgroupExclusiveMul(imultiplied);
lo = subgroupExclusiveMin(lo);
hi = subgroupExclusiveMax(hi);
+ ulo = subgroupExclusiveMin(ulo);
+ uhi = subgroupExclusiveMax(uhi);
+ slo = subgroupExclusiveMin(slo);
+ shi = subgroupExclusiveMax(shi);
anded = subgroupExclusiveAnd(anded);
ored = subgroupExclusiveOr(ored);
xored = subgroupExclusiveXor(ored);
@@ -87,8 +105,14 @@ void main()
// clustered
added = subgroupClusteredAdd(added, 4u);
multiplied = subgroupClusteredMul(multiplied, 4u);
+ iadded = subgroupClusteredAdd(iadded, 4u);
+ imultiplied = subgroupClusteredMul(imultiplied, 4u);
lo = subgroupClusteredMin(lo, 4u);
hi = subgroupClusteredMax(hi, 4u);
+ ulo = subgroupClusteredMin(ulo, 4u);
+ uhi = subgroupClusteredMax(uhi, 4u);
+ slo = subgroupClusteredMin(slo, 4u);
+ shi = subgroupClusteredMax(shi, 4u);
anded = subgroupClusteredAnd(anded, 4u);
ored = subgroupClusteredOr(ored, 4u);
xored = subgroupClusteredXor(xored, 4u);