HOLY SMOKE! FASTER PARTICLE RENDERING USING DIRECTCOMPUTE AMD AND MICROSOFT DEVELOPER DAY, JUNE 2014, STOCKHOLM GARETH THOMAS 2 ND JUNE 2014.

Slides:



Advertisements
Similar presentations
Point-based Graphics for Estimated Surfaces
Advertisements

Grass, Fur and all things hairy Nicolas ThibierozKarl Hillesland Gaming Engineering Manager, AMDSenior Research Engineer, AMD.
Technology Behind AMD’s “Leo Demo” Jay McKee MTS Engineer, AMD
Exploration of advanced lighting and shading techniques
Agenda Overview Collisions Sorting Tiled Rendering Conclusions
CS123 | INTRODUCTION TO COMPUTER GRAPHICS Andries van Dam © 1/16 Deferred Lighting Deferred Lighting – 11/18/2014.
COMPUTER GRAPHICS CS 482 – FALL 2014 NOVEMBER 10, 2014 GRAPHICS HARDWARE GRAPHICS PROCESSING UNITS PARALLELISM.
ATI Stream Computing OpenCL™ Histogram Optimization Illustration Marc Romankewicz April 5, 2010.
ATI Stream Computing ACML-GPU – SGEMM Optimization Illustration Micah Villmow May 30, 2008.
ATI Stream ™ Physics Neal Robison Director of ISV Relations, AMD Graphics Products Group Game Developers Conference March 26, 2009.
Understanding the graphics pipeline Lecture 2 Original Slides by: Suresh Venkatasubramanian Updates by Joseph Kider.
The Art and Technology Behind Bioshock’s Special Effects
3D Graphics Rendering and Terrain Modeling
Two Methods for Fast Ray-Cast Ambient Occlusion Samuli Laine and Tero Karras NVIDIA Research.
Fast GPU Histogram Analysis for Scene Post- Processing Andy Luedke Halo Development Team Microsoft Game Studios.
3D Graphics Processor Architecture Victor Moya. PhD Project Research on architecture improvements for future Graphic Processor Units (GPUs). Research.
IN4151 Introduction 3D graphics 1 Introduction to 3D computer graphics part 2 Viewing pipeline Multi-processor implementation GPU architecture GPU algorithms.
The Graphics Pipeline CS2150 Anthony Jones. Introduction What is this lecture about? – The graphics pipeline as a whole – With examples from the video.
02/04/03 Page 1 Rendering Visibility Lighting Texturing.
Panel Discussion: The Future of I/O From a CPU Architecture Perspective #OFADevWorkshop Brad Benton AMD, Inc.
GPU Graphics Processing Unit. Graphics Pipeline Scene Transformations Lighting & Shading ViewingTransformations Rasterization GPUs evolved as hardware.
University of Texas at Austin CS 378 – Game Technology Don Fussell CS 378: Computer Game Technology Beyond Meshes Spring 2012.
Advanced Computer Graphics Bas Zalmstra Marries van de Hoef Tim de Jager.
Filtering Approaches for Real-Time Anti-Aliasing /
OpenCL Introduction A TECHNICAL REVIEW LU OCT
Technology and Historical Overview. Introduction to 3d Computer Graphics  3D computer graphics is the science, study, and method of projecting a mathematical.
CSE 381 – Advanced Game Programming Basic 3D Graphics
OpenCL Introduction AN EXAMPLE FOR OPENCL LU OCT
1| AMD FirePro™ / Creo 2.0 Launch Event | April 2012 | Confidential – NDA Required AMD FIREPRO ™ / CREO 2.0 Sales Deck April 2012.
Week 2 - Friday.  What did we talk about last time?  Graphics rendering pipeline  Geometry Stage.
Emerging Technologies for Games Alpha Sorting and “Soft” Particles CO3303 Week 15.
CS 638, Fall 2001 Multi-Pass Rendering The pipeline takes one triangle at a time, so only local information, and pre-computed maps, are available Multi-Pass.
3D Graphics for Game Programming Chapter IV Fragment Processing and Output Merging.
1 Introduction to Computer Graphics with WebGL Ed Angel Professor Emeritus of Computer Science Founding Director, Arts, Research, Technology and Science.
Computer Graphics The Rendering Pipeline - Review CO2409 Computer Graphics Week 15.
2 COEN Computer Graphics I Evening’s Goals n Discuss application bottleneck determination n Discuss various optimizations for making programs execute.
09/16/03CS679 - Fall Copyright Univ. of Wisconsin Last Time Environment mapping Light mapping Project Goals for Stage 1.
Mark Nelson 3d projections Fall 2013
Stencil Routed A-Buffer
Emerging Technologies for Games Deferred Rendering CO3303 Week 22.
ATI Stream Computing ATI Radeon™ HD 2900 Series GPU Hardware Overview Micah Villmow May 30, 2008.
Joseph L. GreathousE, Mayank Daga AMD Research 11/20/2014
C O N F I D E N T I A LC O N F I D E N T I A L ATI FireGL ™ Workstation Graphics from AMD April 2008 AMD Graphics Product Group.
Visual Appearance Chapter 4 Tomas Akenine-Möller Department of Computer Engineering Chalmers University of Technology.
Maths & Technologies for Games Graphics Optimisation - Batching CO3303 Week 5.
STRUCTURAL AGNOSTIC SPMV: ADAPTING CSR-ADAPTIVE FOR IRREGULAR MATRICES MAYANK DAGA AND JOSEPH L. GREATHOUSE AMD RESEARCH ADVANCED MICRO DEVICES, INC.
What are shaders? In the field of computer graphics, a shader is a computer program that runs on the graphics processing unit(GPU) and is used to do shading.
FAULTSIM: A FAST, CONFIGURABLE MEMORY-RESILIENCE SIMULATOR DAVID A. ROBERTS, AMD RESEARCH PRASHANT J. NAIR, GEORGIA INSTITUTE OF TECHNOLOGY
Shadows David Luebke University of Virginia. Shadows An important visual cue, traditionally hard to do in real-time rendering Outline: –Notation –Planar.
SIMULATION OF EXASCALE NODES THROUGH RUNTIME HARDWARE MONITORING JOSEPH L. GREATHOUSE, ALEXANDER LYASHEVSKY, MITESH MESWANI, NUWAN JAYASENA, MICHAEL IGNATOWSKI.
SYNCHRONIZATION USING REMOTE-SCOPE PROMOTION MARC S. ORR †§, SHUAI CHE §, AYSE YILMAZER §, BRADFORD M. BECKMANN §, MARK D. HILL †§, DAVID A. WOOD †§ †
IMPLEMENTING A LEADING LOADS PERFORMANCE PREDICTOR ON COMMODITY PROCESSORS BO SU † JOSEPH L. GREATHOUSE ‡ JUNLI GU ‡ MICHAEL BOYER ‡ LI SHEN † ZHIYING.
Joseph L. GreathousE, Mayank Daga AMD Research 11/20/2014
COMPUTER GRAPHICS CHAPTER 38 CS 482 – Fall 2017 GRAPHICS HARDWARE
Real-Time Soft Shadows with Adaptive Light Source Sampling
Week 2 - Friday CS361.
Visual Appearance Chapter 4
Graphics Processing Unit
Deferred Lighting.
The Graphics Rendering Pipeline
The Small batch (and Other) solutions in Mantle API
SOC Runtime Gregory Stoner.
libflame optimizations with BLIS
Interference from GPU System Service Requests
Graphics Processing Unit
UMBC Graphics for Games
Interference from GPU System Service Requests
RegMutex: Inter-Warp GPU Register Time-Sharing
Advanced Micro Devices, Inc.
Jason Stewart (AMD) | Rolando Caloca O. (Epic Games) | 21 March 2018
Presentation transcript:

