Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

SPIR-V 1.5 Testing #2140

Open
2 tasks
bashbaug opened this issue Nov 4, 2024 · 1 comment
Open
2 tasks

SPIR-V 1.5 Testing #2140

bashbaug opened this issue Nov 4, 2024 · 1 comment

Comments

@bashbaug
Copy link
Contributor

bashbaug commented Nov 4, 2024

Here is a similar tracking issue for SPIR-V 1.5 testing.

I believe we only need to add two new test cases for SPIR-V 1.5, since SPIR-V 1.5 was primarily Vulkan-focused:

  • New Behavior:
    • OpBitcast supports bitcasts between a pointer and an integer vector.
    • OpGroupNonUniformBroadcast supports a non-constant (but dynamically uniform) broadcast index.
@bashbaug
Copy link
Contributor Author

bashbaug commented Nov 4, 2024

In case it is helpful, here are my SPIR-V 1.5 notes:

Required Support

  • OpBitcast supports bitcasts between a pointer and an integer vector.
  • OpGroupNonUniformBroadcast supports a non-constant (but dynamically uniform) broadcast index.
    • OpGroupNonUniformQuadBroadcast does as well, but we do not currently support the GroupNonUniformQuad capability.

Deprecations

  • OpLessOrGreater is deprecated, use OpFOrdNotEqual instead.

Possible Support

The following SPIR-V 1.5 capabilities do not directly imply 'Shader', but I recommend that we do not require them:

Operand kind Capability: VulkanMemoryModel
Operand kind Capability: VulkanMemoryModelDeviceScope
  • VulkanMemoryModel (not supporting)
  • VulkanMemoryModelDeviceScope (only relevant with VulkanMemoryModel)
Operand kind Capability: ShaderLayer
Operand kind Capability: ShaderViewportIndex
  • ShaderLayer (only relevant for Vertex or Tessellation execution models)
  • ShaderViewportIndex (only relevant for Vertex or Tessellation execution models)
Operand kind Capability: StorageBuffer8BitAccess
Operand kind Capability: UniformAndStorageBuffer8BitAccess
  Requires Capabilities: ['StorageBuffer8BitAccess']
Operand kind Capability: StoragePushConstant8
  • StorageBuffer8BitAccess (requires StorageBuffer storage class -> Shader)
  • UniformAndStorageBuffer8BitAccess (requires StorageBuffer8BitAccess)
  • StoragePushConstant8 (requires PushConstant storage class -> Shader)
Operand kind Capability: UniformTexelBufferArrayDynamicIndexing
  Requires Capabilities: ['SampledBuffer']
Operand kind Capability: StorageTexelBufferArrayDynamicIndexing
  Requires Capabilities: ['ImageBuffer']
  • UniformTexelBufferArrayDynamicIndexing (not supporting any forms of dynamic indexing)
  • StorageTexelBufferArrayDynamicIndexing (requires ImageBuffer, which enables OpTypeImage with Sampled == 2)

Tied to VulkanMemoryModel:

Operand kind MemoryModel: Vulkan
  Requires Capabilities: ['VulkanMemoryModel']
Operand kind ImageOperands: MakeTexelAvailable
  Requires Capabilities: ['VulkanMemoryModel']
Operand kind Scope: QueueFamily
  Requires Capabilities: ['VulkanMemoryModel']
Operand kind ImageOperands: MakeTexelVisible
  Requires Capabilities: ['VulkanMemoryModel']
Operand kind ImageOperands: NonPrivateTexel
  Requires Capabilities: ['VulkanMemoryModel']
Operand kind ImageOperands: VolatileTexel
  Requires Capabilities: ['VulkanMemoryModel']
Operand kind MemorySemantics: OutputMemory
  Requires Capabilities: ['VulkanMemoryModel']
Operand kind MemorySemantics: MakeAvailable
  Requires Capabilities: ['VulkanMemoryModel']
Operand kind MemorySemantics: MakeVisible
  Requires Capabilities: ['VulkanMemoryModel']
Operand kind MemorySemantics: Volatile
  Requires Capabilities: ['VulkanMemoryModel']
Operand kind MemoryAccess: MakePointerAvailable
  Requires Capabilities: ['VulkanMemoryModel']
Operand kind MemoryAccess: MakePointerVisible
  Requires Capabilities: ['VulkanMemoryModel']
Operand kind MemoryAccess: NonPrivatePointer
  Requires Capabilities: ['VulkanMemoryModel']

Tied to Shader:

Operand kind AddressingModel: PhysicalStorageBuffer64
  Requires Capabilities: ['PhysicalStorageBufferAddresses'] -> ['Shader']
Operand kind StorageClass: PhysicalStorageBuffer
  Requires Capabilities: ['PhysicalStorageBufferAddresses'] -> ['Shader']
Operand kind Decoration: NonUniform
  Requires Capabilities: ['ShaderNonUniform'] -> ['Shader']
Operand kind Decoration: RestrictPointer
  Requires Capabilities: ['PhysicalStorageBufferAddresses'] -> ['Shader']
Operand kind Decoration: AliasedPointer
  Requires Capabilities: ['PhysicalStorageBufferAddresses'] -> ['Shader']
Operand kind Capability: ShaderNonUniform
  Requires Capabilities: ['Shader']
Operand kind Capability: RuntimeDescriptorArray
  Requires Capabilities: ['Shader']
Operand kind Capability: InputAttachmentArrayDynamicIndexing
  Requires Capabilities: ['InputAttachment'] -> ['Shader']
Operand kind Capability: UniformBufferArrayNonUniformIndexing
  Requires Capabilities: ['ShaderNonUniform'] -> ['Shader']
Operand kind Capability: SampledImageArrayNonUniformIndexing
  Requires Capabilities: ['ShaderNonUniform'] -> ['Shader']
Operand kind Capability: StorageBufferArrayNonUniformIndexing
  Requires Capabilities: ['ShaderNonUniform'] -> ['Shader']
Operand kind Capability: StorageImageArrayNonUniformIndexing
  Requires Capabilities: ['ShaderNonUniform'] -> ['Shader']
Operand kind Capability: InputAttachmentArrayNonUniformIndexing
  Requires Capabilities: ['InputAttachment', 'ShaderNonUniform'] -> ['Shader']
Operand kind Capability: UniformTexelBufferArrayNonUniformIndexing
  Requires Capabilities: ['SampledBuffer', 'ShaderNonUniform'] -> ['Shader']
Operand kind Capability: StorageTexelBufferArrayNonUniformIndexing
  Requires Capabilities: ['ImageBuffer', 'ShaderNonUniform'] -> ['Shader']
Operand kind Capability: PhysicalStorageBufferAddresses
  Requires Capabilities: ['Shader']

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant