iOS Metal Framework - NSMeetup - @greensamuelm
description
Transcript of iOS Metal Framework - NSMeetup - @greensamuelm
![Page 2: iOS Metal Framework - NSMeetup - @greensamuelm](https://reader033.fdocuments.us/reader033/viewer/2022051817/547e7b33b47959a7508b4bcc/html5/thumbnails/2.jpg)
You know the drill
but I have to say it:
The views I express here do not necessarily reflect those of my employer.
(But, we are recruiting!)
![Page 3: iOS Metal Framework - NSMeetup - @greensamuelm](https://reader033.fdocuments.us/reader033/viewer/2022051817/547e7b33b47959a7508b4bcc/html5/thumbnails/3.jpg)
![Page 4: iOS Metal Framework - NSMeetup - @greensamuelm](https://reader033.fdocuments.us/reader033/viewer/2022051817/547e7b33b47959a7508b4bcc/html5/thumbnails/4.jpg)
![Page 5: iOS Metal Framework - NSMeetup - @greensamuelm](https://reader033.fdocuments.us/reader033/viewer/2022051817/547e7b33b47959a7508b4bcc/html5/thumbnails/5.jpg)
Overview
● Low overhead● Unified graphics and compute shaders● Efficient multithreading● Designed for A7 & A8
○ iPhone 5S, 6, 6+○ iPad Mini Retina
![Page 6: iOS Metal Framework - NSMeetup - @greensamuelm](https://reader033.fdocuments.us/reader033/viewer/2022051817/547e7b33b47959a7508b4bcc/html5/thumbnails/6.jpg)
![Page 7: iOS Metal Framework - NSMeetup - @greensamuelm](https://reader033.fdocuments.us/reader033/viewer/2022051817/547e7b33b47959a7508b4bcc/html5/thumbnails/7.jpg)
![Page 8: iOS Metal Framework - NSMeetup - @greensamuelm](https://reader033.fdocuments.us/reader033/viewer/2022051817/547e7b33b47959a7508b4bcc/html5/thumbnails/8.jpg)
Setting up texturing in OpenGLglGenTextures(1, &texName);glBindTexture(GL_TEXTURE_2D, texName);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, checkImageWidth, checkImageHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, checkImage);
![Page 9: iOS Metal Framework - NSMeetup - @greensamuelm](https://reader033.fdocuments.us/reader033/viewer/2022051817/547e7b33b47959a7508b4bcc/html5/thumbnails/9.jpg)
![Page 10: iOS Metal Framework - NSMeetup - @greensamuelm](https://reader033.fdocuments.us/reader033/viewer/2022051817/547e7b33b47959a7508b4bcc/html5/thumbnails/10.jpg)
Design Goals
● Thinnest API Possible● Modern GPU features● Predictable performance● Explicit control over commands● Do expensive tasks less often
![Page 11: iOS Metal Framework - NSMeetup - @greensamuelm](https://reader033.fdocuments.us/reader033/viewer/2022051817/547e7b33b47959a7508b4bcc/html5/thumbnails/11.jpg)
Demo
![Page 12: iOS Metal Framework - NSMeetup - @greensamuelm](https://reader033.fdocuments.us/reader033/viewer/2022051817/547e7b33b47959a7508b4bcc/html5/thumbnails/12.jpg)
Why GPU programming is expensive
● State validation● Shader compilation● Sending work to the GPU
![Page 13: iOS Metal Framework - NSMeetup - @greensamuelm](https://reader033.fdocuments.us/reader033/viewer/2022051817/547e7b33b47959a7508b4bcc/html5/thumbnails/13.jpg)
Metal Objects
● Device● Command Queue● Command Buffer● Command Encoder● State● Code● Resources
![Page 14: iOS Metal Framework - NSMeetup - @greensamuelm](https://reader033.fdocuments.us/reader033/viewer/2022051817/547e7b33b47959a7508b4bcc/html5/thumbnails/14.jpg)
![Page 15: iOS Metal Framework - NSMeetup - @greensamuelm](https://reader033.fdocuments.us/reader033/viewer/2022051817/547e7b33b47959a7508b4bcc/html5/thumbnails/15.jpg)
Command Submission Model
● Convert API commands into hardware commands
● Three types of command encoders○ Compute○ Blit○ Render
![Page 16: iOS Metal Framework - NSMeetup - @greensamuelm](https://reader033.fdocuments.us/reader033/viewer/2022051817/547e7b33b47959a7508b4bcc/html5/thumbnails/16.jpg)
Resource Update Model
Designed for the unified memory system of iOS devices.CPU and GPU share the exact same storage.Two types of resources:● Textures (formatted images)● Buffers (unformatted bytes)
![Page 17: iOS Metal Framework - NSMeetup - @greensamuelm](https://reader033.fdocuments.us/reader033/viewer/2022051817/547e7b33b47959a7508b4bcc/html5/thumbnails/17.jpg)
Command Encoder Types
● Render● Compute● Blit
![Page 18: iOS Metal Framework - NSMeetup - @greensamuelm](https://reader033.fdocuments.us/reader033/viewer/2022051817/547e7b33b47959a7508b4bcc/html5/thumbnails/18.jpg)
Render Command Encoder
● Combines all commands for a single FBO● State● No more “draw time” compilation
![Page 19: iOS Metal Framework - NSMeetup - @greensamuelm](https://reader033.fdocuments.us/reader033/viewer/2022051817/547e7b33b47959a7508b4bcc/html5/thumbnails/19.jpg)
Compute Command Encoder
● Called the compute kernel● Local atomics● Barriers● Memory loads and stores● User-specified workgroup dimensions
![Page 20: iOS Metal Framework - NSMeetup - @greensamuelm](https://reader033.fdocuments.us/reader033/viewer/2022051817/547e7b33b47959a7508b4bcc/html5/thumbnails/20.jpg)
Blit Command Encoder
Enables async copies in parallel with graphics and compute
![Page 21: iOS Metal Framework - NSMeetup - @greensamuelm](https://reader033.fdocuments.us/reader033/viewer/2022051817/547e7b33b47959a7508b4bcc/html5/thumbnails/21.jpg)
Metal Shading Language
Unified shading language for graphics and compute
C++11
Multiple shaders per source file
![Page 22: iOS Metal Framework - NSMeetup - @greensamuelm](https://reader033.fdocuments.us/reader033/viewer/2022051817/547e7b33b47959a7508b4bcc/html5/thumbnails/22.jpg)
Argument Tables
Textures, buffers, and samplers passed as arguments to functions
Each command encoder includes a set of Argument Tables
![Page 23: iOS Metal Framework - NSMeetup - @greensamuelm](https://reader033.fdocuments.us/reader033/viewer/2022051817/547e7b33b47959a7508b4bcc/html5/thumbnails/23.jpg)
Developer Tools
● Shader compiler● Visual frame debugger● API trace and navigation● Live shader editing● Graphics and compute state inspection● Debug mode!
![Page 24: iOS Metal Framework - NSMeetup - @greensamuelm](https://reader033.fdocuments.us/reader033/viewer/2022051817/547e7b33b47959a7508b4bcc/html5/thumbnails/24.jpg)
Thanks!
● To all of you for attending!
● Steve Derico for organizing!
● My colleagues at Kamcord for their unending
support!