<<

Introduction to PowerVR Ray Tracing Tuesday 18th March, 2014 @ GDC

James A. McCombe What are we launching today? Host CPU Control and Register Bus System Interface Memory Interface

Vertex Unified Cluster Array Data Master

Texture USC0 USC1 Unit Data Master Course Grain Scheduler ... Core Compute Management Data Master Texture USCn-1 USCn Memory Ray Unit Cache Unit Data Master

Ray Tracing Unit

Intersection Scene Frame Coherency Engine Tiling Co- Pixel Co- 2D Core Processor Array Hierarchy Accumulator processor Processor (PTLA) Generator Cache System Memory Bus

What are the applications for this?

Augmented Reality

Image and Diagram Copyright Peter Kán 2012 Virtual Reality a.k.a Multi-persective rendering

Lens distortion and aberration correction

Lenticular Displays

Ultra-low latency rendering Hybrid rendering in games

• Shadows • Reflections • Transparency • Better scaling with multiple dynamic lights • Real-time light map updates for the rasteriser • Easy to bolt on Fully ray traced graphics

• Brute force path tracing • Produces photo realism easily • Pretty much requires all the 3D content to be ray traced • Possible in todays technology in console / desktop using Wizard • Probably not practical for fully real-time use in mobile for a couple more generations. Fine for sub-realtime use. Non-graphics

• Better in-game AI • Collision Detection • 3D spatial search Overview of PowerVR Power and Bandwidth

300W 300Gb/s 270Gb/s 240Gb/s 225W 210Gb/s 180Gb/s 150W 150Gb/s 120Gb/s 90Gb/s 75W 60Gb/s 30Gb/s 0W 0Gb/s Workstation Mobile Workstation Light Laptop Tablet

Graphics Watts Graphics Bandwidth Capability of our mobile graphics 150

112.5

• Almost 5x compute capability 75 • 4x vec4 MAD → 16x Scalar 2xMAD

Shader GFlops • 1.5 → 3.6 Gtexels/s 37.5 • OpenGLES 3.0 Support

0 2006 2007 2008 2009 2010 2011 2012 2013 Host CPU Control and Register Bus System Interface Memory Interface

Vertex Unified Shading Cluster Array Data Master

Texture USC0 USC1 Pixel Unit Data Master Course Grain Scheduler ... Core Compute Management Data Master Texture USCn-1 USCn Memory Unit Cache Unit

Tiling Co- Pixel Co- 2D Core processor Processor (PTLA) System Memory Bus Vertex Task Vertex Data Master 32 Instances Unified Shading Cluster Array

Pixel Task Texture USC0 USC1 Pixel Unit Data CGS Master 32 Instances Texture USCn-1 USCn Compute Task Unit Compute Data Master 32 Instances

• An instance is a vertex, pixel or OpenCL thread • All instances in the task share Program, Uniforms, Parameters, etc. Uniforms and Constants Common Store Registers (Shared across instances in the task)

Common Instruction ALU ALU ALU ALU ALU ALU ALU ALU ALU ALU ALU ALU ALU ALU ALU ALU

Per Pixel / Vertex data and shader temps

Unified Store Registers (Private registers per instance)

(not exact) ABS, Source 0 NEG, etc. ⩽ 2 Flops

ABS, Integer Math Source 1 Output 0 NEG, etc. Format ABS, Conversions Source 2 NEG, etc. Format Comparison Conversions ABS, Source 3 NEG, etc.

ABS, Source 4 ⩽ 2 Flops Output 1 NEG, etc.

ABS, Source 5 NEG, etc.

12 Cycles of Latency (not exact) Common Store Registers (Shared across instances in the task)

Common Instruction ALU ALU ALU ALU ALU ALU ALU ALU ALU ALU ALU ALU ALU ALU ALU ALU

