Skip to content

Examples for Apple's Metal APIs (rendering and compute).

License

Notifications You must be signed in to change notification settings

dehesa/sample-metal

Repository files navigation

Metal Logo & Name

Swift 5.9 Xcode 15 Metal 3.1 MIT License

This repo contains code with examples on how to use Apple's Metal GPU APIs. Some sample code has been created entirely by me, while others have been picked from Github. The latter ones are in this repo because they have been heavily modified, not only to support the latest version of Swift and SwiftUI, but also to add support to macOS, iOS, and tvOS. Links to the source Github repos or websites are provided.

Projects

  • Playgrounds.

    • Memory size, stride, and alignment.
    • MTKView as a Playground live view.
  • Command-Line apps.

    GPU Inspector.

    Prints on stdout a brief description of all your available GPUs. For example:

    Apple M1 Max
      Built-in GPU
      Unified memory (shared with CPU)
        max recommended working set: 48 GB
      Feature set support
        family: apple 1, apple 2, apple 3, apple 4, apple 5, apple 6, apple 7, metal 3
      General Purpose Computing
        max threadgroup memory: 32 kB
        max threads per threadgroup: [1024, 1024, 1024]
        threads execution width: 32
    
    Intel(R) HD Graphics 530
      Built-in GPU (low power)
      Unified memory (shared with CPU)
        max recommended working set: 1.61 GB
      Feature set support
        family: common 1, common 2, common 3, apple 1, apple 2, apple 3, apple 4
      General Purpose Computing
        max threadgroup memory: 64 KB
        max threads per threadgroup: [1024, 1024, 1024]
        threads execution width: 32
    
    AMD Radeon Pro 460
      Built-in GPU
      Discrete memory
        max recommended working set: 4.29 GB
      Feature set support
        family: common 1, common 2, common 3, apple 1, apple 2, apple 3, apple 4
      General Purpose Computing
        max threadgroup memory: 64 KB
        max threads per threadgroup: [1024, 1024, 1024]
        threads execution width: 64
    

    Gray converter.

    Transform an image into its gray-scale version.

    This command-line utitily expects a single argument indicating the location of the image to transform and outputs the gray scale version to the ~/Desktop with name out.png. You can run it from Xcode by pressing ⌘ R. This project scheme has an argument where you can specify a different image from the default image.

    This utility is based on Safx' gray converter compute sample.

  • Apple's sample code.

    Basic Tessellation.

    This sample shows how to tessellate a triangle or quad patch with adjustable per-patch tessellation factors.

    macOS app tessellating a triangle

  • Metal by Example.
    Warren Moore wrote this book in 2015. It was and it remains one of the best introductions to Metal I have found. I've migrated most chapters to the latest Swift and I've added support to macOS.

    • Clear Screen.
    • Draw 2D triangle.
    • Draw spinning 3D cube.
    • Draw spinning teapot with manual lighting.
    • Draw spinning cow with manual lighting and custom texture.
  • Shader Exam.
    Leon Denise wrote a tweet with a typical shader exam he gives to his students on SupInfo.com.

    • Page 1: pass, mirror, symmetry, rotation, zoom, zoomDistortion, repetition, spiral, thunder.
    • Page 2: clamp, pli, color direction, pixelated, vague, column, crash, scanline, double frequency.
    • Page 3: black & white, threshold, thresholds, sonar, grill, stamp, local negative, chromatic aberration, chroma key
    • Page 4: vague, chubby, skinny, twist, glitch, voxel glitch, basic shading, toon shading, cell shading
    • Page 5: sphere, sphere repeat, pyramid, polar module, tube twist, tube web, volumetric cloud, strangler fig, kirby

About

Examples for Apple's Metal APIs (rendering and compute).

Topics

Resources

License

Stars

Watchers

Forks