rust-gpu
rust-gpu copied to clipboard
SPIR-V Support
This is a tracking issue for tracking what rust-gpu can produce in terms of SPIR-V assembly.
Emoji Legend
- 🛑 — Missing
- ⚠️ — Incomplete
- ✅ — Complete (excluding vendor specific extensions)
Execution Models ✅
Details
- [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