Metal 2 on A11 — Imageblocks
Metal 2 on A11 — Imageblocks
Tech Talks
Imageblocks
- 2D data structure accessible from shaders
- Single pixel access from fragment functions
- Full access from kernel functions - Multi-plane layout
- Efficient bulk storage of pixels to textures - Supports optional format conversion
Accelerated Image Movement
Imageblocks in Compute Kernels
- Dimensions are defined via API
MTLComputeCommandEncoder.setImageBlockWidth(_:height:)
- Pixel structure defined in shading language
- Accessed using an
imageblock<T>
argument
Storing Imageblock Slices to Textures
- Adjacent subsets of imageblock planes are called slices
- Slices of up to 4 components can e stored together
Imageblocks in Fragment Functions
- Dimensions are defined via render pass API
-MTLRenderPassDescription.titleWidth
-MTLRenderPassDescription.titleHeight
- 2 ways to declare pixel structure
- Define it in the function (explicit)
- Use render pass attachments (implicit)
Implicit Imageblock
Improved space efficiency
Choosing Between Implicit and Explicit Imageblocks
- Implicit
- Function must support multiple texture pixel formats
- Convenience of load and store actions - Explicit
- Define complex per-pixel data types
- Transient usage within a render pass
Mixing Implicit and Explicit Imageblocks
- Choose the right tool for the job !
- Supports incremental adoption
- In shading language, supply 2 imageblock arguments
New Packed Data Types
- New shading language types match API pixel formats
- Accelerated conversion to / from floating point
- Describe packed layouts everywhere
- Explicit imageblocks
- Vertex attributes
- Uniforms