-
[vulkan] Add VK_SUBGROUP_FEATURE_ARITHMETIC_BIT support · b9f03f47David 'Digit' Turner authored
As the name suggest, this CL adds many operations related to arithmetic subgroup operations, i.e.: - Reduction / Inclusive Scan / Exclusive Scans for: - IntAdd, UIntAdd, FloatAdd - IntMul, UIntMul, FloatMul, - IntMin, UIntMin, FloatMin, - IntMax, UIntMax, FloatMax, - BitwiseAnd, BitwiseOr, BitwiseXor - LogicalAnd, LogicalOr, LogicalXor The implementation uses a single template function to implement all these, based on the fact that these are all binary commutative operations. NOTE: Only 32-bit values are supported. To make scans efficient, a new Reactor operation, named Blend() is introduced. It is used to mix two input vectors using 4 3-bit indices (encoded in a single 16-bit value) to select the result's lane values. A new unit-test is added to ReactorUnittests to check its behaviour. Unfortunately, the test takes about 2 minutes on a fast workstation when doing a full scan, so it will by default only check 1/11th of all possible values (see comments in the patch for more details). Also, Float4::positive_inf() and Float4::negative_inf() methods were added, since trying to build Float4(INFINITY) will trigger a DCHECK() in the Float4(float) constructor, and the infinity values are required by the subgroup floating-point scan operations. Bug: b/142002682 Test: dEQP-VK.subgroups.arithmetic.* Change-Id: I86f509fc47f7475ca126615ed698ee493ae835ef Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/38929Reviewed-by:Chris Forbes <chrisforbes@google.com> Reviewed-by:
Ben Clayton <bclayton@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com> Tested-by:
David Turner <digit@google.com>
b9f03f47
×