HOLY SMOKE! FASTER PARTICLE RENDERING USING DIRECTCOMPUTE AMD AND MICROSOFT DEVELOPER DAY, JUNE 2014, STOCKHOLM GARETH THOMAS 2 ND JUNE 2014

| FASTER PARTICLE RENDERING USING DIRECTCOMPUTE | AMD AND MICROSOFT GAME DEVELOPER DAY - JUNE , STOCKHOLM 2 PLAN FOR TODAY  Simulation Overview  Collisions  Sorting  Tiled Rendering  Conclusions

| FASTER PARTICLE RENDERING USING DIRECTCOMPUTE | AMD AND MICROSOFT GAME DEVELOPER DAY - JUNE , STOCKHOLM 3 OVERVIEW  Why use the gpu for simulation? ‒Highly parallel workload ‒Free your CPU to do other cool stuff ‒Leverage compute ‒Take advantage of the Local Data Store (LDS) ‒Asynchronous compute on some platforms MOTIVATION

| FASTER PARTICLE RENDERING USING DIRECTCOMPUTE | AMD AND MICROSOFT GAME DEVELOPER DAY - JUNE , STOCKHOLM 4 OVERVIEW  Emit  Simulate  Sort  Render ‒Rasterize billboards ‒Tiled Rendering using DirectCompute HOW TO BUILD A GPU PARTICLE SYSTEM

