What s New in Metal, Part 2

Size: px
Start display at page:

Download "What s New in Metal, Part 2"

Transcription

1 Graphics and Games #WWDC15 What s New in Metal, Part 2 Session 607 Dan Omachi GPU Software Frameworks Engineer Anna Tikhonova GPU Software Frameworks Engineer 2015 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission from Apple.

2

3

4

5 MetalKit Utility functionality for Metal Apps

6 MetalKit

7 MetalKit MetalKit provides efficient implementations for commonly used scenarios Less effort to get up and rendering Increased performance and stability

8 MetalKit Overview

9 MetalKit Overview MetalKit View Unified view class for rendering Metal scenes

10 MetalKit Overview MetalKit View Unified view class for rendering Metal scenes Texture Loader Metal texture object creation from image files

11 MetalKit Overview MetalKit View Unified view class for rendering Metal scenes Texture Loader Metal texture object creation from image files Model I/O Integration Load and manage mesh data for Metal rendering

12 MetalKit View Overview Simplest way to get Metal rendering on screen

13 MetalKit View Overview Simplest way to get Metal rendering on screen Unified between ios and OS X Subclass of UIView for ios Subclass of NSView for OS X

14 MetalKit View Overview Simplest way to get Metal rendering on screen Unified between ios and OS X Subclass of UIView for ios Subclass of NSView for OS X Manages render targets Creates render pass descriptors

15 MetalKit View Overview Simplest way to get Metal rendering on screen Unified between ios and OS X Subclass of UIView for ios Subclass of NSView for OS X Manages render targets Creates render pass descriptors Multiple draw loop modes supported Timer, event, or explicitly driven draw loop

16 MetalKit View Setup Approaches to using MTKView

17 MetalKit View Setup Approaches to using MTKView A. Implement a delegate - (void)drawinview:(mtkview *)view - (void)view:(mtkview *)view willlayoutwithsize:(cgsize)size

18 MetalKit View Setup Approaches to using MTKView A. Implement a delegate - (void)drawinview:(mtkview *)view - (void)view:(mtkview *)view willlayoutwithsize:(cgsize)size

19 MetalKit View Setup Approaches to using MTKView A. Implement a delegate - (void)drawinview:(mtkview *)view - (void)view:(mtkview *)view willlayoutwithsize:(cgsize)size B. Subclass MTKView ios OS X - (void)drawrect:(cgrect)rect - (void)layoutsubviews - (void)drawrect:(cgrect)rect - (void)setframesize:(nssize)newsize

20 MetalKit View Setup Approaches to using MTKView A. Implement a delegate - (void)drawinview:(mtkview *)view - (void)view:(mtkview *)view willlayoutwithsize:(cgsize)size B. Subclass MTKView ios OS X - (void)drawrect:(cgrect)rect - (void)layoutsubviews - (void)drawrect:(cgrect)rect - (void)setframesize:(nssize)newsize

21 MetalKit View Setup Approaches to using MTKView A. Implement a delegate - (void)drawinview:(mtkview *)view - (void)view:(mtkview *)view willlayoutwithsize:(cgsize)size B. Subclass MTKView ios OS X - (void)drawrect:(cgrect)rect - (void)layoutsubviews - (void)drawrect:(cgrect)rect - (void)setframesize:(nssize)newsize

22 MetalKit View Setup Initializing view properties - (void)viewdidload { MTKView *view = (MTKView *)self.view; view.delegate = self; view.device = device; view.colorpixelformat = MTLPixelFormatBGRA8Unorm_sRGB; view.depthstencilpixelformat = MTLPixelFormatDepth32Float_Stencil8; view.samplecount = 4; view.clearcolor = MTLClearColorMake(0.8, 0.8, 0.8, 1.0); }

23 MetalKit View Setup Initializing view properties - (void)viewdidload { MTKView *view = (MTKView *)self.view; view.delegate = self; view.device = device; view.colorpixelformat = MTLPixelFormatBGRA8Unorm_sRGB; view.depthstencilpixelformat = MTLPixelFormatDepth32Float_Stencil8; view.samplecount = 4; view.clearcolor = MTLClearColorMake(0.8, 0.8, 0.8, 1.0); }

24 MetalKit View Setup Initializing view properties - (void)viewdidload { MTKView *view = (MTKView *)self.view; view.delegate = self; view.device = device; view.colorpixelformat = MTLPixelFormatBGRA8Unorm_sRGB; view.depthstencilpixelformat = MTLPixelFormatDepth32Float_Stencil8; view.samplecount = 4; view.clearcolor = MTLClearColorMake(0.8, 0.8, 0.8, 1.0); }

25 MetalKit View Setup Initializing view properties - (void)viewdidload { MTKView *view = (MTKView *)self.view; view.delegate = self; view.device = device; view.colorpixelformat = MTLPixelFormatBGRA8Unorm_sRGB; view.depthstencilpixelformat = MTLPixelFormatDepth32Float_Stencil8; view.samplecount = 4; view.clearcolor = MTLClearColorMake(0.8, 0.8, 0.8, 1.0); }

26 MetalKit View Setup Initializing view properties - (void)viewdidload { MTKView *view = (MTKView *)self.view; view.delegate = self; view.device = device; view.colorpixelformat = MTLPixelFormatBGRA8Unorm_sRGB; view.depthstencilpixelformat = MTLPixelFormatDepth32Float_Stencil8; view.samplecount = 4; view.clearcolor = MTLClearColorMake(0.8, 0.8, 0.8, 1.0); }

27 MetalKit View Setup Initializing view properties - (void)viewdidload { MTKView *view = (MTKView *)self.view; view.delegate = self; view.device = device; view.colorpixelformat = MTLPixelFormatBGRA8Unorm_sRGB; view.depthstencilpixelformat = MTLPixelFormatDepth32Float_Stencil8; view.samplecount = 4; view.clearcolor = MTLClearColorMake(0.8, 0.8, 0.8, 1.0); }

28 MetalKit View Setup Initializing view properties - (void)viewdidload { MTKView *view = (MTKView *)self.view; view.delegate = self; view.device = device; view.colorpixelformat = MTLPixelFormatBGRA8Unorm_sRGB; view.depthstencilpixelformat = MTLPixelFormatDepth32Float_Stencil8; view.samplecount = 4; view.clearcolor = MTLClearColorMake(0.8, 0.8, 0.8, 1.0); }