varying vec2 texCoord; void main() { if (texCoord.x > 0.5) { ...... } else { ... Unified Store Registers (Private registers per instance) ... } Overall capability

• Series6 gives you over 100Gflops for shading on latest mobile devices • OpenGL ES 3.0 support • Massive capability gain allowing math heavy • Mobile graphics is where the actual innovation is happening • Try it! A Technical introduction to Wizard Host CPU Control and Register Bus System Interface Memory Interface

Vertex Unified Shading Cluster Array Data Master

Texture USC0 USC1 Pixel Unit Data Master Course Grain Scheduler ... Core Compute Management Data Master Texture USCn-1 USCn Memory Ray Unit Cache Unit Data Master

Ray Tracing Unit

Intersection Scene Frame Coherency Engine Tiling Co- Pixel Co- 2D Core Processor Array Hierarchy Accumulator processor Processor (PTLA) Generator Cache System Memory Bus Host CPU Control and Register Bus System Interface Memory Interface

Vertex Unified Shading Cluster Array Data Master

Texture USC0 USC1 Pixel Unit Data Master Course Grain Scheduler ... Core Compute Management Data Master Texture USCn-1 USCn Memory Ray Unit Cache Unit Data Master

Ray Tracing Unit

Intersection Scene Frame Coherency Engine Tiling Co- Pixel Co- 2D Core Processor Array Hierarchy Accumulator processor Processor (PTLA) Generator Cache System Memory Bus ABS, Source 0 NEG, etc. ⩽ 2 Flops

ABS, Integer Math Source 1 Output 0 NEG, etc. Ray RAM Format ABS, Conversions Source 2 NEG, etc. Format Comparison Conversions ABS, Source 3 NEG, etc.

ABS, Source 4 ⩽ 2 Flops Output 1 NEG, etc. Ray RAM

ABS, Source 5 NEG, etc.

12 Cycles of Latency (not exact) New shader type

• Ray Shaders are invoked when a ray intersects a triangle • Shaders types can emit any number of rays • OpenRL has a frame shader to emit primary rays • Existing fragment / pixel shaders can emit rays also!

• GLSL Programming model is the same • Built-in functions, parameters, etc. Primitive Objects

• Encapsulate the rendering state for one mesh • Includes VBOs, uniforms, shader programs, texture bindings, etc. • Ray tracing unit sorts rays into tasks with common primitive objects

• Persistent between frames • Mutable objects by the client Constraints / Limitations

• Shaders cannot wait for results of individual ray trace operations • Shaders must provide a worst case estimate on number of child rays • Per-ray user data payload must be carefully managed Task 0 Parallelism is on rays NOT

Task 1 Common Instruction ALU ALU ALU ALU

(In this example, ALU width is 4 to make the diagram smaller) Task 2

Task 3 Parallelism is on rays NOT pixels Relief: Quick ray emission demo Intersection Processor Array or “Who needs Fixed Function?” Ray:AABB Test

• “Fast Ray-Axis Aligned Bounding Box Overlap Tests with Plucker Coordinates.” – Jeffrey Mahovsky and Brian Wyvill • 6 lines form the silhouette of the AABB • 6 planes from the ray origin and each edge vector • Dot product of plane normal and ray direction vector • 6 signs must match and be negative. Ray distance setup Translation Box Plane Setup Plane tests Test Combine

0 XB >7

invert voxel_center_x shift_center_x7+/! XA cov_convert ri(31) ri(31) ! AX0min origin_x XB BX0max XA

Octant(0) >7 origin_x_miss ri invert

ri(31) ri(31)

endpt_x_miss 0 YB dirx >7

ri invert x voxel_center_y shift_center_y7+/! YA ray_distance Hit cov_convert rj(31) rj(31) origin_y_miss MISS ! AY0min endpt_y_miss origin_y YB BY0max YA diry or Octant(1) >7 rj x rj origin_z_miss ray_distance invert Miss rj(31) rj(31)

dirz

rk 0 x ZB ray_distance >7 endpt_z_miss !

invert voxel_center_z shift_center_z7+/! ZA cov_convert rk(31) rk(31) ! AZ0min origin_z ZB BZ0max ZA Octant(2) >7 rk invert rk(31) rk(31) ! 3 MUL 6 SUB 6 ADD 12 MUL 6 bitwise OR USC instruction group packing

LD MUL ADD MUL OR LD MUL ADD MUL – LD MUL ADD MUL OR LD SUB ADD MUL – 26 Instructions LD SUB ADD MUL OR LD SUB ADD MUL – (32 if using compressed SUB MUL OR data formats) SUB MUL – SUB MUL OR – MUL – MUL OR MUL – 44x less area for this function

USC USC USC USC USC USC USC USC

USC USC USC USC USC USC USC USC

USC USC USC USC USC USC USC USC Tester and Rays Tester and Rays Box Box Box Box vs. vs. vs. vs. Ray Ray Ray Ray

Box Box Box Box vs. vs. vs. vs. Ray Ray Ray Ray

Box Box Box Box vs. vs. vs. vs. Child Ray Ray Ray Ray Address Coherence Cache

2 7 2 4 2 2

Box Box Box Box 2 2 1 5 vs. vs. vs. vs. 5 2 3 2 1 2 Ray Ray Ray Ray Free Queue 5 3 1 2

Box 5 2 7 7 2 5 Triangle vs. Ray Triangle vs. Ray Hits Old Count Existing Queue

Queue Packer

Tester and Rays Tester and Rays Inst Data Inst Data

Box Box Box Box Update Update vs. vs. vs. vs. Existing New Ray Ray Ray Ray Queue Queue

Box Box Box Box Coherence Queue RAM vs. vs. vs. vs. Ray Ray Ray Ray

Box Box Box Box vs. vs. vs. vs. Ray Ray Ray Ray

USC USC USC USC USC USC USC Box Box Box Box vs. vs. vs. vs. Ray Ray Ray Ray

Triangle vs. Ray Triangle vs. Ray

USC USC USC USC USC USC USC

USC USC USC USC USC USC USC

USC USC USC USC USC USC USC The Ray Tracing Unit and Coherence Engine Unified Shading Cluster Array System Memory Interface Texture USC0 USC1 Unit Course Ray Grain Data Master Scheduler

Texture USCn-1 USCn Unit

Rays grouped by PrimitiveObject Rays in arbitrary order (Shader + Resources)

Ray Tracing Unit

Intersection Coherency Engine Processor Array

System Memory Bus AABB Blocks Vertex Blocks Varyings

Ascending Virtual Memory Addresses

( around 100Mbytes for 1M triangles including varyings ) Primitive Primitive Object 1 Object 2

PrimitiveObject 0 node_13994 node_7671 node_7961 node_18458 node_6085 node_6099 node_7905 node_7861 node_8654 node_8606 node_7124 node_9423 node_7289 node_11312 node_8862 node_8876 node_10504 node_9245

node_8261 node_7666 node_7956 node_6080 node_6094 node_7900 node_7856 node_8649 node_8601 node_7119 node_7364 node_7284 node_9199 node_8857 node_8871 node_8655 node_6468

node_12112 node_18453

node_22355 node_22359 node_22487 node_22490 node_22497

node_22369 node_22372 node_22404 node_22409 node_22510 node_22502

node_22418 node_22517 node_22528 node_22543 node_13993 node_22290

node_16991 node_11714 node_16984 node_22423 node_22533 node_22550 node_19252 node_19955

node_6445 node_16994 node_6436 node_16999 node_6428 node_11716 node_16978 node_11718 node_16981 node_16986 node_14127 node_22558 node_8356 node_8725 node_19374 node_21187 node_21196 node_21326 node_22294 node_22307 node_21211

node_6450 node_6452 node_6438 node_6440 node_6430 node_11722 node_6432 node_6424 node_11732 node_17005 node_17121 node_22561 node_8412 node_9046 node_9110 node_21192 node_21202 node_21331 node_21338 node_21237 node_21354 node_22311 node_22317 node_22431 node_21216 node_21293 node_21571 node_21383 node_22263 node_22274 node_22279 node_19959

node_6456 node_6442 node_11744 node_6434 node_11726 node_6426 node_11730 node_13585 node_13707 node_9221 node_21343 node_21658 node_21663 node_21822 node_21242 node_21260 node_21890 node_21360 node_21369 node_21489 node_22300 node_22323 node_22459 node_21225 node_21300 node_21311 node_21581 node_21793 node_21388 node_21396 node_21413 node_22268 node_22282 node_19964 node_19974 node_19975 node_20031

node_13629 node_13503 node_17200 node_19064 node_7854 node_18926 node_21672 node_21834 node_21249 node_21270 node_21278 node_21904 node_21917 node_21374 node_21503 node_21969 node_22041 node_16820 node_22438 node_22446 node_22474 node_21229 node_21316 node_21641 node_21577 node_21799 node_21808 node_21402 node_21475 node_21419 node_21426 node_21947 node_22332 node_6345 node_12822 node_19981 node_19984 node_20042

node_7590 node_7638 node_8136 node_19307 node_8219 node_8344 node_8549 node_19067 node_7502 node_13393 node_17123 node_21677 node_21828 node_21253 node_21284 node_21685 node_21730 node_21746 node_21897 node_21924 node_21933 node_21496 node_21983 node_22102 node_22053 node_22057 node_22073 node_21516 node_22451 node_22467 node_19254 node_21598 node_21623 node_21876 node_21589 node_21813 node_21442 node_21447 node_21480 node_22028 node_21431 node_21950 node_21955 node_22335 node_22340 node_22381 node_20037 node_20056 node_20067 node_19853

node_7608 node_13788 node_7676 node_13868 node_7696 node_8290 node_14009 node_8362 node_8774 node_19446 node_8394 node_8998 node_9102 node_7544 node_13643 node_7586 node_7622 node_13887 node_19311 node_13455 node_16862 node_13523 node_17007 node_17203 node_21839 node_18928 node_21751 node_21910 node_21938 node_21509 node_21977 node_22047 node_22066 node_21521 node_21540 node_10766 node_16823 node_11100 node_10782 node_16854 node_22480 node_18988 node_21608 node_21647 node_21846 node_21862 node_21881 node_18531 node_21455 node_21463 node_21997 node_22002 node_22032 node_21960 node_22079 node_22082 node_22345 node_22384 node_22389 node_16766 node_20047 node_20061 node_19804 node_19814 node_19831

node_7714 node_13977 node_8419 node_9065 node_9116 node_9213 node_14080 node_7606 node_13722 node_7662 node_13802 node_17454 node_19703 node_11809 node_17503 node_11843 node_19203 node_21692 node_21702 node_21736 node_19017 node_19161 node_19283 node_21989 node_22108 node_22115 node_18215 node_21530 node_21548 node_21557 node_22191 node_11102 node_16838 node_11104 node_10804 node_16827 node_10833 node_10965 node_11094 node_16857 node_21630 node_21854 node_21867 node_18476 node_22011 node_22018 node_22129 node_22174 node_22180 node_22092 node_22094 node_22393 node_6335 node_16755 node_12588 node_16753 node_20073 node_19838 node_19858 node_11473

node_9228 node_11822 node_17816 node_19069 node_21713 node_21760 node_21766 node_17877 node_19020 node_22120 node_21533 node_21562 node_22236 node_11106 node_16841 node_10853 node_16831 node_11031 node_19643 node_16843 node_16850 node_19131 node_14145 node_18500 node_19244 node_22143 node_22156 node_22163 node_6337 node_12690 node_6339 node_6331 node_12766 node_16792 node_12606 node_16748 node_12634 node_16751 node_19867 node_11477 node_15940

node_11835 node_17555 node_6602 node_6594 node_6620 node_17935 node_19071 node_13885 node_19313 node_21777 node_21782 node_17818 node_13947 node_19413 node_18068 node_12072 node_13427 node_18074 node_18276 node_22194 node_22242 node_11096 node_19259 node_13945 node_19377 node_19380 node_19403 node_14131 node_14139 node_13205 node_18559 node_18561 node_18982 node_17990 node_17774 node_6341 node_12720 node_6333 node_12744 node_12403 node_16771 node_16773 node_16759 node_12413 node_16786 node_19624 node_12405

node_6604 node_11863 node_6596 node_11883 node_6598 node_6624 node_11926 node_6630 node_6608 node_17998 node_18933 node_13389 node_11756 node_11846 node_17821 node_6511 node_17939 node_18000 node_5839 node_18071 node_5814 node_18146 node_5852 node_12080 node_18344 node_12093 node_18591 node_13489 node_16946 node_13565 node_11674 node_18640 node_18077 node_19024 node_19285 node_12982 node_22251 node_11098 node_11108 node_16846 node_19264 node_19272 node_19385 node_13922 node_19406 node_18993 node_7950 node_19157 node_14134 node_12102 node_13171 node_13189 node_13423 node_13415 node_18536 node_19224 node_17711 node_16762 node_12415 node_12407 node_16779 node_12409 node_9752 node_15943 node_11489 node_15987 node_11023 node_16006

node_6600 node_11903 node_6634 node_6610 node_6612 node_7722 node_18937 node_18944 node_19077 node_19206 node_13451 node_16866 node_11760 node_17262 node_17255 node_12594 node_17507 node_17388 node_11848 node_12706 node_17825 node_17828 node_6517 node_11929 node_6521 node_17941 node_18003 node_5842 node_5844 node_5820 node_5824 node_5854 node_11988 node_5856 node_5848 node_12049 node_18275 node_13617 node_17092 node_11705 node_18688 node_19784 node_18149 node_18221 node_12964 node_18279 node_19028 node_13000 node_18376 node_22201 node_22210 node_22256 node_7692 node_13750 node_19275 node_13933 node_19394 node_13830 node_9106 node_18999 node_19006 node_19136 node_8245 node_8346 node_18661 node_13004 node_18680 node_12108 node_13028 node_18630 node_13230 node_19762 node_13179 node_18427 node_13193 node_18348 node_13197 node_13485 node_16922 node_13477 node_16940 node_13546 node_18240 node_18254 node_18265 node_18135 node_18207 node_18540 node_18547 node_18566 node_18481 node_19228 node_19235 node_19340 node_13904 node_19363 node_19366 node_18958 node_17970 node_19744 node_17648 node_12598 node_17754 node_12411 node_16783 node_16554 node_9818 node_16574 node_9894 node_10927 node_15947 node_11012 node_15953 node_10947 node_15989 node_15994 node_16008

node_6616 node_7738 node_8332 node_7766 node_18948 node_8439 node_19082 node_19091 node_19210 node_13645 node_19217 node_19317 node_17010 node_11764 node_12354 node_11749 node_12622 node_17509 node_12646 node_17558 node_17390 node_17328 node_17361 node_6491 node_11869 node_17833 node_17883 node_6525 node_17944 node_5846 node_5832 node_11979 node_5858 node_12011 node_5850 node_12031 node_18082 node_5669 node_18151 node_18155 node_5687 node_11994 node_18224 node_18284 node_19166 node_13949 node_19416 node_13024 node_18595 node_22218 node_18863 node_7710 node_13760 node_7688 node_7634 node_13671 node_13924 node_9112 node_9104 node_19009 node_19145 node_8396 node_14101 node_13008 node_18665 node_12990 node_18671 node_12986 node_18683 node_13032 node_13044 node_13274 node_18623 node_13266 node_18637 node_17174 node_18436 node_13201 node_18402 node_13481 node_16925 node_13613 node_17066 node_13607 node_17086 node_18244 node_18256 node_5680 node_18267 node_18311 node_18323 node_18334 node_18111 node_6090 node_12136 node_18550 node_13137 node_18572 node_18578 node_6134 node_18486 node_5734 node_18494 node_18505 node_13732 node_19238 node_13908 node_19346 node_19352 node_8338 node_18963 node_18972 node_19103 node_19116 node_8441 node_19127 node_17974 node_17981 node_18034 node_12779 node_18058 node_18061 node_17850 node_17859 node_6532 node_17871 node_12426 node_12630 node_17285 node_11805 node_12626 node_17302 node_17758 node_17765 node_17781 node_11801 node_17806 node_17808 node_17691 node_9822 node_9756 node_16559 node_9835 node_16564 node_16693 node_9958 node_16716 node_10931 node_10919 node_11008 node_15956 node_11481 node_15997 node_11016 node_11638

node_8174 node_8336 node_8194 node_8340 node_8520 node_19094 node_7478 node_13724 node_19321 node_19329 node_16869 node_13515 node_13591 node_17013 node_17265 node_11768 node_17308 node_12358 node_17324 node_11752 node_17244 node_19706 node_11803 node_17514 node_12676 node_17561 node_17422 node_6493 node_11867 node_12692 node_17840 node_6495 node_11889 node_17886 node_17950 node_18009 node_5630 node_18087 node_18092 node_5674 node_5678 node_18157 node_5691 node_11992 node_5695 node_12017 node_18229 node_18286 node_18292 node_19034 node_8150 node_19168 node_19172 node_12074 node_18379 node_13040 node_18598 node_18894 node_7706 node_13764 node_7672 node_13681 node_7686 node_13935 node_7510 node_13926 node_7504 node_9217 node_8717 node_8744 node_9215 node_8715 node_7960 node_13011 node_12086 node_12078 node_18674 node_13048 node_13237 node_18626 node_11670 node_13060 node_18429 node_18351 node_13419 node_16930 node_17068 node_13609 node_17073 node_5976 node_5685 node_5676 node_5912 node_18318 node_18327 node_5652 node_18337 node_18116 node_18125 node_12891 node_18138 node_18185 node_6361 node_13119 node_6086 node_6084 node_12128 node_12152 node_18582 node_6138 node_6124 node_5736 node_5741 node_18513 node_18521 node_7574 node_7600 node_13742 node_7584 node_13653 node_13897 node_19356 node_8342 node_7752 node_8334 node_18975 node_19110 node_19119 node_8818 node_9080 node_11873 node_17984 node_12782 node_18041 node_18047 node_6879 node_17854 node_17862 node_6540 node_6548 node_17900 node_17914 node_17925 node_17151 node_11658 node_17543 node_12238 node_12496 node_17636 node_11774 node_16891 node_13465 node_16911 node_12510 node_17590 node_11785 node_12430 node_17607 node_11793 node_12602 node_17289 node_11818 node_17296 node_12684 node_17475 node_12680 node_17494 node_6692 node_12451 node_17768 node_12556 node_17789 node_17795 node_6719 node_17696 node_17702 node_17718 node_17735 node_17745 node_9760 node_16567 node_9962 node_16698 node_9972 node_16705 node_10923 node_11485 node_11019

node_8182 node_8374 node_8390 node_8447 node_8808 node_9078 node_8919 node_9098 node_7520 node_13633 node_7562 node_7498 node_7610 node_13804 node_19331 node_13379 node_16873 node_13395 node_16879 node_13517 node_17017 node_12258 node_17269 node_12254 node_17274 node_12270 node_17311 node_12246 node_17246 node_11654 node_12421 node_12590 node_17516 node_17521 node_11824 node_17566 node_17396 node_17434 node_17445 node_11772 node_17331 node_6499 node_11887 node_6503 node_11909 node_17890 node_17957 node_6530 node_18012 node_18017 node_5644 node_5650 node_5889 node_18099 node_5682 node_11982 node_18164 node_5699 node_12015 node_6307 node_5703 node_12037 node_18297 node_8784 node_19039 node_19044 node_8307 node_8372 node_19175 node_19289 node_12082 node_18382 node_12978 node_18387 node_18602 node_13241 node_13437 node_18804 node_18836 node_7626 node_7670 node_13685 node_7704 node_13754 node_7624 node_7552 node_13840 node_7506 node_7546 node_13834 node_9224 node_8719 node_9042 node_9040 node_8399 node_8414 node_14105 node_7995 node_12088 node_11702 node_17163 node_13185 node_18457 node_13052 node_18432 node_13080 node_18356 node_12118 node_18363 node_13103 node_18405 node_13557 node_17076 node_5978 node_5992 node_6301 node_5920 node_5892 node_5658 node_5633 node_6056 node_12894 node_12021 node_18128 node_18191 node_18198 node_6359 node_13123 node_6357 node_13109 node_5721 node_13141 node_6066 node_12144 node_6383 node_6130 node_5743 node_6098 node_5729 node_18524 node_7576 node_7604 node_13746 node_7490 node_13663 node_7500 node_7564 node_13911 node_7616 node_13899 node_13812 node_7768 node_8376 node_7724 node_9133 node_14087 node_6767 node_6783 node_12734 node_7165 node_11853 node_11913 node_18051 node_6865 node_6560 node_17908 node_17917 node_17928 node_11694 node_17144 node_11691 node_17158 node_17653 node_12341 node_17536 node_12338 node_17550 node_12488 node_17639 node_11778 node_17645 node_13469 node_16895 node_13461 node_16901 node_13403 node_16914 node_13603 node_17037 node_13597 node_17057 node_12506 node_17594 node_11789 node_17601 node_12522 node_17612 node_11797 node_17631 node_11841 node_17478 node_17482 node_17496 node_7034 node_12538 node_6694 node_6688 node_12443 node_12467 node_17799 node_6723 node_6707 node_6928 node_17705 node_17728 node_17738 node_6913 node_17748 node_9826 node_9966 node_9898 node_9908 node_16708 node_10935 node_10942

node_8378 node_8451 node_9126 node_9184 node_14083 node_7482 node_13637 node_7594 node_13712 node_7540 node_13649 node_7582 node_7650 node_13792 node_7614 node_13870 node_13879 node_13890 node_13383 node_13441 node_13457 node_16882 node_13505 node_13587 node_17021 node_13525 node_17026 node_12260 node_12347 node_12345 node_17277 node_12266 node_17315 node_12242 node_17249 node_11688 node_17127 node_12500 node_17458 node_17459 node_11811 node_17525 node_11837 node_17569 node_17574 node_6655 node_17401 node_17411 node_17427 node_7125 node_17448 node_17336 node_12696 node_7151 node_6507 node_11907 node_7155 node_6538 node_6546 node_18023 node_5656 node_5904 node_5910 node_18170 node_6311 node_12883 node_6315 node_5705 node_12035 node_12053 node_12060 node_6323 node_9071 node_9122 node_8759 node_19052 node_19180 node_7648 node_13703 node_19292 node_19420 node_12996 node_18391 node_12095 node_18606 node_12106 node_18612 node_13245 node_18745 node_13249 node_13499 node_16950 node_13227 node_7628 node_7664 node_13675 node_7588 node_13939 node_7548 node_13844 node_9053 node_8348 node_8358 node_11698 node_17165 node_13187 node_18444 node_18446 node_13084 node_13070 node_12114 node_18366 node_12126 node_18408 node_18412 node_13561 node_13550 node_5994 node_6305 node_5960 node_6297 node_5671 node_6267 node_5906 node_5646 node_6058 node_12918 node_6327 node_12898 node_12064 node_18201 node_6072 node_6355 node_13113 node_5723 node_12140 node_5717 node_12154 node_6353 node_13129 node_6062 node_6385 node_6371 node_6116 node_6369 node_13165 node_5731 node_12171 node_5725 node_7492 node_7532 node_7542 node_13667 node_7596 node_13736 node_7480 node_13915 node_7656 node_13822 node_7620 node_8382 node_8392 node_8188 node_8176 node_9167 node_9190 node_14091 node_8486 node_8526 node_6769 node_7169 node_12738 node_6735 node_12710 node_7157 node_6505 node_12784 node_6725 node_11893 node_6885 node_7222 node_6873 node_6527 node_6523 node_6515 node_11662 node_17147 node_17684 node_12250 node_17539 node_13473 node_13407 node_13399 node_16904 node_13599 node_17040 node_17044 node_13529 node_17059 node_12441 node_17615 node_17619 node_12658 node_17487 node_12650 node_12542 node_12528 node_6690 node_6905 node_12558 node_6684 node_12459 node_7085 node_6709 node_6930 node_6918 node_6700 node_6696 node_6916 node_12486 node_6909 node_9828 node_9902 node_10938

node_8895 node_9082 node_14074 node_7486 node_7524 node_7566 node_7598 node_13716 node_7602 node_13728 node_7654 node_13796 node_13874 node_7618 node_13892 node_13445 node_13509 node_13595 node_17029 node_12349 node_17136 node_17229 node_11814 node_12636 node_17579 node_6657 node_7109 node_17414 node_6673 node_17437 node_7131 node_7115 node_17340 node_17345 node_17366 node_12699 node_7153 node_12724 node_6729 node_7159 node_12748 node_6733 node_7163 node_6785 node_7171 node_12795 node_6820 node_6558 node_6857 node_6871 node_6877 node_6246 node_5916 node_5931 node_6000 node_12887 node_6319 node_12908 node_12056 node_6325 node_12932 node_6052 node_12953 node_12960 node_9234 node_9114 node_8434 node_8061 node_19186 node_7684 node_13701 node_7702 node_13782 node_19296 node_19422 node_19427 node_12097 node_13017 node_13036 node_18614 node_13253 node_18778 node_17094 node_13233 node_18727 node_18728 node_18868 node_13257 node_18807 node_8402 node_8350 node_8251 node_8286 node_11666 node_17168 node_13074 node_12122 node_18417 node_13553 node_5962 node_5939 node_6292 node_12843 node_5837 node_11961 node_6274 node_6249 node_6329 node_12922 node_5707 node_11998 node_12005 node_6034 node_12968 node_6317 node_6008 node_12041 node_6076 node_5719 node_12132 node_6070 node_13145 node_12156 node_6351 node_13133 node_5713 node_6373 node_6120 node_6108 node_6367 node_6100 node_6363 node_5727 node_7534 node_7522 node_13657 node_7660 node_13826 node_7612 node_8384 node_8196 node_9090 node_9100 node_8488 node_6737 node_6751 node_7161 node_12714 node_6509 node_11877 node_6497 node_12787 node_11915 node_6727 node_12758 node_7147 node_6887 node_7228 node_7193 node_6844 node_7188 node_12829 node_6796 node_6614 node_11951 node_6519 node_12504 node_17657 node_11783 node_17664 node_12424 node_17678 node_17680 node_13411 node_13537 node_13533 node_17049 node_12514 node_17623 node_12662 node_11828 node_12654 node_7036 node_7018 node_12532 node_6907 node_12455 node_6901 node_12561 node_12469 node_7014 node_12548 node_6686 node_7091 node_7081 node_6920 node_12582 node_6703 node_6698 node_6911

node_8899 node_9086 node_9159 node_7528 node_7570 node_7658 node_13808 node_11650 node_17129 node_11747 node_17206 node_12608 node_12616 node_12640 node_12666 node_6650 node_7111 node_7105 node_6678 node_6661 node_7117 node_6638 node_12369 node_17352 node_17371 node_17377 node_6731 node_12728 node_12752 node_7167 node_12771 node_6789 node_6804 node_7178 node_6824 node_6836 node_7182 node_6861 node_7191 node_6883 node_6259 node_6265 node_5935 node_5952 node_6290 node_6004 node_6010 node_6026 node_6042 node_12912 node_6054 node_12936 node_12955 node_8776 node_9059 node_9118 node_8436 node_14121 node_7720 node_13780 node_7518 node_13862 node_19431 node_13019 node_12177 node_18748 node_13429 node_16953 node_13578 node_13627 node_17097 node_13064 node_5790 node_18870 node_18875 node_18899 node_18812 node_8404 node_8253 node_13068 node_18460 node_18465 node_13090 node_13097 node_6261 node_5709 node_12025 node_12000 node_6036 node_6044 node_6321 node_12972 node_12942 node_6309 node_5697 node_5715 node_12148 node_6112 node_6104 node_6365 node_7652 node_13816 node_9170 node_9092 node_8903 node_8929 node_6753 node_6501 node_11857 node_11917 node_7149 node_12762 node_6487 node_7206 node_6828 node_7184 node_6798 node_6812 node_7176 node_11781 node_17670 node_13541 node_12518 node_12434 node_11831 node_7038 node_7020 node_7026 node_6903 node_12447 node_12471 node_7016 node_12552 node_6897 node_7083 node_7060

node_9163 node_11684 node_17132 node_11745 node_17210 node_12236 node_17218 node_17222 node_17231 node_12417 node_17463 node_12611 node_12670 node_6985 node_6652 node_7107 node_12395 node_7009 node_6671 node_6934 node_12288 node_6640 node_12274 node_12282 node_12362 node_6646 node_12385 node_17380 node_6743 node_6759 node_12775 node_6808 node_6840 node_7186 node_7202 node_7220 node_6272 node_5956 node_6295 node_5968 node_6299 node_6014 node_6030 node_8780 node_9067 node_9226 node_8140 node_8145 node_8288 node_8360 node_7640 node_13691 node_7636 node_7698 node_7560 node_13860 node_13964 node_13971 node_7514 node_18751 node_12175 node_18758 node_12185 node_18781 node_13491 node_16956 node_13433 node_16961 node_13580 node_13567 node_17101 node_13182 node_18644 node_18645 node_17181 node_5792 node_5788 node_18881 node_5801 node_18902 node_18906 node_18815 node_18821 node_18841 node_13093 node_5942 node_6046 node_6018 node_6313 node_12946 node_5701 node_12068 node_5689 node_9172 node_8905 node_6489 node_11897 node_6847 node_6830 node_6814 node_7180 node_12437 node_7028 node_6899 node_12463 node_7073 node_7044

node_12492 node_17466 node_6987 node_6993 node_6964 node_12320 node_7012 node_7003 node_6936 node_12292 node_7093 node_12277 node_12365 node_12308 node_6648 node_6642 node_12377 node_6747 node_6763 node_6775 node_7226 node_5972 node_5984 node_6303 node_12869 node_9230 node_8416 node_7644 node_7678 node_7683 node_7674 node_13695 node_7716 node_13770 node_7694 node_13967 node_7556 node_13850 node_7512 node_13960 node_13282 node_13278 node_18760 node_12181 node_18784 node_18789 node_13495 node_16966 node_13619 node_17104 node_17108 node_13270 node_18732 node_19786 node_6208 node_5805 node_5794 node_6232 node_18914 node_5773 node_12204 node_18825 node_18844 node_18849 node_5946 node_6020 node_5693 node_12045 node_6849 node_7063 node_7075 node_7046 node_7052

node_12336 node_17234 node_6995 node_6966 node_7005 node_7095 node_12373 node_6948 node_12312 node_12298 node_6644 node_7101 node_6779 node_5988 node_8294 node_8364 node_14115 node_7712 node_13774 node_7554 node_13854 node_7592 node_13953 node_13955 node_13305 node_18794 node_13571 node_13623 node_17113 node_13262 node_18735 node_5785 node_6212 node_6216 node_6221 node_6403 node_5799 node_6222 node_5775 node_12202 node_6166 node_12189 node_12196 node_5781 node_12220 node_18854 node_7065 node_7054

node_6972 node_6980 node_6950 node_6956 node_6938 node_6946 node_12302 node_7103 node_12389 node_7097 node_8298 node_8368 node_13286 node_13309 node_13295 node_13574 node_13056 node_18649 node_11676 node_13225 node_5883 node_12226 node_6405 node_6200 node_6401 node_6238 node_6419 node_6228 node_6389 node_13331 node_6162 node_12192 node_13315 node_13323 node_5783 node_12218 node_5777 node_12212

node_6974 node_6958 node_6940 node_7099 node_12381 node_8421 node_8429 node_13289 node_13299 node_13175 node_18652 node_11707 node_17186 node_6204 node_6192 node_6399 node_13363 node_6242 node_6421 node_6407 node_6387 node_13335 node_5779 node_12210 node_6184 node_6397 node_13351 node_6174

node_8425 node_11680 node_17188 node_18690 node_18699 node_6196 node_6417 node_6160 node_13319 node_6188 node_6178 node_6183 node_6395 node_13355 node_6393 node_13341 node_6170

node_11710 node_17191 node_18720 node_6391 node_13345

node_13223 node_18693 node_13260 node_18706 node_12173 node_18714

Primitive Primitive Object 1 Object 2

PrimitiveObject 0 (coherence queues)

Primitive Primitive Object 1 Object 2

PrimitiveObject 0 Automatically finds coherence paths The Scene Hierarchy Generator Unified Shading Cluster Array System Memory Interface Texture USC0 USC1 Unit Course Vertex Grain Data Master Scheduler

Texture USCn-1 USCn Unit

World-space Triangles and associated varyings

Scene Hierarchy Generator

System Memory Bus Limitations

• Scene is represented by triangles – same as today • BVH is in a defined format optimised for construction and traversal • Triangle order must generally follow a spatially coherent flow • An approximate scene scale estimation is needed • Geometry shaders are not inline with the ray tracing pipeline Strengths • Shading cluster workload is no higher than a vertex shader • Only needs to process geometry that actually moved in world space • Unique algorithm constrains working set to internal registers only • Single pass operation: in-line with vertex shader execution • Handles the “long skinny triangles” problem well • Streaming writes to external memory • Losslessly compressed output formats due to build algorithm • Compact logic Built on sparse log2 oct-tree scaffolding

LODLevel = = 1 1 LODLevel = = 2 2 LODLevel == 33 For each VBExtents triangle Foreach Select LOD VBNode in LOD

v2 Compute Parent Voxel

Per LOD v1 VBNode VBNode On VoxelCache v0 linked list HIT Pool head pointers

Add Output Scene VBNode Acceleration Leaf Tree Structure VoxelCache VoxelCache GenerateVBNode() On evictionOn On evictionOn

ProcessTriangle() AssembleParents() After some triangles...

LOD10 Leaf Head LeafCount=3 TreeCount=0 Tree Head

LOD14 Leaf Head LeafCount=0 TreeCount=0 Tree Head

LOD15 Leaf Head LeafCount=3 TreeCount=0 Tree Head

LOD16 Leaf Head LeafCount=8 TreeCount=0 Tree Head Assembling parents...

LOD10 Leaf Head LeafCount=3 TreeCount=0 Tree Head

LOD14 Leaf Head LeafCount=0 Tree Head VBNode TreeCount=0 Pool

LOD15 Leaf Head LeafCount=3 TreeCount=0 Tree Head Add VBNode to linked list of VBNodes for its LOD LOD16 Leaf Head LeafCount=8 TreeCount=0 Tree Head GenerateVBNode()

On eviction

Tree VoxelCache

Flush Leaf Nodes After parents for one level have been assembled...

LOD10 Leaf Head LeafCount=3 TreeCount=0 Tree Head

LOD14 Leaf Head LeafCount=0 TreeCount=0 Tree Head

LOD15 Leaf Head LeafCount=3 A B C TreeCount=0 Tree Head

LOD16 Leaf Head LeafCount=8 A0 A1 B0 C0 C1 B1 B2 C2 TreeCount=0 Tree Head Performance Expectations Host CPU Control and Register Bus System Interface Memory Interface

Vertex Unified Shading Cluster Array Data Master

Texture USC0 USC1 Pixel Unit Data Master Course Grain Scheduler ...128 Inst/ray Core Compute Management Data Master (512flops peak) Texture USCn-1 USCn Memory Ray Unit Cache Unit Data Master

1-2 clk/ray Ray Tracing Unit 6 clk/tri 1-2clk/accum

Intersection Scene Frame Coherency Engine Tiling Co- Pixel Co- 2D Core Processor Array Hierarchy Accumulator processor Processor (PTLA) 64 AABB/ray Generator Cache System Memory Bus 16 Tri/ray Get early access to the programming concepts at: http://tinyurl.com/9ddlsv2

Talk immediately after this on Hybrid rendering

See the demos at Imagination Booth #402 South Hall QA Thank you