| FASTER PARTICLE RENDERING USING DIRECTCOMPUTE | AMD AND MICROSOFT GAME DEVELOPER DAY - JUNE , STOCKHOLM 5 SIMULATION OVERVIEW HOW THE SIMULATION FITS TOGETHER Simulate Compute Shader Update Particles. Add alive ones to Alive List, add dead ones to Dead List Dead List Persistent list of particle indices Alive List List of alive particle indices. Rebuilt each frame by Simulation CS Emit Compute Shader Reads free indices from dead list. Writes new particle data into global array Particle Array Persistent list of particle indices

| FASTER PARTICLE RENDERING USING DIRECTCOMPUTE | AMD AND MICROSOFT GAME DEVELOPER DAY - JUNE , STOCKHOLM 6 COLLISIONS  Can no longer use CPU-side physics engine for collisions  Use depth buffer [Tchou11] ‒Project particle into screen space and read depth buffer ‒Project particle into view space ‒Transform depth buffer value into view space and compare depths  Generate collision response ‒Use G-buffer normals ‒Or take multiple depth samples to reconstruct the normal A GPU-BASED SOLUTION view space P(n) P(n+1) thickness Z

| FASTER PARTICLE RENDERING USING DIRECTCOMPUTE | AMD AND MICROSOFT GAME DEVELOPER DAY - JUNE , STOCKHOLM 7 COLLISIONS  Only collides against geometry in the depth buffer  Particles would collide against depth buffer even if they are behind the geometry ‒Use a thickness value to assume particles are in free space behind geometry  Particles don’t collide when they are off screen ‒Causes issues when particles that are at rest on the floor have gone off-screen and have now disappeared ‒Put particles to sleep in the simulation once they have come to rest ‒Use G-buffer to mark parts of the scene that particles can sleep on (static objects)  Not Multi-GPU Friendly! ‒Switch off depth buffer collisions in MGPU mode PROBLEMS WITH USING THE DEPTH BUFFER Fallen through world! 