29 MetalKit View Drawing Simple usage - (void)drawinview:(nonnull MTKView *)view { id <MTLRenderPassDescriptor> descriptor = view.currentrenderpassdescriptor; // Create render command encoder and encode final pass... } [commandbuffer presentdrawable:view.currentdrawable]; [commandbuffer commit];

30 MetalKit View Drawing Simple usage - (void)drawinview:(nonnull MTKView *)view { id <MTLRenderPassDescriptor> descriptor = view.currentrenderpassdescriptor; // Create render command encoder and encode final pass... } [commandbuffer presentdrawable:view.currentdrawable]; [commandbuffer commit];

31 MetalKit View Drawing Simple usage - (void)drawinview:(nonnull MTKView *)view { id <MTLRenderPassDescriptor> descriptor = view.currentrenderpassdescriptor; // Create render command encoder and encode final pass... } [commandbuffer presentdrawable:view.currentdrawable]; [commandbuffer commit];

32 MetalKit View Drawing Simple usage - (void)drawinview:(nonnull MTKView *)view { id <MTLRenderPassDescriptor> descriptor = view.currentrenderpassdescriptor; // Create render command encoder and encode final pass... } [commandbuffer presentdrawable:view.currentdrawable]; [commandbuffer commit];

33 Managing Drawables

34 Managing Drawables Limited pool of drawables

35 Managing Drawables Limited pool of drawables Drawables concurrently used in many stages of the display pipeline

36 Managing Drawables Limited pool of drawables Drawables concurrently used in many stages of the display pipeline Frame 1 Application

37 Managing Drawables Limited pool of drawables Drawables concurrently used in many stages of the display pipeline Frame 1 Frame 2 Application GPU

38 Managing Drawables Limited pool of drawables Drawables concurrently used in many stages of the display pipeline Frame 1 Frame 2 Frame 3 Application GPU Display

39 Managing Drawables Limited pool of drawables Drawables concurrently used in many stages of the display pipeline Frame 1 Frame 2 Frame 3 Frame 4 Application GPU Display

40 Application Frame

41 Application Frame [MTKView currentrenderpassdescriptor] Reserves a drawable

42 Application Frame [MTKView currentrenderpassdescriptor] Reserves a drawable Encodes to the drawable

43 Application Frame [MTKView currentrenderpassdescriptor] Reserves a drawable Encodes to the drawable [MTLCommandBuffer presentdrawable:] [MTLCommandBuffer commit] Releases the drawable

44 Application Frame [MTKView currentrenderpassdescriptor] Reserves a drawable Encodes to the drawable [MTLCommandBuffer presentdrawable:] [MTLCommandBuffer commit] Releases the drawable

45 Application Frame [MTKView currentrenderpassdescriptor] Reserves a drawable Encodes to the drawable [MTLCommandBuffer presentdrawable:] [MTLCommandBuffer commit] Releases the drawable

46 Application Frame [MTKView currentrenderpassdescriptor] Reserves a drawable Encodes to the drawable [MTLCommandBuffer presentdrawable:] [MTLCommandBuffer commit] Releases the drawable

47 Application Frame [MTKView currentrenderpassdescriptor] Reserves a drawable Encodes to the drawable [MTLCommandBuffer presentdrawable:] [MTLCommandBuffer commit] Releases the drawable

48 Application Frame [MTKView currentrenderpassdescriptor] Reserves a drawable Encodes to the drawable [MTLCommandBuffer presentdrawable:] [MTLCommandBuffer commit] Releases the drawable

49 Application Frame [MTKView currentrenderpassdescriptor] Reserves a drawable Encodes to the drawable [MTLCommandBuffer presentdrawable:] [MTLCommandBuffer commit] Releases the drawable

50 Application Frame [MTKView currentrenderpassdescriptor] Reserves a drawable Encodes to the drawable [MTLCommandBuffer presentdrawable:] [MTLCommandBuffer commit] Releases the drawable

51 Application Frame [MTKView currentrenderpassdescriptor] Reserves a drawable Encodes to the drawable [MTLCommandBuffer presentdrawable:] [MTLCommandBuffer commit] Releases the drawable

52 MetalKit View Drawing Efficient usage - (void)drawinview:(nonnull MTKView *)view { // Update app s render state and encode offscreen passes... id <MTLRenderPassDescriptor> descriptor = view.currentrenderpassdescriptor; // Create render command encoder and encode final pass... } [commandbuffer presentdrawable:view.currentdrawable]; [commandbuffer commit];

53 MetalKit View Drawing Efficient usage - (void)drawinview:(nonnull MTKView *)view { // Update app s render state and encode offscreen passes... id <MTLRenderPassDescriptor> descriptor = view.currentrenderpassdescriptor; // Create render command encoder and encode final pass... } [commandbuffer presentdrawable:view.currentdrawable]; [commandbuffer commit];

54 MetalKit View Drawing Efficient usage - (void)drawinview:(nonnull MTKView *)view { // Update app s render state and encode offscreen passes... id <MTLRenderPassDescriptor> descriptor = view.currentrenderpassdescriptor; // Create render command encoder and encode final pass... } [commandbuffer presentdrawable:view.currentdrawable]; [commandbuffer commit];

55 MetalKit View Drawing Efficient usage - (void)drawinview:(nonnull MTKView *)view { // Update app s render state and encode offscreen passes... id <MTLRenderPassDescriptor> descriptor = view.currentrenderpassdescriptor; // Create render command encoder and encode final pass... [commandbuffer presentdrawable:view.currentdrawable]; [commandbuffer commit]; }

56 MetalKit Texture Loader

57 MetalKit Texture Loader Texture loading made simple Give a reference, get a Metal texture

58 MetalKit Texture Loader Texture loading made simple Give a reference, get a Metal texture Fast and fully featured Asynchronously decodes files and creates textures Support for common image file formats including JPG, TIFF, and PNG Also support for PVR and KTX texture file formats

59 Texture Loader Basic usage 1. Initialize with Metal device MTKTextureLoader *textureloader = [[MTKTextureLoader alloc] initwithdevice:device]; 2. Load texture [textureloader texturewithcontentsofurl:fileurl options:nil completionhandler:mycompletionhandler];

60 Texture Loader Basic usage 1. Initialize with Metal device MTKTextureLoader *textureloader = [[MTKTextureLoader alloc] initwithdevice:device]; 2. Load texture [textureloader texturewithcontentsofurl:fileurl options:nil completionhandler:mycompletionhandler];

61 Texture Loader Basic usage 1. Initialize with Metal device MTKTextureLoader *textureloader = [[MTKTextureLoader alloc] initwithdevice:device]; 2. Load texture [textureloader texturewithcontentsofurl:fileurl options:nil completionhandler:mycompletionhandler];

62 Texture Loader Basic usage 1. Initialize with Metal device MTKTextureLoader *textureloader = [[MTKTextureLoader alloc] initwithdevice:device]; 2. Load texture [textureloader texturewithcontentsofurl:fileurl fileurl options:nil completionhandler:mycompletionhandler];

63 Texture Loader Basic usage 1. Initialize with Metal device MTKTextureLoader *textureloader = [[MTKTextureLoader alloc] initwithdevice:device]; 2. Load texture [textureloader texturewithcontentsofurl:fileurl options:nil nil completionhandler:mycompletionhandler];

64 Texture Loader Basic usage 1. Initialize with Metal device MTKTextureLoader *textureloader = 2. Load texture [[MTKTextureLoader alloc] initwithdevice:device]; [textureloader texturewithcontentsofurl:fileurl options:nil completionhandler:mycompletionhandler]; mycompletionhandler

65 Model I/O Review Model I/O introduced in ios 9 and OS X El Capitan

66 Model I/O Review Model I/O introduced in ios 9 and OS X El Capitan 3D Asset loading from various file formats Importers and exporters for proprietary formats possible

67 Model I/O Review Model I/O introduced in ios 9 and OS X El Capitan 3D Asset loading from various file formats Importers and exporters for proprietary formats possible Offline baking operations Static ambient occlusion Light map generation Voxelization of meshes

68 Model I/O Review Model I/O introduced in ios 9 and OS X El Capitan 3D Asset loading from various file formats Importers and exporters for proprietary formats possible Offline baking operations Static ambient occlusion Light map generation Voxelization of meshes Allows you to focus on your rendering code

69 MetalKit and Model I/O Utilities to efficiently use Model I/O with Metal Optimized loading of Model I/O meshes into Metal buffers Encapsulation of mesh data for Metal Functions to prepare mesh data for Metal pipelines

70 Rendering a Model I/O Asset

71 Rendering a Model I/O Asset

72 Rendering a Model I/O Asset Metal Render State Pipeline Model I/O Asset Initialization MetalKit Mesh and Submesh Objects Metal Render State Setup and Drawing

73 Rendering a Model I/O Asset Metal Render State Pipeline Model I/O Asset Initialization MetalKit Mesh and Submesh Objects Metal Render State Setup and Drawing

74 Rendering a Model I/O Asset Metal Render State Pipeline Model I/O Asset Initialization MetalKit Mesh and Submesh Objects Metal Render State Setup and Drawing

75 Rendering a Model I/O Asset Metal Render State Pipeline Model I/O Asset Initialization MetalKit Mesh and Submesh Objects Metal Render State Setup and Drawing

76 Rendering a Model I/O Asset Metal Render State Pipeline Model I/O Asset Initialization MetalKit Mesh and Submesh Objects Metal Render State Setup and Drawing

77 Setup for Model Rendering Pipeline setup Metal Render State Pipeline Model I/O Asset Initialization MetalKit Mesh and Submesh Objects Metal Render State Setup and Drawing

78 Setup for Model Rendering Pipeline setup Vertex Descriptor Metal Render State Pipeline Model I/O Asset Initialization MetalKit Mesh and Submesh Objects Metal Render State Setup and Drawing

79 Vertex Shader Setting up Per-Vertex Inputs struct VertexInput { float3 position [[ attribute(0) ]]; float4 color [[ attribute(1) ]]; float2 texuv [[ attribute(2) ]]; }; vertex VertexOutput vertexfunction(vertexinput current [[ stage_in ]]) {... }

80 Vertex Shader Setting up Per-Vertex Inputs struct VertexInput { float3 position [[ attribute(0) ]]; float4 color [[ attribute(1) ]]; float2 texuv [[ attribute(2) ]]; }; vertex VertexOutput vertexfunction(vertexinput current [[ stage_in ]]) {... }

81 Vertex Shader Setting up Per-Vertex Inputs struct VertexInput { float3 position [[ attribute(0) ]]; float4 color [[ attribute(1) ]]; float2 texuv [[ attribute(2) ]]; }; vertex VertexOutput vertexfunction(vertexinput current [[ stage_in ]]) {... }

82 Vertex Shader Setting up Per-Vertex Inputs struct VertexInput { float3 position [[ attribute(0) ]]; float4 color [[ attribute(1) ]]; float2 texuv [[ attribute(2) ]]; }; vertex VertexOutput vertexfunction(vertexinput current [[ stage_in ]]) {... }

83 Vertex Shader Setting up Per-Vertex Inputs struct VertexInput { float3 position [[ attribute(0) ]]; float4 color [[ attribute(1) ]]; float2 texuv [[ attribute(2) ]]; }; vertex VertexOutput vertexfunction(vertexinput current [[ stage_in ]]) {... }

84 struct VertexInput { float3 position [[ attribute(0) ]]; float4 color [[ attribute(1) ]]; float2 texuv [[ attribute(2) ]]; };

85 struct VertexInput { float3 position [[ attribute(0) ]]; float4 color [[ attribute(1) ]]; float2 texuv [[ attribute(2) ]]; };

86 struct VertexInput { float3 position [[ attribute(0) ]]; float4 color [[ attribute(1) ]]; float2 texuv [[ attribute(2) ]]; };

87 struct VertexInput { float3 position [[ attribute(0) ]]; float4 color [[ attribute(1) ]]; float2 texuv [[ attribute(2) ]]; };

88 Vertex Descriptor struct VertexInput { float3 position [[ attribute(0) ]]; float4 color [[ attribute(1) ]]; float2 texuv [[ attribute(2) ]]; }; MTLVertexDescriptor *metalvertexdesc = [MTLVertexDescriptor new];

89 Vertex Descriptor struct VertexInput { float3 position [[ attribute(0) ]]; float4 color [[ attribute(1) ]]; float2 texuv [[ attribute(2) ]]; }; metalvertexdesc.attributes[0].format = MTLVertexFormatFloat3; metalvertexdesc.attributes[0].offset = 0;

90 Vertex Descriptor struct VertexInput { float3 position [[ attribute(0) ]]; float4 color [[ attribute(1) ]]; float2 texuv [[ attribute(2) ]]; }; metalvertexdesc.attributes[0].format = MTLVertexFormatFloat3; metalvertexdesc.attributes[0].offset = 0; 0 : position Float3

91 Vertex Descriptor struct VertexInput { float3 position [[ attribute(0) ]]; float4 color [[ attribute(1) ]]; float2 texuv [[ attribute(2) ]]; }; metalvertexdesc.attributes[1].format = MTLVertexFormatUChar4Normalized; metalvertexdesc.attributes[1].offset = 12; 0 : position Float3

92 Vertex Descriptor struct VertexInput { float3 position [[ attribute(0) ]]; float4 color [[ attribute(1) ]]; float2 texuv [[ attribute(2) ]]; }; metalvertexdesc.attributes[1].format = MTLVertexFormatUChar4Normalized; metalvertexdesc.attributes[1].offset = 12; 0 : position Float3 1 : color UChar4

93 Vertex Descriptor struct VertexInput { float3 position [[ attribute(0) ]]; float4 color [[ attribute(1) ]]; float2 texuv [[ attribute(2) ]]; }; metalvertexdesc.attributes[1].format = MTLVertexFormatUChar4Normalized; metalvertexdesc.attributes[1].offset = 12; 0 : position Float3 1 : color UChar4

94 Vertex Descriptor struct VertexInput { float3 position [[ attribute(0) ]]; float4 color [[ attribute(1) ]]; float2 texuv [[ attribute(2) ]]; }; metalvertexdesc.attributes[1].format = MTLVertexFormatUChar4Normalized; metalvertexdesc.attributes[1].offset = 12; 0 : position Float3 1 : color UChar4 12

95 Vertex Descriptor struct VertexInput { float3 position [[ attribute(0) ]]; float4 color [[ attribute(1) ]]; float2 texuv [[ attribute(2) ]]; }; metalvertexdesc.attributes[2].format = MTLVertexFormatHalfFloat2; metalvertexdesc.attributes[2].offset = 16; 0 : position Float3 1 : color UChar4

96 Vertex Descriptor struct VertexInput { float3 position [[ attribute(0) ]]; float4 color [[ attribute(1) ]]; float2 texuv [[ attribute(2) ]]; }; metalvertexdesc.attributes[2].format = MTLVertexFormatHalfFloat2; metalvertexdesc.attributes[2].offset = 16; 0 : position Float3 1 : color UChar4 2 : texuv HalfFloat2

97 Vertex Descriptor struct VertexInput { float3 position [[ attribute(0) ]]; float4 color [[ attribute(1) ]]; float2 texuv [[ attribute(2) ]]; }; metalvertexdesc.attributes[2].format = MTLVertexFormatHalfFloat2; metalvertexdesc.attributes[2].offset = 16; 0 : position Float3 1 : color UChar4 2 : texuv HalfFloat2

98 Vertex Descriptor struct VertexInput { float3 position [[ attribute(0) ]]; float4 color [[ attribute(1) ]]; float2 texuv [[ attribute(2) ]]; }; metalvertexdesc.attributes[2].format = MTLVertexFormatHalfFloat2; metalvertexdesc.attributes[2].offset = 16; 0 : position Float3 1 : color UChar4 2 : texuv HalfFloat2 16

99 Vertex Descriptor struct VertexInput { float3 position [[ attribute(0) ]]; float4 color [[ attribute(1) ]]; float2 texuv [[ attribute(2) ]]; }; metalvertexdesc.layouts[0].stride = 20; 0 : position Float3 1 : color UChar4 2 : texuv HalfFloat2

100 Vertex Descriptor struct VertexInput { float3 position [[ attribute(0) ]]; float4 color [[ attribute(1) ]]; float2 texuv [[ attribute(2) ]]; }; metalvertexdesc.layouts[0].stride = 20; 0 : position Float3 1 : color UChar4 2 : texuv HalfFloat2 20

101 Vertex Array Layout 0 : position Float3 1 : color UChar4 2 : texuv HalfFloat2

102 Vertex Array Layout 0 : position Float3 1 : color UChar4 2 : texuv HalfFloat2

103 Vertex Array Layout

104 Vertex Array Layout...

105 Building the Pipeline renderpipelinedescriptor.vertexdescriptor = metalvertexdesc; MTLRenderStatePipeline *pipeline = [device.newrenderpipelinestatewithdescriptor:renderpipelinedescriptor error:error];

106 Building the Pipeline renderpipelinedescriptor.vertexdescriptor = metalvertexdesc; MTLRenderStatePipeline *pipeline = [device.newrenderpipelinestatewithdescriptor:renderpipelinedescriptor error:error];

107 Building the Pipeline renderpipelinedescriptor.vertexdescriptor = metalvertexdesc; MTLRenderStatePipeline *pipeline = [device.newrenderpipelinestatewithdescriptor:renderpipelinedescriptor renderpipelinedescriptor error:error];

108 Setup for Model Rendering Asset initialization Vertex Descriptor Metal Render State Pipeline Model I/O Asset Initialization MetalKit Mesh and Submesh Objects Metal Render State Setup and Drawing MetalKit Mesh Buffer Allocator

109 Setup for Model Rendering Asset initialization Vertex Descriptor Metal Render State Pipeline Model I/O Asset Initialization MetalKit Mesh and Submesh Objects Metal Render State Setup and Drawing MetalKit Mesh Buffer Allocator

110 Setup for Model Rendering Asset initialization Vertex Descriptor Vertex Descriptor Metal Render State Pipeline Model I/O Asset Initialization MetalKit Mesh and Submesh Objects Metal Render State Setup and Drawing MetalKit Mesh Buffer Allocator

111 Setup for Model Rendering Asset initialization Vertex Descriptor Vertex Descriptor Metal Render State Pipeline Model I/O Asset Initialization MetalKit Mesh and Submesh Objects Metal Render State Setup and Drawing MetalKit Mesh Buffer Allocator

112 Asset Initialization Model I/O Vertex Descriptor vs. Metal Vertex Descriptor

113 Asset Initialization Model I/O Vertex Descriptor vs. Metal Vertex Descriptor Model I/O Vertex Descriptor Describes the layout of vertex attributes in a mesh

114 Asset Initialization Model I/O Vertex Descriptor vs. Metal Vertex Descriptor Model I/O Vertex Descriptor Describes the layout of vertex attributes in a mesh Metal Vertex Descriptor Describes the layout of vertex attribute inputs to a render state pipeline

115 Asset Initialization Model I/O Vertex Descriptor vs. Metal Vertex Descriptor Model I/O Vertex Descriptor Describes the layout of vertex attributes in a mesh Metal Vertex Descriptor Describes the layout of vertex attribute inputs to a render state pipeline Intentionally designed to look similar Both contain an array of attribute and buffer layout objects Simplifies translation from one type to other

116 Asset Initialization Defaults and layout efficiency Each attribute in a Model I/O Vertex Descriptor has an identifying string-based name Model I/O assigns a default name if one does not exist in the model file - Names texturecoordinate, color - Model I/O defines these with the string-based MDLVertexAttribute name constants

117 Asset Initialization Defaults and layout efficiency Each attribute in a Model I/O Vertex Descriptor has an identifying string-based name Model I/O assigns a default name if one does not exist in the model file - Names texturecoordinate, color - Model I/O defines these with the string-based MDLVertexAttribute name constants Custom MDLVertexDescriptor recommended By default, Model I/O loads vertices as high-precision floating point types Feed pipelines with the smallest type that meets your precision requirements Improves vertex bandwidth efficiency

118 Asset Initialization 0 : position Float3 1 : color UChar4 2 : texuv HalfFloat2

119 Asset Initialization 0 : position Float3 1 : color UChar4 2 : texuv HalfFloat2 MDLVertexDescriptor *modeliovertexdesc = MTKModelIOVertexFormatFromMetal(metalVertexDesc); modeliovertexdesc.attributes[0].name = MDLVertexAttributePosition; modeliovertexdesc.attributes[1].name = MDLVertexAttributeColor; modeliovertexdesc.attributes[2].name = MDLVertexAttributeTextureCoordinate;

120 Asset Initialization 0 : position Float3 1 : color UChar4 2 : texuv HalfFloat2 MDLVertexDescriptor *modeliovertexdesc = MTKModelIOVertexFormatFromMetal(metalVertexDesc); modeliovertexdesc.attributes[0].name = MDLVertexAttributePosition; modeliovertexdesc.attributes[1].name = MDLVertexAttributeColor; modeliovertexdesc.attributes[2].name = MDLVertexAttributeTextureCoordinate;

121 Asset Initialization 0 : position Float3 1 : color UChar4 2 : texuv HalfFloat2 MDLVertexDescriptor *modeliovertexdesc = MTKModelIOVertexFormatFromMetal(metalVertexDesc); metalvertexdesc modeliovertexdesc.attributes[0].name = MDLVertexAttributePosition; modeliovertexdesc.attributes[1].name = MDLVertexAttributeColor; modeliovertexdesc.attributes[2].name = MDLVertexAttributeTextureCoordinate;

122 Asset Initialization 0 : position Float3 1 : color UChar4 2 : texuv HalfFloat2 MDLVertexDescriptor *modeliovertexdesc = MTKModelIOVertexFormatFromMetal(metalVertexDesc); modeliovertexdesc.attributes[0].name = MDLVertexAttributePosition; modeliovertexdesc.attributes[1].name = MDLVertexAttributeColor; modeliovertexdesc.attributes[2].name = MDLVertexAttributeTextureCoordinate;

123 Asset Initialization 0 : position Float3 1 : color UChar4 2 : texuv HalfFloat2 MDLVertexDescriptor *modeliovertexdesc = MTKModelIOVertexFormatFromMetal(metalVertexDesc); modeliovertexdesc.attributes[0].name = MDLVertexAttributePosition; modeliovertexdesc.attributes[1].name = MDLVertexAttributeColor; modeliovertexdesc.attributes[2].name = MDLVertexAttributeTextureCoordinate;

124 Asset Initialization 0 : position Float3 1 : color UChar4 2 : texuv HalfFloat2 MDLVertexDescriptor *modeliovertexdesc = MTKModelIOVertexFormatFromMetal(metalVertexDesc); modeliovertexdesc.attributes[0].name = MDLVertexAttributePosition; modeliovertexdesc.attributes[1].name = MDLVertexAttributeColor; modeliovertexdesc.attributes[2].name = MDLVertexAttributeTextureCoordinate;

125 Asset Initialization MetalKit Mesh Buffer Allocator MTKMeshBufferAllocator *mtkbufferallocator = [[MTKMeshBufferAllocator alloc] initwithdevice:metaldevice];

126 Asset Initialization Creating the Asset Object MDLAsset *asset = [[MDLAsset alloc] initwithurl:fileurl vertexdescriptor:modeliovertexdesc bufferallocator:mtkbufferallocator];

127 Asset Initialization Creating the Asset Object MDLAsset *asset = [[MDLAsset alloc] initwithurl:fileurl vertexdescriptor:modeliovertexdesc bufferallocator:mtkbufferallocator];

128 Asset Initialization Creating the Asset Object MDLAsset *asset = [[MDLAsset alloc] initwithurl:fileurl vertexdescriptor:modeliovertexdesc bufferallocator:mtkbufferallocator];

129 Asset Initialization Creating the Asset Object MDLAsset *asset = [[MDLAsset alloc] initwithurl:fileurl vertexdescriptor:modeliovertexdesc bufferallocator:mtkbufferallocator];

130 MetalKit Meshes Initialization Setup for model rendering Vertex Descriptor Vertex Descriptor Metal Render State Pipeline Model I/O Asset Initialization MetalKit Mesh and Submesh Objects Metal Render State Setup and Drawing MetalKit Mesh Buffer Allocator

131 MetalKit Meshes Initialization Setup for model rendering Vertex Descriptor Vertex Descriptor Metal Render State Pipeline Model I/O Asset Initialization MetalKit Mesh and Submesh Objects Metal Render State Setup and Drawing MetalKit Mesh Buffer Allocator

132 Asset Camera Mesh Mesh Light Mesh Camera Mesh Light Mesh

133 Asset Camera Mesh Mesh Light Mesh Camera Mesh Light Mesh

134 Asset Camera Mesh Mesh Light Mesh Camera Mesh Light Mesh

135 Asset Camera Mesh Mesh Light Mesh Camera Mesh Light Mesh

136 NSArray<MTKMesh *> *meshes = [MTKMesh meshesfromasset:asset device:device]; Asset Camera Mesh Mesh Light Mesh Camera Mesh Light Mesh

137 NSArray<MTKMesh *> *meshes = [MTKMesh meshesfromasset:asset device:device]; Asset Camera Mesh Mesh Light Mesh Camera Mesh Light Mesh

138 NSArray<MTKMesh *> *meshes = [MTKMesh meshesfromasset:asset device:device]; Asset Camera Mesh Mesh Light Mesh Camera Mesh Light Mesh

139 NSArray<MTKMesh *> *meshes = [MTKMesh meshesfromasset:asset device:device]; Asset Camera Mesh Mesh Light Mesh Camera Mesh Light Mesh meshes Mesh Mesh Mesh Mesh Mesh

140 NSArray<MTKMesh *> *meshes = [MTKMesh meshesfromasset:asset device:device]; Asset Camera Mesh Mesh Light Mesh Camera Mesh Light Mesh meshes Mesh Mesh Mesh Mesh Mesh

141 NSArray<MTKMesh *> *meshes = [MTKMesh meshesfromasset:asset device:device]; Asset Camera Mesh Mesh Light Mesh Camera Mesh Light Mesh meshes Mesh Mesh Mesh Mesh Mesh

142 NSArray<MTKMesh *> *meshes = [MTKMesh meshesfromasset:asset device:device]; Asset Camera Mesh Mesh Mesh Light Mesh Camera Mesh Light Mesh meshes Mesh Mesh Mesh Mesh

143 Mesh

144 Mesh VertexBuffers

145 VertexBuffers Mesh VertexDescriptor

146 VertexBuffers Mesh VertexDescriptor

147 VertexBuffers Mesh VertexDescriptor Submesh

148 VertexBuffers Mesh VertexDescriptor IndexBuffer Submesh

149 VertexBuffers Mesh VertexDescriptor IndexBuffer Submesh

150 VertexBuffers Mesh VertexDescriptor IndexBuffer Submesh Draw Properties

151 VertexBuffers Mesh VertexDescriptor IndexBuffer Submesh Draw Properties

152 Mesh Rendering with Metal Setup for model rendering Vertex Descriptor Vertex Descriptor Metal Render State Pipeline Model I/O Asset Initialization MetalKit Mesh and Submesh Objects Metal Render State Setup and Drawing MetalKit Mesh Buffer Allocator

153 Mesh Rendering with Metal Setup for model rendering Vertex Descriptor Vertex Descriptor Metal Render State Pipeline Model I/O Asset Initialization MetalKit Mesh and Submesh Objects Metal Render State Setup and Drawing MetalKit Mesh Buffer Allocator

154 Setting Mesh State NSUInteger bufferindex = 0; for(mtkmeshbuffer *vertexbuffer in mesh.vertexbuffers) { if(vertexbuffer.buffer!= nil) { [renderencoder setvertexbuffer:vertexbuffer.buffer offset:vertexbuffer.offset atindex:bufferindex]; } bufferindex++; }

155 Setting Mesh State NSUInteger bufferindex = 0; for(mtkmeshbuffer *vertexbuffer in mesh.vertexbuffers) { if(vertexbuffer.buffer!= nil) { [renderencoder setvertexbuffer:vertexbuffer.buffer offset:vertexbuffer.offset atindex:bufferindex]; } bufferindex++; }

156 Setting Mesh State NSUInteger bufferindex = 0; for(mtkmeshbuffer *vertexbuffer in mesh.vertexbuffers) { if(vertexbuffer.buffer!= nil) { [renderencoder setvertexbuffer:vertexbuffer.buffer offset:vertexbuffer.offset atindex:bufferindex]; } bufferindex++; }

157 Setting Mesh State NSUInteger bufferindex = 0; for(mtkmeshbuffer *vertexbuffer in mesh.vertexbuffers) { if(vertexbuffer.buffer!= nil) { [renderencoder setvertexbuffer:vertexbuffer.buffer offset:vertexbuffer.offset atindex:bufferindex]; } bufferindex++; }

158 Setting Mesh State NSUInteger bufferindex = 0; for(mtkmeshbuffer *vertexbuffer in mesh.vertexbuffers) { if(vertexbuffer.buffer!= nil) { [renderencoder setvertexbuffer:vertexbuffer.buffer offset:vertexbuffer.offset atindex:bufferindex]; } bufferindex++; }

159 Setting Mesh State NSUInteger bufferindex = 0; for(mtkmeshbuffer *vertexbuffer in mesh.vertexbuffers) { if(vertexbuffer.buffer!= nil) { [renderencoder setvertexbuffer:vertexbuffer.buffer offset:vertexbuffer.offset atindex:bufferindex]; } bufferindex++; }

160 Rendering the Mesh for(mtksubmesh *submesh in mesh.submeshes) { [renderencoder drawindexedprimitives:submesh.primitivetype indexcount:submesh.indexcount indextype:submesh.indextype indexbuffer:submesh.indexbuffer.buffer indexbufferoffset:submesh.indexbuffer.offset]; }

161 Rendering the Mesh for(mtksubmesh *submesh in mesh.submeshes) { [renderencoder drawindexedprimitives:submesh.primitivetype indexcount:submesh.indexcount indextype:submesh.indextype indexbuffer:submesh.indexbuffer.buffer indexbufferoffset:submesh.indexbuffer.offset]; }

162 Rendering the Mesh for(mtksubmesh *submesh in mesh.submeshes) { [renderencoder drawindexedprimitives:submesh.primitivetype indexcount:submesh.indexcount indextype:submesh.indextype indexbuffer:submesh.indexbuffer.buffer indexbufferoffset:submesh.indexbuffer.offset]; }

163 Rendering the Mesh for(mtksubmesh *submesh in mesh.submeshes) { [renderencoder drawindexedprimitives:submesh.primitivetype submesh indexcount:submesh.indexcount indextype:submesh.indextype indexbuffer:submesh.indexbuffer.buffer indexbufferoffset:submesh.indexbuffer.offset]; submesh }

164 MetalKit Essentials

165 Metal Performance Shaders Anna Tikhonova GPU Software Frameworks Engineer

166 Metal Performance Shaders Introduction A framework of data-parallel algorithms for the GPU CPU-style library for the GPU

167 Metal Performance Shaders Introduction Optimized for ios Available in ios 9 for the A8 processor ipad Air 2 iphone 6 Plus iphone 6

168 Metal Performance Shaders Introduction Designed to integrate easily into your Metal applications As simple as calling a library function

169 Metal Performance Shaders Supported image operators Histogram, Equalization, and Specification Morphology Min, Max, Dilate, and Erode Lanczos Resampling Median Thresholding Integral Convolution General, Gaussian Blur, Box, Tent, and Sobel

170 Metal Performance Shaders Supported image operators Histogram, Equalization, and Specification Morphology Min, Max, Dilate, and Erode Lanczos Resampling Median Thresholding Integral Convolution General, Gaussian Blur, Box, Tent, and Sobel

171 Equalization

172 Equalization

173 Metal Performance Shaders Supported image operators Histogram, Equalization and Specification Morphology Min, Max, Dilate, and Erode Lanczos Resampling Median Thresholding Integral Convolution General, Gaussian Blur, Box, Tent, and Sobel

174 Lanczos Resampling

175 Lanczos Resampling

176 Metal Performance Shaders Supported image operators Histogram, Equalization and Specification Morphology Min, Max, Dilate, and Erode Lanczos Resampling Median Thresholding Integral Convolution General, Gaussian Blur, Box, Tent, and Sobel

177 Thresholding

178 Thresholding

179 Thresholding and Sobel

180 Thresholding and Sobel

181 Metal Performance Shaders Supported image operators Histogram, Equalization and Specification Morphology Min, Max, Dilate, and Erode Lanczos Resampling Median Thresholding Integral Convolution General, Gaussian Blur, Box, Tent, and Sobel

182 Gaussian Blur

183 Gaussian Blur

184 Using Metal Performance Shaders Use a blur filter // Create a filter object MPSImageGaussianBlur *blurfilter = [[MPSImageGaussianBlur alloc] initwithdevice: device sigma: 3]; // Encode filter to the command buffer [blurfilter encodetocommandbuffer: commandbuffer source: sourcetexture destination: destinationtexture];

185 Using Metal Performance Shaders Use a blur filter // Create a filter object MPSImageGaussianBlur *blurfilter = [[MPSImageGaussianBlur alloc] initwithdevice: device sigma: 3]; // Encode filter to the command buffer [blurfilter encodetocommandbuffer: commandbuffer source: sourcetexture destination: destinationtexture];

186 Using Metal Performance Shaders Use a blur filter // Create a filter object MPSImageGaussianBlur *blurfilter = [[MPSImageGaussianBlur alloc] initwithdevice: device sigma: 3]; // Encode filter to the command buffer [blurfilter encodetocommandbuffer: commandbuffer source: sourcetexture destination: destinationtexture];

187 Using Metal Performance Shaders Use a blur filter // Create a filter object MPSImageGaussianBlur *blurfilter = [[MPSImageGaussianBlur alloc] initwithdevice: device sigma: 3]; // Encode filter to the command buffer [blurfilter encodetocommandbuffer: commandbuffer source: sourcetexture destination: destinationtexture];

188 Using Metal Performance Shaders Use a blur filter // Create a filter object MPSImageGaussianBlur *blurfilter = [[MPSImageGaussianBlur alloc] initwithdevice: device sigma: 3]; // Encode filter to the command buffer [blurfilter encodetocommandbuffer: commandbuffer source: sourcetexture destination: destinationtexture];

189 Using Metal Performance Shaders Use a blur filter // Create a filter object MPSImageGaussianBlur *blurfilter = [[MPSImageGaussianBlur alloc] initwithdevice: device sigma: 3]; Command Buffer // Encode filter to the command buffer [blurfilter encodetocommandbuffer: commandbuffer source: sourcetexture destination: destinationtexture];

190 Using Metal Performance Shaders Use a blur filter Command Buffer // Create a filter object MPSImageGaussianBlur *blurfilter = [[MPSImageGaussianBlur alloc] initwithdevice: device sigma: 3]; Draw Draw Draw // Encode filter to the command buffer [blurfilter encodetocommandbuffer: commandbuffer source: sourcetexture destination: destinationtexture];

191 Using Metal Performance Shaders Use a blur filter Command Buffer // Create a filter object MPSImageGaussianBlur *blurfilter = [[MPSImageGaussianBlur alloc] initwithdevice: device sigma: 3]; Draw Draw Draw // Encode filter to the command buffer [blurfilter encodetocommandbuffer: commandbuffer Dispatch Kernel Dispatch Kernel source: sourcetexture destination: destinationtexture];

192 Using Metal Performance Shaders Use a blur filter Command Buffer // Create a filter object MPSImageGaussianBlur *blurfilter = [[MPSImageGaussianBlur alloc] initwithdevice: device sigma: 3]; Draw Draw Draw // Encode filter to the command buffer [blurfilter encodetocommandbuffer: commandbuffer Dispatch Kernel Dispatch Kernel source: sourcetexture destination: destinationtexture];

193 Using Metal Performance Shaders Use a blur filter Command Buffer Draw Draw Draw Dispatch Kernel Dispatch Kernel // Create a filter object MPSImageGaussianBlur *blurfilter [[MPSImageGaussianBlur alloc] initwithdevice: device Encode MPS Blur // filter to the command buffer [blurfilter encodetocommandbuffer: commandbuffer source: sourcetexture destination: destinationtexture

194 Using Metal Performance Shaders Use a blur filter Command Buffer Draw Draw Draw Dispatch Kernel Dispatch Kernel // Create a filter object MPSImageGaussianBlur *blurfilter [[MPSImageGaussianBlur alloc] initwithdevice: device Encode MPS Blur // filter to the command buffer [blurfilter encodetocommandbuffer: commandbuffer source: sourcetexture destination: destinationtexture Commit

195 Download Sample Code MetalPerformanceShadersHelloWorld

196 Performance Behind the scenes Choose the right algorithm Tune for Kernel radius Pixel format Memory hierarchy Number of pixels per thread Threadgroup dimensions CPU optimizations

197 Performance Behind the scenes Choose the right algorithm Tune for Kernel radius Pixel format Memory hierarchy Number of pixels per thread Threadgroup dimensions CPU optimizations

198 Performance Behind the scenes Choose the right algorithm Tune for Kernel radius Pixel format Memory hierarchy Number of pixels per thread Threadgroup dimensions CPU optimizations

199 Performance Behind the scenes Choose the right algorithm Tune for Kernel radius Pixel format Memory hierarchy Number of pixels per thread Threadgroup dimensions CPU optimizations

200 Performance Behind the scenes Choose the right algorithm Tune for Kernel radius Pixel format Memory hierarchy Number of pixels per thread Threadgroup dimensions CPU optimizations

201 Optimized Gaussian Blur Statistics

202 Optimized Gaussian Blur Statistics 49 Metal kernels 2000 Lines of kernel code 821 Different Gaussian filter implementations

203 Demo

204 Filter Performance Not capped by screen refresh rate Smaller is better 16.6 ms = 60 FPS ms Sigma (Blur Radius)

205 A Few More Details

206 Source offset and Destination cliprect Filter properties Source Destination

207 Source offset and Destination cliprect Filter properties Source cliprect Destination

208 Source offset and Destination cliprect Filter properties offset Source cliprect Destination

209 Source offset and Destination cliprect Filter properties offset Source cliprect Destination

210 Source offset and Destination cliprect Filter properties offset Source cliprect Destination

211 In-place Operation Save memory Source == Destination

212 In-place Operation Save memory cliprect Source == Destination

213 In-place Operation Save memory offset cliprect Source == Destination

214 In-place Operation Save memory offset cliprect Source == Destination

215 In-place Operation Save memory offset cliprect Source == Destination

216 In-place Operation How? // Encode filter in-place in a Metal command buffer [blurfilter encodetocommandbuffer: commandbuffer inplacetexture: sourcetexture fallbackcopyallocator: myallocator];

217 In-place Operation How? // Encode filter in-place in a Metal command buffer [blurfilter encodetocommandbuffer: commandbuffer inplacetexture: sourcetexture fallbackcopyallocator: myallocator]; It s not always possible for Metal Performance Shaders filters to run in-place Depends on filter, filter parameters and properties Copy allocator will create a destination texture, so operation can proceed out-of-place

218 Fallback Copy Allocator Example MPSCopyAllocator myallocator = ^id <MTLTexture>( MPSKernel * filter, id <MTLCommandBuffer> commandbuffer, id <MTLTexture> sourcetexture) { MTLTextureDescriptor * desc = descriptorfromtexture(sourcetexture); id <MTLTexture> destinationtexture = [commandbuffer.device newtexturewithdescriptor: desc]; }; return destinationtexture;

219 Fallback Copy Allocator Example MPSCopyAllocator myallocator = ^id <MTLTexture>( MPSKernel * filter, id <MTLCommandBuffer> commandbuffer, id <MTLTexture> sourcetexture) { MTLTextureDescriptor * desc = descriptorfromtexture(sourcetexture); id <MTLTexture> destinationtexture = [commandbuffer.device newtexturewithdescriptor: desc]; // Use Metal encoder to initialize the destinationtexture from // sourcetexture, if necessary }; return destinationtexture;

220 Fallback Copy Allocator Example MPSCopyAllocator myallocator = ^id <MTLTexture>( MPSKernel * filter, id <MTLCommandBuffer> commandbuffer, id <MTLTexture> sourcetexture) { MTLTextureDescriptor * desc = descriptorfromtexture(sourcetexture); id <MTLTexture> destinationtexture = [commandbuffer.device newtexturewithdescriptor: desc]; // Use Metal encoder to initialize the destinationtexture from // sourcetexture, if necessary }; return destinationtexture;

221 Summary Make use of the new Metal support frameworks Robust, optimized, easy to integrate Faster bring-up of your application Less code to write and maintain Give us your feedback!

222 More Information Metal Documentation and Videos Apple Developer Forums Developer Technical Support General Inquiries Allan Schaffer, Game Technologies Evangelist

223 Related Sessions Managing 3D Assets with Model I/O Mission Tuesday 2:30PM What s New in Metal, Part 1 Presidio Tuesday 3:30PM Metal Performance Optimization Techniques Pacific Heights Friday 11:00AM

224 Related Labs Metal Lab Graphics D Friday 12:00PM

225

Metal for OpenGL Developers

Metal for OpenGL Developers #WWDC18 Metal for OpenGL Developers Dan Omachi, Metal Ecosystem Engineer Sukanya Sudugu, GPU Software Engineer 2018 Apple Inc. All rights reserved. Redistribution or public display not permitted without

More information

Working with Metal Overview

Working with Metal Overview Graphics and Games #WWDC14 Working with Metal Overview Session 603 Jeremy Sandmel GPU Software 2014 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission

More information

From Art to Engine with Model I/O

From Art to Engine with Model I/O Session Graphics and Games #WWDC17 From Art to Engine with Model I/O 610 Nick Porcino, Game Technologies Engineer Nicholas Blasingame, Game Technologies Engineer 2017 Apple Inc. All rights reserved. Redistribution

More information

What s New in Metal. Part 2 #WWDC16. Graphics and Games. Session 605

What s New in Metal. Part 2 #WWDC16. Graphics and Games. Session 605 Graphics and Games #WWDC16 What s New in Metal Part 2 Session 605 Charles Brissart GPU Software Engineer Dan Omachi GPU Software Engineer Anna Tikhonova GPU Software Engineer 2016 Apple Inc. All rights

More information

Working With Metal Advanced

Working With Metal Advanced Graphics and Games #WWDC14 Working With Metal Advanced Session 605 Gokhan Avkarogullari GPU Software Aaftab Munshi GPU Software Serhat Tekin GPU Software 2014 Apple Inc. All rights reserved. Redistribution

More information

What s New in Core Image

What s New in Core Image Media #WWDC15 What s New in Core Image Session 510 David Hayward Engineering Manager Tony Chu Engineer Alexandre Naaman Lead Engineer 2015 Apple Inc. All rights reserved. Redistribution or public display

More information

Introducing Metal 2. Graphics and Games #WWDC17. Michal Valient, GPU Software Engineer Richard Schreyer, GPU Software Engineer

Introducing Metal 2. Graphics and Games #WWDC17. Michal Valient, GPU Software Engineer Richard Schreyer, GPU Software Engineer Session Graphics and Games #WWDC17 Introducing Metal 2 601 Michal Valient, GPU Software Engineer Richard Schreyer, GPU Software Engineer 2017 Apple Inc. All rights reserved. Redistribution or public display

More information

Metal for Ray Tracing Acceleration

Metal for Ray Tracing Acceleration Session #WWDC18 Metal for Ray Tracing Acceleration 606 Sean James, GPU Software Engineer Wayne Lister, GPU Software Engineer 2018 Apple Inc. All rights reserved. Redistribution or public display not permitted

More information

Metal. GPU-accelerated advanced 3D graphics rendering and data-parallel computation. source rebelsmarket.com

Metal. GPU-accelerated advanced 3D graphics rendering and data-parallel computation. source rebelsmarket.com Metal GPU-accelerated advanced 3D graphics rendering and data-parallel computation source rebelsmarket.com Maths The heart and foundation of computer graphics source wallpoper.com Metalmatics There are

More information

Integrating Apps and Content with AR Quick Look

Integrating Apps and Content with AR Quick Look Session #WWDC18 Integrating Apps and Content with AR Quick Look 603 David Lui, ARKit Engineering Dave Addey, ARKit Engineering 2018 Apple Inc. All rights reserved. Redistribution or public display not

More information

Introducing the Photos Frameworks

Introducing the Photos Frameworks Media #WWDC14 Introducing the Photos Frameworks Session 511 Adam Swift ios Photos Frameworks 2014 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission

More information

Building Watch Apps #WWDC15. Featured. Session 108. Neil Desai watchos Engineer

Building Watch Apps #WWDC15. Featured. Session 108. Neil Desai watchos Engineer Featured #WWDC15 Building Watch Apps Session 108 Neil Desai watchos Engineer 2015 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission from Apple. Agenda

More information

Building a Game with SceneKit

Building a Game with SceneKit Graphics and Games #WWDC14 Building a Game with SceneKit Session 610 Amaury Balliet Software Engineer 2014 Apple Inc. All rights reserved. Redistribution or public display not permitted without written

More information

The Application Stage. The Game Loop, Resource Management and Renderer Design

The Application Stage. The Game Loop, Resource Management and Renderer Design 1 The Application Stage The Game Loop, Resource Management and Renderer Design Application Stage Responsibilities 2 Set up the rendering pipeline Resource Management 3D meshes Textures etc. Prepare data

More information

Copyright Khronos Group Page 1

Copyright Khronos Group Page 1 Gaming Market Briefing Overview of APIs GDC March 2016 Neil Trevett Khronos President NVIDIA Vice President Developer Ecosystem ntrevett@nvidia.com @neilt3d Copyright Khronos Group 2016 - Page 1 Copyright

More information

Creating Great App Previews

Creating Great App Previews Services #WWDC14 Creating Great App Previews Session 304 Paul Turner Sr. Operations Manager itunes Digital Supply Chain Engineering 2014 Apple Inc. All rights reserved. Redistribution or public display

More information

Metal Feature Set Tables

Metal Feature Set Tables Metal Feature Set Tables apple Developer Feature Availability This table lists the availability of major Metal features. OS ios 8 ios 8 ios 9 ios 9 ios 9 ios 10 ios 10 ios 10 ios 11 ios 11 ios 11 ios 11

More information

SceneKit: What s New Session 604

SceneKit: What s New Session 604 Graphics and Games #WWDC17 SceneKit: What s New Session 604 Thomas Goossens, SceneKit engineer Amaury Balliet, SceneKit engineer Anatole Duprat, SceneKit engineer Sébastien Métrot, SceneKit engineer 2017

More information

Building Visually Rich User Experiences

Building Visually Rich User Experiences Session App Frameworks #WWDC17 Building Visually Rich User Experiences 235 Noah Witherspoon, Software Engineer Warren Moore, Software Engineer 2017 Apple Inc. All rights reserved. Redistribution or public

More information

What s New in SpriteKit

What s New in SpriteKit Graphics and Games #WWDC16 What s New in SpriteKit Session 610 Ross Dexter Games Technologies Engineer Clément Boissière Games Technologies Engineer 2016 Apple Inc. All rights reserved. Redistribution

More information

What's New in UIKit Dynamics and Visual Effects Session 229

What's New in UIKit Dynamics and Visual Effects Session 229 App Frameworks #WWDC15 What's New in UIKit Dynamics and Visual Effects Session 229 Michael Turner UIKit Engineer David Duncan UIKit Engineer 2015 Apple Inc. All rights reserved. Redistribution or public

More information

Mysteries of Auto Layout, Part 1

Mysteries of Auto Layout, Part 1 App Frameworks #WWDC15 Mysteries of Auto Layout, Part 1 Session 218 Jason Yao Interface Builder Engineer Kasia Wawer ios Keyboards Engineer 2015 Apple Inc. All rights reserved. Redistribution or public

More information

Adopting Advanced Features of the New UI

Adopting Advanced Features of the New UI Frameworks #WWDC14 Adopting Advanced Features of the New UI Session 220 Chris Dreessen AppKit Software Engineer! Corbin Dunn AppKit Software Engineer 2014 Apple Inc. All rights reserved. Redistribution

More information

Advanced Scrollviews and Touch Handling Techniques

Advanced Scrollviews and Touch Handling Techniques Frameworks #WWDC14 Advanced Scrollviews and Touch Handling Techniques Session 235 Josh Shaffer ios Apps and Frameworks Engineer Eliza Block ios Apps and Frameworks Engineer 2014 Apple Inc. All rights reserved.

More information

Best practices for effective OpenGL programming. Dan Omachi OpenGL Development Engineer

Best practices for effective OpenGL programming. Dan Omachi OpenGL Development Engineer Best practices for effective OpenGL programming Dan Omachi OpenGL Development Engineer 2 What Is OpenGL? 3 OpenGL is a software interface to graphics hardware - OpenGL Specification 4 GPU accelerates rendering

More information

Using Metal 2 for Compute

Using Metal 2 for Compute Session Graphics and Games #WWDC17 Using Metal 2 for Compute 608 Anna Tikhonova, GPU Software Engineer 2017 Apple Inc. All rights reserved. Redistribution or public display not permitted without written

More information

Understanding M3G 2.0 and its Effect on Producing Exceptional 3D Java-Based Graphics. Sean Ellis Consultant Graphics Engineer ARM, Maidenhead

Understanding M3G 2.0 and its Effect on Producing Exceptional 3D Java-Based Graphics. Sean Ellis Consultant Graphics Engineer ARM, Maidenhead Understanding M3G 2.0 and its Effect on Producing Exceptional 3D Java-Based Graphics Sean Ellis Consultant Graphics Engineer ARM, Maidenhead Introduction M3G 1.x Recap ARM M3G Integration M3G 2.0 Update

More information

Copyright Khronos Group, Page Graphic Remedy. All Rights Reserved

Copyright Khronos Group, Page Graphic Remedy. All Rights Reserved Avi Shapira Graphic Remedy Copyright Khronos Group, 2009 - Page 1 2004 2009 Graphic Remedy. All Rights Reserved Debugging and profiling 3D applications are both hard and time consuming tasks Companies

More information

Accessibility on OS X

Accessibility on OS X Frameworks #WWDC14 Accessibility on OS X New Accessibility API Session 207 Patti Hoa Accessibility Engineer! Chris Dolan Accessibility Engineer 2014 Apple Inc. All rights reserved. Redistribution or public

More information

More frames per second. Alex Kan and Jean-François Roy GPU Software

More frames per second. Alex Kan and Jean-François Roy GPU Software More frames per second Alex Kan and Jean-François Roy GPU Software 2 OpenGL ES Analyzer Tuning the graphics pipeline Analyzer demo 3 Developer preview Jean-François Roy GPU Software Developer Technologies

More information

Streaming Massive Environments From Zero to 200MPH

Streaming Massive Environments From Zero to 200MPH FORZA MOTORSPORT From Zero to 200MPH Chris Tector (Software Architect Turn 10 Studios) Turn 10 Internal studio at Microsoft Game Studios - we make Forza Motorsport Around 70 full time staff 2 Why am I

More information

Image Processing Tricks in OpenGL. Simon Green NVIDIA Corporation

Image Processing Tricks in OpenGL. Simon Green NVIDIA Corporation Image Processing Tricks in OpenGL Simon Green NVIDIA Corporation Overview Image Processing in Games Histograms Recursive filters JPEG Discrete Cosine Transform Image Processing in Games Image processing

More information

Creating Complications with ClockKit Session 209

Creating Complications with ClockKit Session 209 App Frameworks #WWDC15 Creating Complications with ClockKit Session 209 Eliza Block watchos Engineer Paul Salzman watchos Engineer 2015 Apple Inc. All rights reserved. Redistribution or public display

More information

NVIDIA Parallel Nsight. Jeff Kiel

NVIDIA Parallel Nsight. Jeff Kiel NVIDIA Parallel Nsight Jeff Kiel Agenda: NVIDIA Parallel Nsight Programmable GPU Development Presenting Parallel Nsight Demo Questions/Feedback Programmable GPU Development More programmability = more

More information

PowerVR Hardware. Architecture Overview for Developers

PowerVR Hardware. Architecture Overview for Developers Public Imagination Technologies PowerVR Hardware Public. This publication contains proprietary information which is subject to change without notice and is supplied 'as is' without warranty of any kind.

More information

Profiling in Depth. Do you know where your code is? Session 412. Kris Markel Performance Tools Engineer Chad Woolf Performance Tools Engineer

Profiling in Depth. Do you know where your code is? Session 412. Kris Markel Performance Tools Engineer Chad Woolf Performance Tools Engineer Developer Tools #WWDC15 Profiling in Depth Do you know where your code is? Session 412 Kris Markel Performance Tools Engineer Chad Woolf Performance Tools Engineer 2015 Apple Inc. All rights reserved.

More information

Enhancing Traditional Rasterization Graphics with Ray Tracing. March 2015

Enhancing Traditional Rasterization Graphics with Ray Tracing. March 2015 Enhancing Traditional Rasterization Graphics with Ray Tracing March 2015 Introductions James Rumble Developer Technology Engineer Ray Tracing Support Justin DeCell Software Design Engineer Ray Tracing

More information

What s New in SpriteKit

What s New in SpriteKit Graphics and Games #WWDC14 What s New in SpriteKit Session 606 Norman Wang Game Technologies 2014 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission

More information

Designing for Apple Watch

Designing for Apple Watch Design #WWDC15 Designing for Apple Watch Session 802 Mike Stern User Experience Evangelist 2015 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission

More information

Getting fancy with texture mapping (Part 2) CS559 Spring Apr 2017

Getting fancy with texture mapping (Part 2) CS559 Spring Apr 2017 Getting fancy with texture mapping (Part 2) CS559 Spring 2017 6 Apr 2017 Review Skyboxes as backdrops Credits : Flipmode 3D Review Reflection maps Credits : NVidia Review Decal textures Credits : andreucabre.com

More information

Core ML in Depth. System Frameworks #WWDC17. Krishna Sridhar, Core ML Zach Nation, Core ML

Core ML in Depth. System Frameworks #WWDC17. Krishna Sridhar, Core ML Zach Nation, Core ML System Frameworks #WWDC17 Core ML in Depth Krishna Sridhar, Core ML Zach Nation, Core ML 2017 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission from

More information

Kenneth Dyke Sr. Engineer, Graphics and Compute Architecture

Kenneth Dyke Sr. Engineer, Graphics and Compute Architecture Kenneth Dyke Sr. Engineer, Graphics and Compute Architecture 2 Supporting multiple GPUs in your application Finding all renderers and devices Responding to renderer changes Making use of multiple GPUs

More information

What s New in Xcode App Signing

What s New in Xcode App Signing Developer Tools #WWDC16 What s New in Xcode App Signing Developing and distributing Session 401 Joshua Pennington Tools Engineering Manager Itai Rom Tools Engineer 2016 Apple Inc. All rights reserved.

More information

WatchKit In-Depth, Part 2

WatchKit In-Depth, Part 2 App Frameworks #WWDC15 WatchKit In-Depth, Part 2 Session 208 Nathan de Vries watchos Engineer Chloe Chang watchos Engineer 2015 Apple Inc. All rights reserved. Redistribution or public display not permitted

More information

Adapting to the New UI of OS X Yosemite

Adapting to the New UI of OS X Yosemite Frameworks #WWDC14 Adapting to the New UI of OS X Yosemite Session 209 Mike Stern User Experience Evangelist! Rachel Goldeen Cocoa Software Engineer! Patrick Heynen Cocoa Engineering Manager 2014 Apple

More information

SceneKit in Swift Playgrounds

SceneKit in Swift Playgrounds Session Graphics and Games #WWDC17 SceneKit in Swift Playgrounds 605 Michael DeWitt, Gem Collector Lemont Washington, Draw Call Blaster 2017 Apple Inc. All rights reserved. Redistribution or public display

More information

EECS 487: Interactive Computer Graphics

EECS 487: Interactive Computer Graphics EECS 487: Interactive Computer Graphics Lecture 21: Overview of Low-level Graphics API Metal, Direct3D 12, Vulkan Console Games Why do games look and perform so much better on consoles than on PCs with

More information

Octree-Based Sparse Voxelization for Real-Time Global Illumination. Cyril Crassin NVIDIA Research

Octree-Based Sparse Voxelization for Real-Time Global Illumination. Cyril Crassin NVIDIA Research Octree-Based Sparse Voxelization for Real-Time Global Illumination Cyril Crassin NVIDIA Research Voxel representations Crane et al. (NVIDIA) 2007 Allard et al. 2010 Christensen and Batali (Pixar) 2004

More information

CSE 167: Introduction to Computer Graphics Lecture #11: Visibility Culling

CSE 167: Introduction to Computer Graphics Lecture #11: Visibility Culling CSE 167: Introduction to Computer Graphics Lecture #11: Visibility Culling Jürgen P. Schulze, Ph.D. University of California, San Diego Fall Quarter 2017 Announcements Project 3 due Monday Nov 13 th at

More information

Leveraging Touch Input on ios

Leveraging Touch Input on ios App Frameworks #WWDC16 Leveraging Touch Input on ios And getting the most out of Apple Pencil Session 220 Dominik Wagner UIKit Engineer 2016 Apple Inc. All rights reserved. Redistribution or public display

More information

ios Accessibility Developing for everyone Session 201 Ian Fisch ios Accessibility

ios Accessibility Developing for everyone Session 201 Ian Fisch ios Accessibility App Frameworks #WWDC15 ios Accessibility Developing for everyone Session 201 Ian Fisch ios Accessibility 2015 Apple Inc. All rights reserved. Redistribution or public display not permitted without written

More information

SECTION 5 IMAGE PROCESSING 2

SECTION 5 IMAGE PROCESSING 2 SECTION 5 IMAGE PROCESSING 2 5.1 Resampling 3 5.1.1 Image Interpolation Comparison 3 5.2 Convolution 3 5.3 Smoothing Filters 3 5.3.1 Mean Filter 3 5.3.2 Median Filter 4 5.3.3 Pseudomedian Filter 6 5.3.4

More information

Introducing On Demand Resources

Introducing On Demand Resources App Frameworks #WWDC15 Introducing On Demand Resources An element of App Thinning Session 214 Steve Lewallen Frameworks Engineering Tony Parker Cocoa Frameworks 2015 Apple Inc. All rights reserved. Redistribution

More information

PowerVR Framework. October 2015

PowerVR Framework. October 2015 PowerVR Framework October 2015 Gerry Raptis Leading Developer Technology Engineer, PowerVR Graphics PowerVR Tools and SDK Overview Tools Development Debugging Optimisation Authoring SDK Development Learning

More information

Wed, October 12, 2011

Wed, October 12, 2011 Practical Occlusion Culling in Killzone 3 Michal Valient Lead Tech, Guerrilla B.V. Talk takeaway Occlusion culling system used in Killzone 3 The reasons why to use software rasterization (Some) technical

More information

What s New in tvos #WWDC16. App Frameworks. Session 206. Hans Kim tvos Engineer

What s New in tvos #WWDC16. App Frameworks. Session 206. Hans Kim tvos Engineer App Frameworks #WWDC16 What s New in tvos Session 206 Hans Kim tvos Engineer 2016 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission from Apple. Welcome

More information

Networking with NSURLSession

Networking with NSURLSession System Frameworks #WWDC15 Networking with NSURLSession Session 711 Luke Case Software Engineer Andreas Garkuscha Software Engineer Dan Vinegrad Software Engineer 2015 Apple Inc. All rights reserved. Redistribution

More information

Inside VR on Mobile. Sam Martin Graphics Architect GDC 2016

Inside VR on Mobile. Sam Martin Graphics Architect GDC 2016 Inside VR on Mobile Sam Martin Graphics Architect GDC 2016 VR Today Emerging technology Main mobile VR ecosystems Google Cardboard Samsung GearVR In this talk: Latency Multiple views Performance tuning

More information

Storyboards and Controllers on OS X

Storyboards and Controllers on OS X Frameworks #WWDC14 Storyboards and Controllers on OS X Contain yourself Session 212 Mike Swingler Interface Builder Engineer Raleigh Ledet AppKit Engineer 2014 Apple Inc. All rights reserved. Redistribution

More information

E6895 Advanced Big Data Analytics Lecture 8: GPU Examples and GPU on ios devices

E6895 Advanced Big Data Analytics Lecture 8: GPU Examples and GPU on ios devices E6895 Advanced Big Data Analytics Lecture 8: GPU Examples and GPU on ios devices Ching-Yung Lin, Ph.D. Adjunct Professor, Dept. of Electrical Engineering and Computer Science IBM Chief Scientist, Graph

More information

Rendering. Converting a 3D scene to a 2D image. Camera. Light. Rendering. View Plane

Rendering. Converting a 3D scene to a 2D image. Camera. Light. Rendering. View Plane Rendering Pipeline Rendering Converting a 3D scene to a 2D image Rendering Light Camera 3D Model View Plane Rendering Converting a 3D scene to a 2D image Basic rendering tasks: Modeling: creating the world

More information

Enabling immersive gaming experiences Intro to Ray Tracing

Enabling immersive gaming experiences Intro to Ray Tracing Enabling immersive gaming experiences Intro to Ray Tracing Overview What is Ray Tracing? Why Ray Tracing? PowerVR Wizard Architecture Example Content Unity Hybrid Rendering Demonstration 3 What is Ray

More information

Enhancing Traditional Rasterization Graphics with Ray Tracing. October 2015

Enhancing Traditional Rasterization Graphics with Ray Tracing. October 2015 Enhancing Traditional Rasterization Graphics with Ray Tracing October 2015 James Rumble Developer Technology Engineer, PowerVR Graphics Overview Ray Tracing Fundamentals PowerVR Ray Tracing Pipeline Using

More information

What s New in NSCollectionView Session 225

What s New in NSCollectionView Session 225 App Frameworks #WWDC15 What s New in NSCollectionView Session 225 Troy Stephens Application Frameworks Engineer 2015 Apple Inc. All rights reserved. Redistribution or public display not permitted without

More information

Voxel Cone Tracing and Sparse Voxel Octree for Real-time Global Illumination. Cyril Crassin NVIDIA Research

Voxel Cone Tracing and Sparse Voxel Octree for Real-time Global Illumination. Cyril Crassin NVIDIA Research Voxel Cone Tracing and Sparse Voxel Octree for Real-time Global Illumination Cyril Crassin NVIDIA Research Global Illumination Indirect effects Important for realistic image synthesis Direct lighting Direct+Indirect

More information

Windowing System on a 3D Pipeline. February 2005

Windowing System on a 3D Pipeline. February 2005 Windowing System on a 3D Pipeline February 2005 Agenda 1.Overview of the 3D pipeline 2.NVIDIA software overview 3.Strengths and challenges with using the 3D pipeline GeForce 6800 220M Transistors April

More information

Dominic Filion, Senior Engineer Blizzard Entertainment. Rob McNaughton, Lead Technical Artist Blizzard Entertainment

Dominic Filion, Senior Engineer Blizzard Entertainment. Rob McNaughton, Lead Technical Artist Blizzard Entertainment Dominic Filion, Senior Engineer Blizzard Entertainment Rob McNaughton, Lead Technical Artist Blizzard Entertainment Screen-space techniques Deferred rendering Screen-space ambient occlusion Depth of Field

More information

Monetize and Promote Your App with iad

Monetize and Promote Your App with iad Media #WWDC15 Monetize and Promote Your App with iad From design to launch Session 503 Carol Teng Shashank Phadke 2015 Apple Inc. All rights reserved. Redistribution or public display not permitted without

More information

Case 1:17-cv SLR Document 1-3 Filed 01/23/17 Page 1 of 33 PageID #: 60 EXHIBIT C

Case 1:17-cv SLR Document 1-3 Filed 01/23/17 Page 1 of 33 PageID #: 60 EXHIBIT C Case 1:17-cv-00064-SLR Document 1-3 Filed 01/23/17 Page 1 of 33 PageID #: 60 EXHIBIT C Case 1:17-cv-00064-SLR Document 1-3 Filed 01/23/17 Page 2 of 33 PageID #: 61 U.S. Patent No. 7,633,506 VIZIO / Sigma

More information

Mastering Xcode for iphone OS Development Part 1. Todd Fernandez Sr. Manager, IDEs

Mastering Xcode for iphone OS Development Part 1. Todd Fernandez Sr. Manager, IDEs Mastering Xcode for iphone OS Development Part 1 Todd Fernandez Sr. Manager, IDEs 2 3 Customer Reviews Write a Review Current Version (1) All Versions (24) Gorgeous and Addictive Report a Concern by Play

More information

Mastering UIKit on tvos

Mastering UIKit on tvos App Frameworks #WWDC16 Mastering UIKit on tvos Session 210 Justin Voss UIKit Engineer 2016 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission from

More information

GPU Accelerating Speeded-Up Robust Features Timothy B. Terriberry, Lindley M. French, and John Helmsen

GPU Accelerating Speeded-Up Robust Features Timothy B. Terriberry, Lindley M. French, and John Helmsen GPU Accelerating Speeded-Up Robust Features Timothy B. Terriberry, Lindley M. French, and John Helmsen Overview of ArgonST Manufacturer of integrated sensor hardware and sensor analysis systems 2 RF, COMINT,

More information

Introducing the Contacts Framework

Introducing the Contacts Framework App Frameworks #WWDC15 Introducing the Contacts Framework For OS X, ios, and watchos Session 223 Bruce Stadnyk ios Contacts Engineer Dave Dribin OS X Contacts Engineer Julien Robert ios Contacts Engineer

More information

Using and Extending the Xcode Source Editor

Using and Extending the Xcode Source Editor Developer Tools #WWDC16 Using and Extending the Xcode Source Editor Session 414 Mike Swingler Xcode Infrastructure and Editors Chris Hanson Xcode Infrastructure and Editors 2016 Apple Inc. All rights reserved.

More information

Game Graphics & Real-time Rendering

Game Graphics & Real-time Rendering Game Graphics & Real-time Rendering CMPM 163, W2018 Prof. Angus Forbes (instructor) angus@ucsc.edu Lucas Ferreira (TA) lferreira@ucsc.edu creativecoding.soe.ucsc.edu/courses/cmpm163 github.com/creativecodinglab

More information

Profiling and Debugging Games on Mobile Platforms

Profiling and Debugging Games on Mobile Platforms Profiling and Debugging Games on Mobile Platforms Lorenzo Dal Col Senior Software Engineer, Graphics Tools Gamelab 2013, Barcelona 26 th June 2013 Agenda Introduction to Performance Analysis with ARM DS-5

More information

DirectX 11 First Elements

DirectX 11 First Elements DirectX 11 First Elements 0. Project changes changed Dx11Base.h void Update( float dt ); void Render( ); to virtual void Update( float dt ) = 0; virtual void Render( ) = 0; new App3D.h #ifndef _APP_3D_H_

More information

GPU Memory Model Overview

GPU Memory Model Overview GPU Memory Model Overview John Owens University of California, Davis Department of Electrical and Computer Engineering Institute for Data Analysis and Visualization SciDAC Institute for Ultrascale Visualization

More information

Deus Ex is in the Details

Deus Ex is in the Details Deus Ex is in the Details Augmenting the PC graphics of Deus Ex: Human Revolution using DirectX 11 technology Matthijs De Smedt Graphics Programmer, Nixxes Software Overview Introduction DirectX 11 implementation

More information

CS8803SC Software and Hardware Cooperative Computing GPGPU. Prof. Hyesoon Kim School of Computer Science Georgia Institute of Technology

CS8803SC Software and Hardware Cooperative Computing GPGPU. Prof. Hyesoon Kim School of Computer Science Georgia Institute of Technology CS8803SC Software and Hardware Cooperative Computing GPGPU Prof. Hyesoon Kim School of Computer Science Georgia Institute of Technology Why GPU? A quiet revolution and potential build-up Calculation: 367

More information

What s New in CloudKit

What s New in CloudKit System Frameworks #WWDC15 What s New in CloudKit Session 704 Olivier Bonnet icloud Client Eric Krugler icloud Server 2015 Apple Inc. All rights reserved. Redistribution or public display not permitted

More information

Mastering Drag and Drop

Mastering Drag and Drop Session App Frameworks #WWDC17 Mastering Drag and Drop 213 Tom Adriaenssen, UIKit Wenson Hsieh, WebKit Robb Böhnke, UIKit 2017 Apple Inc. All rights reserved. Redistribution or public display not permitted

More information

Mastering Xcode for iphone OS Development Part 2. Marc Verstaen Sr. Manager, iphone Tools

Mastering Xcode for iphone OS Development Part 2. Marc Verstaen Sr. Manager, iphone Tools Mastering Xcode for iphone OS Development Part 2 Marc Verstaen Sr. Manager, iphone Tools 2 Tale of Two Sessions Part 1: Orientation: Tour of complete development cycle Part 2: Mastery: Details of several

More information

CSE 167: Lecture #5: Rasterization. Jürgen P. Schulze, Ph.D. University of California, San Diego Fall Quarter 2012

CSE 167: Lecture #5: Rasterization. Jürgen P. Schulze, Ph.D. University of California, San Diego Fall Quarter 2012 CSE 167: Introduction to Computer Graphics Lecture #5: Rasterization Jürgen P. Schulze, Ph.D. University of California, San Diego Fall Quarter 2012 Announcements Homework project #2 due this Friday, October

More information

Advanced Debugging and the Address Sanitizer

Advanced Debugging and the Address Sanitizer Developer Tools #WWDC15 Advanced Debugging and the Address Sanitizer Finding your undocumented features Session 413 Mike Swingler Xcode UI Infrastructure Anna Zaks LLVM Program Analysis 2015 Apple Inc.

More information

How to Work on Next Gen Effects Now: Bridging DX10 and DX9. Guennadi Riguer ATI Technologies

How to Work on Next Gen Effects Now: Bridging DX10 and DX9. Guennadi Riguer ATI Technologies How to Work on Next Gen Effects Now: Bridging DX10 and DX9 Guennadi Riguer ATI Technologies Overview New pipeline and new cool things Simulating some DX10 features in DX9 Experimental techniques Why This

More information

Creating Photo and Video Effects Using Depth

Creating Photo and Video Effects Using Depth Session #WWDC18 Creating Photo and Video Effects Using Depth 503 Emmanuel Piuze-Phaneuf, Core Image Ron Sokolovsky, Video Engineering 2018 Apple Inc. All rights reserved. Redistribution or public display

More information

Inter-Process Communication and Synchronization of Processes, Threads and Tasks: Lesson-1: PROCESS

Inter-Process Communication and Synchronization of Processes, Threads and Tasks: Lesson-1: PROCESS Inter-Process Communication and Synchronization of Processes, Threads and Tasks: Lesson-1: PROCESS 1 Process Concepts 2 Process A process consists of executable program (codes), state of which is controlled

More information

Accessibility on ios. Developing for everyone. Frameworks #WWDC14. Session 210 Clare Kasemset ios Accessibility

Accessibility on ios. Developing for everyone. Frameworks #WWDC14. Session 210 Clare Kasemset ios Accessibility Frameworks #WWDC14 Accessibility on ios Developing for everyone Session 210 Clare Kasemset ios Accessibility 2014 Apple Inc. All rights reserved. Redistribution or public display not permitted without

More information

Power, Performance, and Diagnostics

Power, Performance, and Diagnostics Core OS #WWDC14 Power, Performance, and Diagnostics What's new in GCD and XPC Session 716 Daniel Steffen Darwin Runtime Engineer 2014 Apple Inc. All rights reserved. Redistribution or public display not

More information

CSE 167: Introduction to Computer Graphics Lecture #4: Vertex Transformation

CSE 167: Introduction to Computer Graphics Lecture #4: Vertex Transformation CSE 167: Introduction to Computer Graphics Lecture #4: Vertex Transformation Jürgen P. Schulze, Ph.D. University of California, San Diego Fall Quarter 2013 Announcements Project 2 due Friday, October 11

More information

Adding Advanced Shader Features and Handling Fragmentation

Adding Advanced Shader Features and Handling Fragmentation Copyright Khronos Group, 2010 - Page 1 Adding Advanced Shader Features and Handling Fragmentation How to enable your application on a wide range of devices Imagination Technologies Copyright Khronos Group,

More information

IOS PERFORMANCE. Getting the most out of your Games and Apps

IOS PERFORMANCE. Getting the most out of your Games and Apps IOS PERFORMANCE Getting the most out of your Games and Apps AGENDA Intro to Performance The top 10 optimizations for your games and apps Instruments & Example Q&A WHO AM I? Founder of Prop Group www.prop.gr

More information

Spring 2011 Prof. Hyesoon Kim

Spring 2011 Prof. Hyesoon Kim Spring 2011 Prof. Hyesoon Kim Application Geometry Rasterizer CPU Each stage cane be also pipelined The slowest of the pipeline stage determines the rendering speed. Frames per second (fps) Executes on

More information

Mali Developer Resources. Kevin Ho ARM Taiwan FAE

Mali Developer Resources. Kevin Ho ARM Taiwan FAE Mali Developer Resources Kevin Ho ARM Taiwan FAE ARM Mali Developer Tools Software Development SDKs for OpenGL ES & OpenCL OpenGL ES Emulators Shader Development Studio Shader Library Asset Creation Texture

More information

Adaptive Point Cloud Rendering

Adaptive Point Cloud Rendering 1 Adaptive Point Cloud Rendering Project Plan Final Group: May13-11 Christopher Jeffers Eric Jensen Joel Rausch Client: Siemens PLM Software Client Contact: Michael Carter Adviser: Simanta Mitra 4/29/13

More information

CSE 167: Introduction to Computer Graphics Lecture #9: Visibility. Jürgen P. Schulze, Ph.D. University of California, San Diego Fall Quarter 2018

CSE 167: Introduction to Computer Graphics Lecture #9: Visibility. Jürgen P. Schulze, Ph.D. University of California, San Diego Fall Quarter 2018 CSE 167: Introduction to Computer Graphics Lecture #9: Visibility Jürgen P. Schulze, Ph.D. University of California, San Diego Fall Quarter 2018 Announcements Midterm Scores are on TritonEd Exams to be

More information

What s New in ARKit 2

What s New in ARKit 2 Session #WWDC18 What s New in ARKit 2 602 Arsalan Malik, ARKit Engineer Reinhard Klapfer, ARKit Engineer 2018 Apple Inc. All rights reserved. Redistribution or public display not permitted without written

More information

Advances in AVFoundation Playback

Advances in AVFoundation Playback Media #WWDC16 Advances in AVFoundation Playback Waiting, looping, switching, widening, optimizing Session 503 Sam Bushell Media Systems Architect 2016 Apple Inc. All rights reserved. Redistribution or

More information

Hardware Accelerated Volume Visualization. Leonid I. Dimitrov & Milos Sramek GMI Austrian Academy of Sciences

Hardware Accelerated Volume Visualization. Leonid I. Dimitrov & Milos Sramek GMI Austrian Academy of Sciences Hardware Accelerated Volume Visualization Leonid I. Dimitrov & Milos Sramek GMI Austrian Academy of Sciences A Real-Time VR System Real-Time: 25-30 frames per second 4D visualization: real time input of

More information