SPIR-V Support
- [x] Vertex - [x] Tessellation Control - [x] Tessellation Evaluation - [x] Geometry - [x] Fragment - [x] GLCompute - [x] Kernel (Compute) - [x] TaskNV - [x] MeshNV - [x] Ray Generation NV - [x] Ray Intersection NV - [x] Ray Any-hit NV - [x] Ray Closest-hit NV - [x] Ray Miss NV - [x] Ray Callable NV
## Addressing Model ⚠️ Details- [x] Logical - [ ] Physical32 - [ ] Physical64 - [ ] PhysicalStorageBuffer64
## Memory Model ✅ Details- [x] Simple - [x] GLSL450 - [x] OpenCL - [x] Vulkan
## Execution Modes ⚠️ Details ### All models ✅ Details- [x] Initializer - [x] Finalizer - [x] SubgroupSize - [x] SubgroupsPerWorkgroup - [x] SubgroupsPerWorkgroupId - [x] PostDepthCoverage - [x] DenormPreserve - [x] DenormFlushToZero - [x] SignedZeroInfNanPreserve - [x] RoundingModeRTE - [x] RoundingModeRTZ
### Kernel ✅ Details- [x] LocalSizeHint - [x] LocalSizeHintId - [x] VecTypeHint - [x] ContractionOff
### Kernel & GLCompute ✅ Details- [x] LocalSize - [x] LocalSizeId
### Geometry ✅ Details- [x] Invocations - [x] InputPoints - [x] InputLines - [x] InputLinesAdjacency - [x] InputTrianglesAdjacency
### Geometry & Tessellation ✅ Details- [x] Triangles - [x] OutputVertices
### Fragment ⚠️ Details- [x] PixelCenterInteger - [ ] OriginUpperLeft - [x] OriginLowerLeft - [x] EarlyFragmentTests - [x] DepthReplacing - [x] DepthGreater - [x] DepthLess - [x] DepthUnchanged - [x] OutputPoints - [x] OutputLineStrip - [x] OutputTriangleStrip
### Tessellation ⚠️ Details- [x] SpacingEqual - [x] SpacingFractionalEven - [x] SpacingFractionalOdd - [x] VertexOrderCw - [x] VertexOrderCcw - [x] PointMode - [x] Quads - [ ] Isolines
### Vertex ✅ - [x] Xfb ## Storage Classes ✅ Details- [x] UniformConstant - [x] Input - [x] Uniform - [x] Output - [x] Workgroup - [x] CrossWorkgroup - [x] Private - [x] Function - [x] Generic - [x] PushConstant - [x] AtomicCounter - [x] Image - [x] StorageBuffer - [x] CallableDataKHR - [x] IncomingCallableDataKHR - [x] RayPayloadKHR - [x] HitAttributeKHR - [x] IncomingRayPayloadKHR - [x] ShaderRecordBufferKHR - [x] PhysicalStorageBuffer
## Image ⚠️ Details- [x] OpSampledImage - [x] OpImageSampleImplicitLod - [x] OpImageSampleExplicitLod - [x] OpImageSampleDrefImplicitLod - [x] OpImageSampleDrefExplicitLod - [x] OpImageSampleProjImplicitLod - [x] OpImageSampleProjExplicitLod - [x] OpImageSampleProjDrefImplicitLod - [x] OpImageSampleProjDrefExplicitLod - [x] OpImageFetch - [ ] OpImageGather - [ ] OpImageDrefGather - [x] OpImageRead - [x] OpImageWrite - [ ] OpImageQueryFormat - [ ] OpImageQueryOrder - [ ] OpImageQuerySizeLod - [ ] OpImageQuerySize - [ ] OpImageQueryLod - [ ] OpImageQueryLevels - [ ] OpImageQuerySamples - [ ] OpImageSparseSampleImplicitLod - [ ] OpImageSparseSampleExplicitLod - [ ] OpImageSparseSampleDrefImplicitLod - [ ] OpImageSparseSampleDrefExplicitLod - [ ] OpImageSparseFetch - [ ] OpImageSparseGather - [ ] OpImageSparseDrefGather - [ ] OpImageSparseTexelsResident - [ ] OpImageSparseRead
## Conversions Details- [ ] Float <-> unsigned integer - [ ] Float <-> signed integer - [ ] OpUconvert - [ ] OpSConvert - [ ] OpFConvert - [ ] OpQuantizeToF16 - [ ] OpConvertPtrToU - [ ] OpSatConvertSToU - [ ] OpSatConvertUToS - [ ] OpConvertUToPtr - [ ] OpPtrCastToGeneric - [ ] OpGenericCastToPtr - [ ] OpGenericCastToPtrExplicit - [ ] OpBitcast
## Composite ⚠️ Details- [x] OpVectorExtractDynamic - [x] OpVectorInsertDynamic - [ ] OpVectorShuffle - [ ] OpTranspose
## Arithmetic ⚠️ Details- [x] OpSNegate - [x] OpFNegate - [x] OpIAdd - [x] OpFAdd - [x] OpISub - [x] OpFSub - [x] OpIMul - [x] OpFMul - [x] OpUDiv - [x] OpSDiv - [x] OpFDiv - [x] OpUMod - [x] OpSRem - [x] OpSMod - [x] OpFRem - [x] OpFMod - [x] OpVectorTimesScalar - [ ] OpMatrixTimesScalar - [ ] OpVectorTimesMatrix - [ ] OpMatrixTimesVector - [ ] OpMatrixTimesMatrix - [ ] OpOuterProduct - [ ] OpDot - [ ] OpIAddCarry - [ ] OpISubBorrow - [ ] OpUMulExtended - [ ] OpSMulExtended
## Bit ⚠️ Details- [x] OpShiftRightLogical - [ ] OpShiftRightArithmetic - [x] OpShiftLeftLogical - [x] OpBitwiseOr - [x] OpBitwiseXor - [x] OpBitwiseAnd - [x] OpNot - [ ] OpBitFieldInsert - [ ] OpBitFieldSExtract - [ ] OpBitFieldUExtract - [ ] OpBitReverse - [ ] OpBitCount
## Relational & Logical ⚠️ Details- [x] OpAny - [x] OpAll - [ ] OpIsNan - [ ] OpIsInf - [ ] OpIsFinite - [ ] OpIsNormal - [ ] OpSignBitSet - [ ] OpLessOrGreater - [ ] OpOrdered - [ ] OpUnordered - [ ] OpLogicalEqual - [ ] OpLogicalNotEqual - [ ] OpLogicalOr - [ ] OpLogicalAnd - [ ] OpLogicalNot - [ ] OpSelect - [ ] OpIEqual - [ ] OpINotEqual - [ ] OpUGreaterThan - [ ] OpSGreaterThan - [ ] OpUGreaterThanEqual - [ ] OpSGreaterThanEqual - [ ] OpULessThan - [ ] OpSLessThan - [ ] OpULessThanEqual - [ ] OpSLessThanEqual - [ ] OpFOrdEqual - [ ] OpFUnordEqual - [ ] OpFOrdNotEqual - [ ] OpFUnordNotEqual - [ ] OpFOrdLessThan - [ ] OpFUnordLessThan - [ ] OpFOrdGreaterThan - [ ] OpFUnordGreaterThan - [ ] OpFOrdLessThanEqual - [ ] OpFUnordLessThanEqual - [ ] OpFOrdGreaterThanEqual - [ ] OpFUnordGreaterThanEqual
## Derivative ✅ Details- [x] OpDPdx - [x] OpDPdy - [x] OpFwidth - [x] OpDPdxFine - [x] OpDPdyFine - [x] OpFwidthFine - [x] OpDPdxCoarse - [x] OpDPdyCoarse - [x] OpFwidthCoarse
## Atomic Details- [ ] OpAtomicLoad - [ ] OpAtomicStore - [ ] OpAtomicExchange - [ ] OpAtomicCompareExchange - [ ] OpAtomicCompareExchangeWeak - [ ] OpAtomicIIncrement - [ ] OpAtomicIDecrement - [ ] OpAtomicIAdd - [ ] OpAtomicISub - [ ] OpAtomicSMin - [ ] OpAtomicUMin - [ ] OpAtomicSMax - [ ] OpAtomicUMax - [ ] OpAtomicAnd - [ ] OpAtomicOr - [ ] OpAtomicXor - [ ] OpAtomicFlagTestAndSet - [ ] OpAtomicFlagClear
## Barrier Details- [ ] OpControlBarrier - [ ] OpMemoryBarrier - [ ] OpNamedBarrierInitialize - [ ] OpMemoryNamedBarrier
## Group & Subgroup Details- [ ] OpGroupAsyncCopy - [ ] OpGroupWaitEvents - [ ] OpGroupAll - [ ] OpGroupAny - [ ] OpGroupBroadcast - [ ] OpGroupIAdd - [ ] OpGroupFAdd - [ ] OpGroupFMin - [ ] OpGroupUMin - [ ] OpGroupSMin - [ ] OpGroupFMax - [ ] OpGroupUMax - [ ] OpGroupSMax
## Device-side Enqueue Details- [ ] OpEnqueueMarker - [ ] OpEnqueueKernel - [ ] OpGetKernelNDrangeSubGroupCount - [ ] OpGetKernelNDrangeMaxSubGroupSize - [ ] OpGetKernelWorkGroupSize - [ ] OpGetKernelPreferredWorkGroupSizeMultiple - [ ] OpRetainEvent - [ ] OpReleaseEvent - [ ] OpCreateUserEvent - [ ] OpIsValidEvent - [ ] OpSetUserEventStatus - [ ] OpCaptureEventProfilingInfo - [ ] OpGetDefaultQueue - [ ] OpBuildNDRange - [ ] OpGetKernelLocalSizeForSubgroupCount - [ ] OpGetKernelMaxNumSubgroups
## Pipe Details- [ ] OpReadPipe - [ ] OpWritePipe - [ ] OpReservedReadPipe - [ ] OpReservedWritePipe - [ ] OpReserveReadPipePackets - [ ] OpReserveWritePipePackets - [ ] OpCommitReadPipe - [ ] OpCommitWritePipe - [ ] OpIsValidReserveId - [ ] OpGetNumPipePackets - [ ] OpGetMaxPipePackets - [ ] OpGroupReserveReadPipePackets - [ ] OpGroupReserveWritePipePackets - [ ] OpGroupCommitReadPipe - [ ] OpGroupCommitWritePipe - [ ] OpConstantPipeStorage - [ ] OpCreatePipeFromPipeStorage
## Non-uniform Details- [ ] OpGroupNonUniformElect - [ ] OpGroupNonUniformAll - [ ] OpGroupNonUniformAny - [ ] OpGroupNonUniformAllEqual - [ ] OpGroupNonUniformBroadcast - [ ] OpGroupNonUniformBroadcastFirst - [ ] OpGroupNonUniformBallot - [ ] OpGroupNonUniformInverseBallot - [ ] OpGroupNonUniformBallotBitExtract - [ ] OpGroupNonUniformBallotBitCount - [ ] OpGroupNonUniformBallotFindLSB - [ ] OpGroupNonUniformBallotFindMSB - [ ] OpGroupNonUniformShuffle - [ ] OpGroupNonUniformShuffleXor - [ ] OpGroupNonUniformShuffleUp - [ ] OpGroupNonUniformShuffleDown - [ ] OpGroupNonUniformIAdd - [ ] OpGroupNonUniformFAdd - [ ] OpGroupNonUniformIMul - [ ] OpGroupNonUniformFMul - [ ] OpGroupNonUniformSMin - [ ] OpGroupNonUniformUMin - [ ] OpGroupNonUniformFMin - [ ] OpGroupNonUniformSMax - [ ] OpGroupNonUniformUMax - [ ] OpGroupNonUniformFMax - [ ] OpGroupNonUniformBitwiseAnd - [ ] OpGroupNonUniformBitwiseOr - [ ] OpGroupNonUniformBitwiseXor - [ ] OpGroupNonUniformLogicalAnd - [ ] OpGroupNonUniformLogicalOr - [ ] OpGroupNonUniformLogicalXor - [ ] OpGroupNonUniformQuadBroadcast - [ ] OpGroupNonUniformQuadSwap
Source: EmbarkStudios/rust-gpu