| FASTER PARTICLE RENDERING USING DIRECTCOMPUTE | AMD AND MICROSOFT GAME DEVELOPER DAY - JUNE , STOCKHOLM for( subArraySize=2; subArraySize<ArraySize; subArraySize*=2) { for( compareDist=subArraySize/2; compareDist>0; compareDist/=2) { // Begin: GPU part of the sort for each element n n = selectBitonic(n, n^compareDist); // End: GPU part of the sort } BITONIC SORT

| FASTER PARTICLE RENDERING USING DIRECTCOMPUTE | AMD AND MICROSOFT GAME DEVELOPER DAY - JUNE , STOCKHOLM for( subArraySize=2; subArraySize<ArraySize; subArraySize*=2)// subArraySize == 2 { for( compareDist=subArraySize/2; compareDist>0; compareDist/=2) // compareDist == 1 { // Begin: GPU part of the sort for each element n n = selectBitonic(n, n^compareDist); // End: GPU part of the sort } BITONIC SORT (PASS 1)

| FASTER PARTICLE RENDERING USING DIRECTCOMPUTE | AMD AND MICROSOFT GAME DEVELOPER DAY - JUNE , STOCKHOLM for( subArraySize=2; subArraySize<ArraySize; subArraySize*=2)// subArraySize == 4 { for( compareDist=subArraySize/2; compareDist>0; compareDist/=2) // compareDist == 2 { // Begin: GPU part of the sort for each element n n = selectBitonic(n, n^compareDist); // End: GPU part of the sort } BITONIC SORT (PASS 2)

| FASTER PARTICLE RENDERING USING DIRECTCOMPUTE | AMD AND MICROSOFT GAME DEVELOPER DAY - JUNE , STOCKHOLM for( subArraySize=2; subArraySize<ArraySize; subArraySize*=2)// subArraySize == 4 { for( compareDist=subArraySize/2; compareDist>0; compareDist/=2) // compareDist == 1 { // Begin: GPU part of the sort for each element n n = selectBitonic(n, n^compareDist); // End: GPU part of the sort } BITONIC SORT (PASS 3)

| FASTER PARTICLE RENDERING USING DIRECTCOMPUTE | AMD AND MICROSOFT GAME DEVELOPER DAY - JUNE , STOCKHOLM for( subArraySize=2; subArraySize<ArraySize; subArraySize*=2)// subArraySize == 8 { for( compareDist=subArraySize/2; compareDist>0; compareDist/=2) // compareDist == 4 { // Begin: GPU part of the sort for each element n n = selectBitonic(n, n^compareDist); // End: GPU part of the sort } BITONIC SORT (PASS 4)

| FASTER PARTICLE RENDERING USING DIRECTCOMPUTE | AMD AND MICROSOFT GAME DEVELOPER DAY - JUNE , STOCKHOLM for( subArraySize=2; subArraySize<ArraySize; subArraySize*=2)// subArraySize == 8 { for( compareDist=subArraySize/2; compareDist>0; compareDist/=2) // compareDist == 2 { // Begin: GPU part of the sort for each element n n = selectBitonic(n, n^compareDist); // End: GPU part of the sort } BITONIC SORT (PASS 5)

| FASTER PARTICLE RENDERING USING DIRECTCOMPUTE | AMD AND MICROSOFT GAME DEVELOPER DAY - JUNE , STOCKHOLM for( subArraySize=2; subArraySize<ArraySize; subArraySize*=2)// subArraySize == 8 { for( compareDist=subArraySize/2; compareDist>0; compareDist/=2) // compareDist == 1 { // Begin: GPU part of the sort for each element n n = selectBitonic(n, n^compareDist); // End: GPU part of the sort } BITONIC SORT (PASS 6)

| FASTER PARTICLE RENDERING USING DIRECTCOMPUTE | AMD AND MICROSOFT GAME DEVELOPER DAY - JUNE , STOCKHOLM 15 Sorted Alive List Vertex Shader Read Particle Buffer Geometry Shader Expand one point to four. Billboard in view space. Pixel Shader Texturing and tinting. Depth fade for soft particles. Particle Pool RENDERING

| FASTER PARTICLE RENDERING USING DIRECTCOMPUTE | AMD AND MICROSOFT GAME DEVELOPER DAY - JUNE , STOCKHOLM 16 Sorted Alive List Vertex Shader Read particle buffer and billboard in view space Pixel Shader Texturing and tinting. Depth fade for soft particles. Particle PoolIndex Buffer RENDERING

| FASTER PARTICLE RENDERING USING DIRECTCOMPUTE | AMD AND MICROSOFT GAME DEVELOPER DAY - JUNE , STOCKHOLM 17 RENDERING  The alive particle count is only available on the GPU ‒Use Indirect API  DrawInstancedIndirect( GPU-args ) for Geometry Shader billboards ‒D3DPT_POINTLIST with no VB, IB or IA ‒VertexId = Particle index ‒VertexCountPerInstance = NumParticles ‒InstanceCount = 1 ‒Geometry Shader expands the point into four vertices and a 2 triangle strip per billboard  Or better still……. DrawIndexedInstancedIndirect( GPU-args ) ‒D3DPT_TRIANGLELIST, use IB ‒VertexId / 4 = Particle index ‒VertexId % 4 = Billboard corner index ‒IndexCountPerInstance = NumParticles * 6 ‒InstanceCount = 1 RASTERIZATION – FOR OLD SCHOOL GPU PARTICLE SYSTEMS

| FASTER PARTICLE RENDERING USING DIRECTCOMPUTE | AMD AND MICROSOFT GAME DEVELOPER DAY - JUNE , STOCKHOLM 18 RENDERING  Overdraw from large particles kills game performance! ‒Get artists to throttle back on the VFX   Optimizations ‒Tightly fit polygons around texture [Persson09] ‒Render to smaller buffer [Cantlay07] ‒Sorting issues ‒Loss of fidelity PROBLEMS WITH RASTERIZATION 

| FASTER PARTICLE RENDERING USING DIRECTCOMPUTE | AMD AND MICROSOFT GAME DEVELOPER DAY - JUNE , STOCKHOLM 19 TILED RENDERING  Inspired by Forward+ [Harada12] ‒Screen-space binning of particles instead of point lights!  Use a 32x32 thread group to shade a 32x32 pixel tile in screen space ‒Cull particles (just like Forward+) ‒Sort particles ‒ Per pixel/thread ‒Evaluate colour of each particle ‒Blend together ‒Composite back onto scene OVERVIEW

| FASTER PARTICLE RENDERING USING DIRECTCOMPUTE | AMD AND MICROSOFT GAME DEVELOPER DAY - JUNE , STOCKHOLM 20 TILED RENDERING [1][1,2,3][2,3]  Divide screen into tiles  Build index lists of intersecting particles per tile

| FASTER PARTICLE RENDERING USING DIRECTCOMPUTE | AMD AND MICROSOFT GAME DEVELOPER DAY - JUNE , STOCKHOLM 21 TILED RENDERING  View space asymmetric frustum generated per tile  Use camera’s near plane  Use camera’s far plane  Or calculate far plane from depth buffer Tile0Tile1Tile2Tile3

| FASTER PARTICLE RENDERING USING DIRECTCOMPUTE | AMD AND MICROSOFT GAME DEVELOPER DAY - JUNE , STOCKHOLM 22 TILED RENDERING

| FASTER PARTICLE RENDERING USING DIRECTCOMPUTE | AMD AND MICROSOFT GAME DEVELOPER DAY - JUNE , STOCKHOLM 23 TILED RENDERING  numthreads[ 32,32,1]  Culling 1024 particles in parallel  Add to LDS index list  Write out to memory ‒Particle count ‒Particle indices THREAD GROUP VIEW

| FASTER PARTICLE RENDERING USING DIRECTCOMPUTE | AMD AND MICROSOFT GAME DEVELOPER DAY - JUNE , STOCKHOLM 24 TILED RENDERING TILE COMPLEXITY

| FASTER PARTICLE RENDERING USING DIRECTCOMPUTE | AMD AND MICROSOFT GAME DEVELOPER DAY - JUNE , STOCKHOLM 25 TILED RENDERING  Cannot sort global list of particles ‒Because 1024 particles get culled in parallel they get added to visible list in arbitrary order  Need to sort particles per-tile ‒This is a good thing! ‒Only need to sort a subset of the global list ‒Sorting particles in single pass in LDS vs main memory and in multiple passes PER TILE BITONIC SORT

| FASTER PARTICLE RENDERING USING DIRECTCOMPUTE | AMD AND MICROSOFT GAME DEVELOPER DAY - JUNE , STOCKHOLM 26 TILED RENDERING  numthreads[ 32, 32, 1 ] 1 thread = 1 pixel in screen space  Set accumulation colour to float4( 0, 0, 0, 0 )  For each particle in tile (back to front) ‒Evaluate particle contribution ‒UV generation & radius check ‒Texture lookup ‒Normal generation and lighting ‒Manually blend ‒Colour = ( srcA x srcCol ) + ( invSrcA x destCol ) ‒Alpha = srcA + ( invSrcA x destA ) ‒Write result to screen size UAV EVALUATING TILE COLOUR

| FASTER PARTICLE RENDERING USING DIRECTCOMPUTE | AMD AND MICROSOFT GAME DEVELOPER DAY - JUNE , STOCKHOLM 27 TILED RENDERING  numthreads[ 32, 32, 1 ] 1 thread = 1 pixel in screen space  Set accumulation colour to float4( 0, 0, 0, 0 )  For each particle in tile (front to back) ‒Evaluate particle contribution ‒UV generation & radius check ‒Texture lookup ‒Normal generation and lighting ‒Manually blend [Bavoil08] ‒Colour = ( invDestA x srcA x srcCol ) + destCol ‒Alpha = srcA + ( invSrcA x destA ) ‒if ( accumulation alpha > threshold ) accumulation alpha = 1 and bail ‒Write result to screen size UAV EVALUATING TILE COLOUR – IMPROVED!!!

| FASTER PARTICLE RENDERING USING DIRECTCOMPUTE | AMD AND MICROSOFT GAME DEVELOPER DAY - JUNE , STOCKHOLM 28 TILED RENDERING  Bin particles into 8x8 grid  For each particle ‒For each bin ‒Test particle against bin ‒Add particle if visible  UAV0 for particle indices (size = 8 x 8 x maxparticles) ‒Array split into 64 bins using offsets  UAV1 for storing particle count per bin (size = 8 x 8) ‒1 element per bin ‒Use InterlockedAdd() to bump bin’s counter COARSE CULLING

| FASTER PARTICLE RENDERING USING DIRECTCOMPUTE | AMD AND MICROSOFT GAME DEVELOPER DAY - JUNE , STOCKHOLM 29 TILED RENDERING COMPUTE SHADER SETUP Per-bin particle indicesPer-tile sorted particle indicesScreen space colour bufferPer-bin frustum planes Per-tile particle indices and distances Particle data (position, radius, colour etc) Compute Shaders LDS Shader Output Updated particle data Simulation numthreads[256, 1, 1], 1 thread per particle Coarse Culling numthreads[256, 1, 1], 1 thread per particle Tile Culling and Sorting numthreads[32, 32, 1], 1 thread per particle Tile Rendering numthreads[32, 32, 1], 1 thread per pixel

| FASTER PARTICLE RENDERING USING DIRECTCOMPUTE | AMD AND MICROSOFT GAME DEVELOPER DAY - JUNE , STOCKHOLM 30 modeframe time (ms)* Rasterization5.2 Tiled3.4 *AMD Radeon R9 1080p Breakdownframe time (ms)* Simulation0.50 Coarse Culling0.06 Tile Culling and Sorting0.37 Tiled Rendering1.86 PERFORMANCE RESULTS Default View, ~35K particles

| FASTER PARTICLE RENDERING USING DIRECTCOMPUTE | AMD AND MICROSOFT GAME DEVELOPER DAY - JUNE , STOCKHOLM 31 modeframe time (ms)* Rasterization27.3 Tiled6.2 *AMD Radeon R9 1080p PERFORMANCE RESULTS In Smoke View, ~35K particles

| FASTER PARTICLE RENDERING USING DIRECTCOMPUTE | AMD AND MICROSOFT GAME DEVELOPER DAY - JUNE , STOCKHOLM 32 CONCLUSIONS  Depth buffer collisions ‒Great bang-for-buck ‒Not perfect!  Bitonic sort ‒Good fit for sorting on the GPU  Tiled Rendering ‒Faster than rasterization ‒Great for combatting heavy overdraw ‒More predictable behaviour  Future work ‒Add arbitrary geometry for OIT ‒Volume tracing

| FASTER PARTICLE RENDERING USING DIRECTCOMPUTE | AMD AND MICROSOFT GAME DEVELOPER DAY - JUNE , STOCKHOLM 33 QUESTIONS?  Demo with full source coming soon 

| FASTER PARTICLE RENDERING USING DIRECTCOMPUTE | AMD AND MICROSOFT GAME DEVELOPER DAY - JUNE , STOCKHOLM 34 REFERENCES  [Tchou11] Chris Tchou, “Halo Reach Effects Tech”, GDC 2011  [Persson09] Emil Persson,  [Cantlay07] Iain Cantlay, “High-Speed, Off-Screen Particles”, GPU Gems  [Harada12] Takahiro Harada et al, “Forward+: Bringing Deferred Lighting to the Next Level”, Short Papers, Eurographics 2012  [Bavoil08] Louis Bavoil et al, “Order Independent Transparency with Dual Depth Peeling”, 2008

| FASTER PARTICLE RENDERING USING DIRECTCOMPUTE | AMD AND MICROSOFT GAME DEVELOPER DAY - JUNE , STOCKHOLM 35 DISCLAIMER & ATTRIBUTION The information presented in this document is for informational purposes only and may contain technical inaccuracies, omissions and typographical errors. The information contained herein is subject to change and may be rendered inaccurate for many reasons, including but not limited to product and roadmap changes, component and motherboard version changes, new model and/or product releases, product differences between differing manufacturers, software changes, BIOS flashes, firmware upgrades, or the like. AMD assumes no obligation to update or otherwise correct or revise this information. However, AMD reserves the right to revise this information and to make changes from time to time to the content hereof without obligation of AMD to notify any person of such revisions or changes. AMD MAKES NO REPRESENTATIONS OR WARRANTIES WITH RESPECT TO THE CONTENTS HEREOF AND ASSUMES NO RESPONSIBILITY FOR ANY INACCURACIES, ERRORS OR OMISSIONS THAT MAY APPEAR IN THIS INFORMATION. AMD SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE. IN NO EVENT WILL AMD BE LIABLE TO ANY PERSON FOR ANY DIRECT, INDIRECT, SPECIAL OR OTHER CONSEQUENTIAL DAMAGES ARISING FROM THE USE OF ANY INFORMATION CONTAINED HEREIN, EVEN IF AMD IS EXPRESSLY ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. ATTRIBUTION © 2013 Advanced Micro Devices, Inc. All rights reserved. AMD, the AMD Arrow logo and combinations thereof are trademarks of Advanced Micro Devices, Inc. in the United States and/or other jurisdictions. Other names are for informational purposes only and may be trademarks of their respective owners.