Metal Shader Debugging and Profiling

WWDC 2018

Posted by Den on August 31, 2018 · 11 mins read
Metal Shader Debugging and Profiling

Metal Shader Debugging and Profiling

WWDC 2018

Metal Shader Debugging and Profiling

WWDC 2018

Metal Frame Debugger

  • Step through API calls
  • Resource inspection
  • Shader edit and reload
  • GPU counters
  • Pipeline statics
  • Integrated into Xcode
  • Dependency viewer (new)
  • Geometry viewer (new)
  • Shader debugger (new)
  • Enhanced shader profiler (new)

Geometry Viewer

  • Visualize the post-vertex transform data in 3D
  • Access to all vertex data
  • Per-draw call view

Visibly Wrong Triangles

Out of Frustum Objects

Missing Triangles

Why use Shader Debugger?

  • Math heavy code
  • Highly parallel
  • Unity’s “Book of the Deed”
    - ~10 million vertex shader invocations
    - ~60 million pixels rendered

Shader Debugging

  • New tool for debugging Metal shaders
  • Rich variable visualization across thousands of threads
  • Real data from GPU
  • Flexible stepping
  • Integrated into Metal Frame Debugger

Demo

Problem (negative value)


Fining the bug

Values in realtime
Call Stack

Fix the Bug


Refresh

(You don’t need to rebuild)


Starting the Shader Debugger

Inspecting Variables

Following the Execution

Flexible stepping
Use filter to focus

Access to Other Threads

Set of threads are available based on the initial selection

  • Vertex — Primitive of the selected vertex
  • Fragment — Rectangle around the selected pixel
  • Compute — Threadgroup of the selected thread

See Variables in Context

  • Helps you understand your code
  • Important to for comparing good/ bad values
  • Hover for instant access

Comparing Good and Bad Pixels

  • Quickly compare threads
  • Execution history and variables and updated for the selected thread

Understanding Divergence

  • Mask shows which threads executed the same line to help you understand control flow

Demo

Problem


Finding the Bug


QA

Shader Debugger

  • Specifically designed for debugging Metal shaders
  • Great for
    - Fixing bugs!
    - Understanding your shader
    - Developing your shaders
  • Supports iOS, macOS, and tvOS
  • Available in Xcode 10

Knowing What to Optimized

Profiling tools built into Metal Frame Debugger

  • GPU counters
  • Pipeline statistics
  • Shader profiler

Shader Profiler

  • Provides per-pipeline timing information
  • Per-line execution cost (iOS and tvOS)
  • Shader edit and reload
  • Get into shader debugger

Enhanced Shader Profiler for A11

  • Instruction category cost breakdown per line
    - ALU — Float, half, and complex
    - Memory — Sample, load, and store operations
    - Synchronization — Wait memory, barriers, or atomics
  • Visibility into inline function cost

Demo

Access to Shader Sources

  • New Metal Compiler option
  • Xcode project
    - “Yes, include source code” from build settings
  • Command line
    - “-MO” compiler option