SlideShare a Scribd company logo
1 of 79
GPU-Accelerated 2D and
   Web Rendering
      Mark Kilgard
Talk Details
Location: West Hall Meeting Room 503, Los Angeles Convention Center
Date: Wednesday, August 8, 2012
Time: 2:40 PM – 3:40 PM

Mark Kilgard (Principal Software Engineer, NVIDIA)

Abstract: The future of GPU-based visual computing integrates the web, resolution-independent 2D
graphics, and 3D to maximize interactivity and quality while minimizing consumed power. See what NVIDIA is
doing today to accelerate resolution-independent 2D graphics for web content. This presentation explains
NVIDIA's unique "stencil, then cover" approach to accelerating path rendering with OpenGL and
demonstrates the wide variety of web content that can be accelerated with this approach.

Topic Areas: GPU Accelerated Internet; Digital Content Creation & Film; Visualization

Level: Intermediate

Watch video replay: http://nvidia.fullviewmedia.com/siggraph2012/ondemand/SS106.html
Mark Kilgard

 Principal System Software Engineer
    OpenGL driver and API evolution
    Cg (“C for graphics”) shading language
    GPU-accelerated path rendering
 OpenGL Utility Toolkit (GLUT) implementer
 Author of OpenGL for the X Window System
 Co-author of Cg Tutorial
GPUs are good at a lot of stuff
Games




Battlefield 3, EA
Data visualization
Product design




    Catia
Physics simulation




  CUDA N-Body
Interactive ray tracing




        OptiX
Training
Molecular modeling




      NCSA
Impressive stuff
What about advancing 2D graphics?
Can GPUs render & improve the immersive web?
What is path rendering?
    A rendering approach
        Resolution-independent two-dimensional
        graphics
        Occlusion & transparency depend on rendering
        order
             So called “Painter’s Algorithm”
        Basic primitive is a path to be filled or stroked
             Path is a sequence of path commands
             Commands are
                – moveto, lineto, curveto, arcto, closepath,
                  etc.
    Standards
        Content: PostScript, PDF, TrueType fonts,
        Flash, Scalable Vector Graphics (SVG), HTML5
        Canvas, Silverlight, Office drawings
        APIs: Apple Quartz 2D, Khronos OpenVG,
        Microsoft Direct2D, Cairo, Skia, Qt::QPainter,
        Anti-grain Graphics
Seminal Path Rendering Paper
     John Warnock & Douglas Wyatt, Xerox PARC
         Presented SIGGRAPH 1982
         Warnock founded Adobe months later




                                                John Warnock
                                                 Adobe founder
Path Rendering Standards
Document       Resolution-     Immersive         2D Graphics      Office
Printing and   Independent     Web               Programming      Productivity
Exchange       Fonts           Experience        Interfaces       Applications

                                                     Java 2D
                                                     API
               OpenType          Flash
                                                       QtGui
                                                       API

               TrueType
                                   Scalable          Mac OS X
                                   Vector            2D API     Adobe Illustrator
                                   Graphics


Open XML
Paper (XPS)                                                        Inkscape
                             HTML 5           Khronos API        Open Source
Live Demo
  Classic PostScript content




                                Complex text rendering




                                                  Yesterday’s New York Times rendered from
                    Flash content                       its resolution-independent form
Last Year’s SIGGRAPH Results in Real-time

Ron Maharik, Mikhail Bessmeltsev,
Alla Sheffer, Ariel Shamir and
Nathan Carr
SIGGRAPH 2011, July 2011

“Girl with Words in Her Hair” scene
    591 paths
    338,507 commands
    1,244,474 coordinates
3D Rendering vs. Path Rendering
Characteristic                  GPU 3D rendering                        Path rendering

Dimensionality                  Projective 3D                           2D, typically affine

Pixel mapping                   Resolution independent                  Resolution independent

Occlusion                       Depth buffering                         Painter’s algorithm

Rendering primitives            Points, lines, triangles                Paths

Primitive constituents          Vertices                                Control points

Constituents per primitive      1, 2, or 3 respectively                 Unbounded

Topology of filled primitives   Always convex                           Can be concave, self-intersecting, and have holes



Degree of primitives            1st order (linear)                      Up to 3rd order (cubic)

Rendering modes                 Filled, wire-frame                      Filling, stroking

Line properties                 Width, stipple pattern                  Width, dash pattern, capping, join style

Color processing                Programmable shading                    Painting + filter effects

Text rendering                  No direct support (2nd class support)   Omni-present (1st class support)



Raster operations               Blending                                Brushes, blend modes, compositing

Color model                     RGB or sRGB                             RGB, sRGB, CYMK, or grayscale

Clipping operations             Clip planes, scissoring, stenciling     Clipping to an arbitrary clip path

Coverage determination          Per-color sample                        Sub-color sample
CPU vs. GPU Limited at
Rendering Tasks over Time
100%                                                                                      100%

 90%                                                                                      90%

 80%                                                                                      80%

 70%                                                                                      70%

 60%                                                                                      60%

 50%                                                                                GPU   50%                                                                                 GPU
                                                                                    CPU                                                                                       CPU
 40%                                                                                      40%

 30%                                                                                      30%

 20%                                                                                      20%

 10%                                                                                      10%

 0%                                                                                        0%
       1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012                1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012




       Pipelined 3D Interactive Rendering                                                                              Path Rendering

Goal of NV_path_rendering is to make path rendering a GPU-limited task

Render all interactive pixels, whether 3D or 2D or web content with the GPU
What is NV_path_rendering?
 OpenGL extension to GPU-accelerate path rendering
 Uses “stencil, then cover” (StC) approach
      Create a path object
      Step 1: “Stencil” the path object into the stencil buffer
          GPU provides fast stenciling of filled or stroked paths
      Step 2: “Cover” the path object and stencil test against its coverage stenciled by the
      prior step
          Application can configure arbitrary shading during the step
      More details later
 Supports the union of functionality of all major path rendering standards
      Includes all stroking embellishments
      Includes first-class text and font support
      Allows functionality to mix with traditional 3D and programmable shading
Configuration
GPU: GeForce 480 GTX (GF100)
CPU: Core i7 950 @ 3.07 GHz      NV_path_rendering
                               Compared to Alternatives




                                                     Alternative approaches
                                                     are all much slower
Configuration
GPU: GeForce 480 GTX (GF100)
CPU: Core i7 950 @ 3.07 GHz    Detail on Alternatives




                                                        Fast, but unacceptable
                                                                quality
Across an range of scenes…
Release 300 GeForce GTX 480 Speedups over Alternatives




Y axis is logarithmic—shows how many TIMES faster NV_path_rendering is that competitor
GeForce 650 (Kepler) Results
Tiger Scene on GeForce 650
  Absolute Frames/Second on GeForce 650
                    500.0


                    450.0
                               NVpr “peaks” at
                               1,800 FPS at 100x100
                    400.0
                                                           NV_path_rendering (16x)
                                                           Cairo
                    350.0
                                                           Qt
Frames per second




                                                           Skia Bitmap
                    300.0
                                                           Skia Ganesh FBO
                                                           Skia Ganesh 1x (aliased)
                    250.0
                                                           Direct2D GPU
                                                           Direct2D WARP
                    200.0

                                                                                       poor quality
                    150.0


                    100.0


                     50.0


                      0.0
                            100x100   200x200   300x300   400x400    500x500     600x600   700x700   800x800   900x900   1000x1000   1100x1100


                                                                           Window resolution
NV_path_rendering is more than just
matching CPU vector graphics
3D and vector graphics mix
                             Superior quality


                                                       CPU
                             GPU                       Competitors




                             Arbitrary programmable shader on paths—
2D in perspective is free
                             bump mapping
Partial Solutions Not Enough

  Path rendering has 30 years of heritage and history
  Can’t do a 90% solution and Software to change
      Trying to “mix” CPU and GPU methods doesn’t work
      Expensive to move software—needs to be an unambiguous win
  Must surpass CPU approaches on all fronts
      Performance
      Quality
      Functionality
      Conformance to standards
      More power efficient
      Enable new applications
Path Filling and Stroking




   just filling                       just stroking



                            filling + stroke =
                               intended content
Dashing Content Examples



                                                  Artist made windows
                                                    with dashed line
                                Same cake
                                                         segment
                              missing dashed
                              stroking details
                                                                                Technical diagrams
                                                                              and charts often employ
Frosting on cake is dashed
                                                                                     dashing
elliptical arcs with round
end caps for “beaded” look;
flowers are also dashing


    All content shown
    is fully GPU rendered              Dashing character outlines for quilted look
Excellent Geometric Fidelity for Stroking

 Correct stroking is hard
     Lots of CPU implementations
     approximate stroking            GPU-accelerated          OpenVG reference
 GPU-accelerated stroking avoids
 such short-cuts                                                              
     GPU has FLOPS to compute true
     stroke point containment
                                     Cairo                  Qt
                                                                              


                                         Stroking with tight end-point curve
The Approach                               Step 1      Step 2:
                                           Stencil      Cover
                                   repeat
 “Stencil, then Cover” (StC)
 Map the path rendering task from a sequential
 algorithm…
 …to a pipelined and massively parallel task
 Break path rendering into two steps
    First, “stencil” the path’s coverage into stencil buffer
    Second, conservatively “cover” path
       Test against path coverage determined in the 1st step
       Shade the path
       And reset the stencil value to render next path
Pixel pipeline                           Vertex pipeline          Path pipeline

                         Application
                                                                Path specification


Pixel assembly                           Vertex assembly          Transform path
    (unpack)
                                        Vertex operations
                   transform
                    feedback
                                       Primitive assembly

Pixel operations                       Primitive operations   Fill/Stroke
                                                               Covering


  Pixel pack                              Rasterization
  read             Texture
                                       Fragment operations
  back             memory
                                                                    Fill/Stroke
  Application                           Raster operations           Stenciling

                                          Framebuffer         Display
Key Operations for Rendering
Path Objects
Stencil operation
  only updates stencil buffer
  glStencilFillPathNV, glStencilStrokePathNV
Cover operation
  glCoverFillPathNV, glCoverStrokePathNV
  renders hull polygons guaranteed to “cover” region updated by
  corresponding stencil
Two-step rendering paradigm
  stencil, then cover (StC)
Application controls cover stenciling and shading operations
  Gives application considerable control
No vertex, tessellation, or geometry shaders active during
steps
  Why? Paths have control points & rasterized regions, not vertices,
  triangles
Path Rendering Example (1 of 3)
 Let’s draw a green concave 5-point star




                 even-odd fill style         non-zero fill style


 Path specification by string of a star
 GLuint pathObj = 42;
 const char *pathString ="M100,180 L40,10 L190,120 L10,120 L160,10 z";
 glPathStringNV(pathObj,GL_PATH_FORMAT_SVG_NV,
                strlen(pathString),pathString);

 Alternative: path specification by data
 static const GLubyte pathCommands[5] = {
   GL_MOVE_TO_NV, GL_LINE_TO_NV, GL_LINE_TO_NV, GL_LINE_TO_NV, GL_LINE_TO_NV,
 GL_CLOSE_PATH_NV };
 static const GLshort pathVertices[5][2] =
   { {100,180}, {40,10}, {190,120}, {10,120}, {160,10} };
 glPathCommandsNV(pathObj, 6, pathCommands, GL_SHORT, 10, pathVertices);
Path Rendering Example (2 of 3)

 Initialization
    Clear the stencil buffer to zero and the color buffer to black
    glClearStencil(0);
    glClearColor(0,0,0,0);
    glStencilMask(~0);
    glClear(GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
    Specify the Path's Transform
    glMatrixIdentityEXT(GL_PROJECTION);
    glMatrixOrthoEXT(GL_MODELVIEW, 0,200, 0,200, -1,1); // uses
    DSA!

 Nothing really specific to path rendering here


         DSA = OpenGL’s Direct State Access extension (EXT_direct_state_access)
Path Rendering Example (3 of 3)

  Render star with non-zero fill style
    Stencil path
    glStencilFillPathNV(pathObj, GL_COUNT_UP_NV, 0x1F);
                                                           non-zero fill style
    Cover path
    glEnable(GL_STENCIL_TEST);
    glStencilFunc(GL_NOTEQUAL, 0, 0x1F);
    glStencilOp(GL_KEEP, GL_KEEP, GL_ZERO);
    glColor3f(0,1,0); // green
    glCoverFillPathNV(pathObj, GL_BOUNDING_BOX_NV);

  Alternative: for even-odd fill style                     even-odd fill style

    Just program glStencilFunc differently
    glStencilFunc(GL_NOTEQUAL, 0, 0x1);   // alternative mask
“Stencil, then Cover”                                    stencil fill
                                                   path command
                                                                             path
                                                                          front-end
Path Fill Stenciling                                                                        path
                                                                          projective       object
 Specify a path                                       per-path            transform
                                                     fill region
 Specify arbitrary path transformation
                                                    operations
     Projective (4x4) allowed                                            clipping &
     Depth values can be generated for                                   scissoring       sample
     depth testing                                                                        accessibility
 Sample accessibility determined                                        window, depth
     Accessibility can be limited by any                                & stencil tests
     or all of
         Scissor test, depth test, stencil test,
         view frustum, user-defined clip                                path winding
         planes, sample mask, stipple                                     number
         pattern, and window ownership             per-sample
                                                                        computation
 Winding number w.r.t. the                         operations
 transformed path is computed
     Added to stencil value of accessible                                   stencil
     samples                                          Fill                                 stencil
                                                                           update:
                                                   stenciling                              buffer
                                                                        +, -, or invert
                                                    specific
“Stencil, then Cover”                              cover fill
                                             path command
                                                                     path
                                                                  front-end
Path Fill Covering                                                                 path
                                                                  projective      object
 Specify a path                                  per-path         transform
 Specify arbitrary path                         fill region
 transformation                                operations
                                                                 clipping &
     Projective (4x4) allowed                                    scissoring
     Depth values can be generated for                                            sample
     depth testing                                                                accessibility
                                                                window, depth
 Sample accessibility determined               per-sample
                                                                & stencil tests
     Accessibility can be limited by any       operations
     or all of
         Scissor test, depth test, stencil                          stencil
         test, view frustum, user-defined    per-fragment or       update
         clip planes, sample mask, stipple       per-sample
         pattern, and window ownership                          typically zero
                                                    shading
 Conservative covering geometry
 uses stencil to “cover” filled path                            programmable
     Determined by prior stencil step             color                           stencil
                                                                     path
                                                  buffer           shading        buffer
Adding Stroking to the Star

 After the filling, add a stroked “rim”
 to the star like this…

 Set some stroking parameters (one-time):
    glPathParameterfNV(pathObj, GL_STROKE_WIDTH_NV, 10.5);
    glPathParameteriNV(pathObj, GL_JOIN_STYLE_NV, GL_ROUND_NV);        non-zero fill style
 Stroke the star
   Stencil path
    glStencilStrokePathNV(pathObj, 0x3, 0xF); // stroked samples marked
   “3”
   Cover path
   glEnable(GL_STENCIL_TEST);
   glStencilFunc(GL_EQUAL, 3, 0xF); // update if sample marked “3”
   glStencilOp(GL_KEEP, GL_KEEP, GL_ZERO);
   glColor3f(1,1,0); // yellow
   glCoverStrokePathNV(pathObj, GL_BOUNDING_BOX_NV);
                                                                     even-odd fill style
stencil stroke
“Stencil, then Cover”                          path command           path
                                                                   front-end
Path Stroke Stenciling                                                                path
                                                                   projective        object
   Specify a path                                per-path          transform
   Specify arbitrary path transformation        fill region
        Projective (4x4) allowed               operations         clipping &
        Depth values can be generated for
        depth testing                                             scissoring
                                                                                   sample
   Sample accessibility determined                                                 accessibility
        Accessibility can be limited by any                      window, depth
        or all of                                                & stencil tests
           Scissor test, depth test, stencil
           test, view frustum, user-defined
           clip planes, sample mask, stipple
           pattern, and window ownership                            stroke
                                               per-sample            point
   Point containment w.r.t. the stroked
   path is determined                          operations        containment
        Replace stencil value of contained
        samples
                                                  Stroke             stencil
                                                                                     stencil
                                                stenciling          update:
                                                                                     buffer
                                                 specific           replace
cover stroke
“Stencil, then Cover”                          path command          path
                                                                  front-end
Path Stroke Covering                                                                path
                                                                  projective       object
  Specify a path                                 per-path         transform
  Specify arbitrary path                        fill region
  transformation                               operations
                                                                 clipping &
       Projective (4x4) allowed                                  scissoring       sample
       Depth values can be generated for
       depth testing                                                              accessibility
  Sample accessibility determined              per-sample       window, depth
       Accessibility can be limited by any                      & stencil tests
                                               operations
       or all of
             Scissor test, depth test,
             stencil test, view frustum,                            stencil
             user-defined clip planes,       per-fragment or       update
             sample mask, stipple pattern,       per-sample     typically zero
             and window ownership                   shading
  Conservative covering geometry
  uses stencil to “cover” stroked path                          programmable
       Determined by prior stencil step           color                            stencil
                                                                     path
                                                  buffer           shading         buffer
First-class, Resolution-independent
   Font Support
Fonts are a standard, first-class part of all path rendering systems
    Foreign to 3D graphics systems such as OpenGL and Direct3D, but natural for
    path rendering
    Because letter forms in fonts have outlines defined with paths
        TrueType, PostScript, and OpenType fonts all use outlines to specify glyphs
NV_path_rendering makes font support easy
    Can specify a range of path objects with
        A specified font
        Sequence or range of Unicode character points
No requirement for applications use font API to load glyphs
    You can also load glyphs “manually” from your own glyph outlines
    Functionality provides OS portability and meets needs of applications
    with mundane font requirements
Handling Common Path Rendering
Functionality: Filtering
 GPUs are highly efficient at image filtering
    Fast texture mapping                         Qt
       Mipmapping
       Anisotropic filtering
       Wrap modes
                                                   Moiré
 CPUs aren't really                                artifacts



          GPU
                                                 Cairo
Handling Uncommon Path Rendering
Functionality: Projection
 Projection “just works”
    Because GPU does everything
    with perspective-correct
    interpolation
Projective Path Rendering Support Compared

 GPU           Skia           Cairo        Qt
flawless       yes, but bugs   unsupported   unsupported




     correct      correct      unsupported   unsupported
     correct      wrong        unsupported   unsupported
Path Geometric Queries
    glIsPointInFillPathNV
       determine if object-space (x,y) position is inside or outside path, given
       a winding number mask
    glIsPointInStrokePathNV
       determine if object-space (x,y) position is inside the stroke of a path
       accounts for dash pattern, joins, and caps
    glGetPathLengthNV
       returns approximation of geometric length of a given sub-range of path
       segments
    glPointAlongPathNV
       returns the object-space (x,y) position and 2D tangent vector a given
       offset into a specified path object
       Useful for “text follows a path”
    Queries are modeled after OpenVG queries
Accessible Samples of a Transformed Path
 When stenciled or covered, a path is transformed by OpenGL’s
 current modelview-projection matrix
    Allows for arbitrary 4x4 projective transform
    Means (x,y,0,1) object-space coordinate can be transformed to have depth
 Fill or stroke stenciling affects “accessible” samples
 A samples is not accessible if any of these apply to the sample
    clipped by user-defined or view frustum clip planes
    discarded by the polygon stipple, if enabled
    discarded by the pixel ownership test
    discarded by the scissor test, if enabled
    discarded by the depth test, if enabled
        displaced by the polygon offset from glPathStencilDepthOffsetNV
    discarded by the depth test, if enabled
    discarded by the (implicitly enabled) stencil test
        specified by glPathStencilFuncNV
        where the read mask is the bitwise AND of the glPathStencilFuncNV read
        mask and the bit-inversion of the effective mask parameter of the stenciling
        operation
Mixing Depth Buffering and
  Path Rendering
PostScript tigers surrounding Utah teapot
    Plus overlaid TrueType font rendering
    No textures involved, no multi-pass
Demo
3D Path Rendering Details
     Stencil step uses
     GLfloat slope = -0.05;
     GLint bias = -1;
     glPathStencilDepthOffsetNV(slope, bias);
     glDepthFunc(GL_LESS);
     glEnable(GL_DEPTH_TEST);
     Stenciling step uses
     glPathCoverDepthFuncNV(GL_ALWAYS);

     Observation
          Stencil step is testing—but not writing—depth
              Stencil won’t be updated if stencil step fails depth test at a sample
          Cover step is writing—but not testing—depth
              Cover step doesn’t need depth test because stencil test would only pass if prior stencil
              step’s depth test passed
          Tricky, but neat because minimal mode changes involved
Without glPathStencilDepthOffset
   Bad Things Happen
Each tiger is layered 240 paths
     Without the depth offset during the stencil step, all the—essentially co-planar—layers would
     Z-fight as shown below




                                        terrible z-fighting artifacts
Path Transformation Process
    Path      object-space coordinates

   object               (x,y,0,1)

                                         Modelview         eye-space coordinates
            color/fog/tex
             coordinates
                                          matrix         (xe,ye,ze,we) + attributes

                                                          color/fog/tex coords.            User-defined
               Object-space                                                                 clip planes
               color/fog/tex                          Eye-space
                generation                           color/fog/tex
                                                      generation
                                                                               clipped eye-space coordinates
                                                                                   (xe,ye,ze,we) + attributes



                                                                                       clipped clip-space
     Projection         clip-space coordinates        View-frustum                         coordinates
                                                                                                                to path
       matrix          (xc,yc,zc,wc) + attributes      clip planes                (xc,yc,zc,wc) + attributes    stenciling
                                                                                                                or covering
Clip Planes Work with Path Rendering
     Scene showing a Welsh dragon clipped to all 64 combinations of 6 clip planes
     enabled & disabled
Path Rendering Works with
Scissoring and Stippling too

 Scene showing a tiger
 scissoring into 9 regions
 Tiger with two different
 polygon stipple patterns
Rendering Paths Clipped to
  Some Other Arbitrary Path
Example clipping the PostScript tiger to a heart constructed from
two cubic Bezier curves




          unclipped tiger       tiger with pink background clipped to heart
Complex Clipping Example




    tiger is 240 paths
                                          cowboy clip is
                                          the union of 1,366 paths




                           result of clipping tiger
                           to the union of all the cowboy paths
Arbitrary Programmable GPU Shading with
Path Rendering
 During the “cover” step, you can do arbitrary fragment processing
      Could be
          Fixed-function fragment processing
          OpenGL assembly programs
          Cg shaders compiled to assembly with Cg runtime
          OpenGL Shading Language (GLSL) shaders
          Your pick—they all work!
 Remember:
      Your vertex, geometry, & tessellation shaders ignored during cover step
          (Even your fragment shader is ignored during the “stencil” step)
Example of Bump Mapping on
Path Rendered Text
  Phrase “Brick wall!” is path rendered and bump mapped with a Cg
  fragment shader



                                     light source position
Anti-aliasing Discussion
     Good anti-aliasing is a big deal for path rendering
          Particularly true for font rendering of small point sizes
          Features of glyphs are often on the scale of a pixel or less
     NV_path_rendering uses multiple stencil samples per pixel for reasonable
     antialiasing
          Otherwise, image quality is poor
          4 samples/pixel bare minimum
          8 or 16 samples/pixel is pretty sufficient
               But 16 requires expensive 2x2 supersampling of 4x multisampling
               16x is extremely memory intensive
     Alternative: quality vs. performance tradeoff
          Fast enough to render multiple passes to improve quality
          Approaches
               Accumulation buffer
               Alpha accumulation
Anti-aliasing Strategy Benefits
 Benefits from GPU’s existing
 hardware AA strategies
                                                   GPU
    Multiple color-stencil-depth                   rendered
    samples per pixel                              coverage NOT
       4, 8, or 16 samples per pixel               conflated with
    Rotated grid sub-positions                     opacity
    Fast downsampling by GPU
    Avoids conflating coverage &
    opacity
                                                   Cairo, Qt, Skia,
       Maintains distinct color sample             and Direct2D
       per sample location                         rendered
    Centroid sampling                              shows dark
 Fast enough for temporal                          cracks artifacts
                                                   due to conflating
 schemes                               artifacts   coverage with
    >>60 fps means multi-pass                      opacity, notice
    improves quality                               background
                                                   bleeding
Real
                                  Flash
                                 Scene
                                same scene, GPU-rendered
                                        without conflation




    conflation
    artifacts abound,
    rendered by Skia
conflation is aliasing &
edge coverage percents
are un-predicable in general;
means conflated pixels
flicker when animated slowly
GPU Advantages
    Fast, quality filtering
         Mipmapping of gradient color ramps essentially free
         Includes anisotropic filtering (up to 16x)
         Filtering is post-conversion from sRGB
    Full access to programmable shading
         No fixed palette of solid color / gradient / pattern brushes
         Bump mapping, shadow mapping, etc.—it’s all available to you
    Blending
         Supports native blending in sRGB color space
               Both colors converted to linear RGB
               Then result is converted stored as sRGB
    Freely mix 3D and path rendering in same framebuffer
         Path rendering buffer can be depth tested against 3D
         So can 3D rendering be stenciled against path rendering
    Obviously performance is MUCH better than CPUs
Improved Color Space:
   sRGB Path Rendering                            Radial color gradient example
Modern GPUs have native support for
                                                 moving from saturated red to blue
perceptually-correct for
     sRGB framebuffer blending
     sRGB texture filtering
     No reason to tolerate uncorrected linear
     RGB color artifacts!
     More intuitive for artists to control                           linear RGB
Negligible expense for GPU to perform                               transition between saturated
                                                                    red and saturated blue has
sRGB-correct rendering                                              dark purple region
     However quite expensive for software path
     renderers to perform sRGB rendering
          Not done in practice




                                                                       sRGB
                                                                      perceptually smooth
                                                                      transition from saturated
                                                                      red to saturated blue
Trying Out NV_path_rendering

     Operating system support
          2000, XP, Vista, Windows 7, Linux, FreeBSD, and Solaris
          Unfortunately no Mac support
     GPU support
          GeForce 8 and up (Tesla and beyond)
          Most efficient on Fermi and Kepler GPUs
          Current performance can be expected to improve
     Shipping since NVIDIA’s Release 275 drivers
          Available since summer 2011
     New Release 300 drivers have remarkable NV_path_rendering performance
          Try it, you’ll like it
Learning NV_path_rendering

 White paper + source code available
      “Getting Started with NV_path_rendering”
 Explains
      Path specification
      “Stencil, then Cover” API usage
      Instanced rendering for text and glyphs
NV_path_rendering SDK Examples

 A set of NV_path_rendering examples of varying levels of complexity
     Most involved example is an accelerated SVG viewer
         Not a complete SVG implementation


 Compiles on Windows and Linux
     Standard makefiles for Linux
     Use Visual Studio 2008 for Windows
Whitepapers

 “Getting Started with NV_path_rendering”
Whitepapers

 “Mixing 3D and Path Rendering”
SDK Example Walkthrough (1)
    pr_basic—simplest example          pr_hello_world—kerned, underlined,
    of path filling & stroking         stroked, and linear gradient filled text




   pr_welsh_dragon—filled layers   pr_gradient—path with holes with texture applied
SDK Example Walkthrough (2)




 pr_font_file—loading glyphs from a font file   pr_korean—rendering UTF-8 string of Korea
 with the GL_FONT_FILE_NV target                characters




                                                        pr_shaders—use Cg shaders
                                                        to bump map text with
                                                        brick-wall texture
SDK Example Walkthrough (3)




   pr_text_wheel—render projected gradient   pr_tiger—classic PostScript tiger rendered
   text as spokes of a wheel                 as filled & stroked path layers



                                              pr_warp_tiger—warp the tiger
                                              with a free projective transform

                                              click & drag the bounding rectangle
                                              corners to change the projection
SDK Example Walkthrough (4)




  pr_tiger3d—multiple projected and depth tested     pr_svg—GPU-accelerated SVG viewer
  tigers + 3D teapot + overlaid text



                                                   pr_pick—test points to determine if they
                                                   are in the filled and/or stroked region of a
                                                   complex path
Conclusions

 GPU-acceleration of 2D resolution-independent graphics is coming
     HTML 5 and low-power requirements
     are demanding it
 “Stencil, then Cover” approach
     Very fast
     Quality, functionality, and features
     Available today through NV_path_rendering
 Shipping today
     NV_path_rendering resources available
Questions?
More Information

 Best current driver: use OpenGL 4.3 beta driver
    http://www.nvidia.com/content/devzone/opengl-driver-4.3.html
    Or try www.nvidia.com/drivers
       Grab the latest Beta drivers for your OS & GPU
    Latest drivers greatly improve instanced stencil step
    performance!
 Developer resources
    http://developer.nvidia.com/nv-path-rendering
    Whitepapers, FAQ, specification
    NVprSDK—software development kit
    NVprDEMOs—pre-compiled Windows demos
    OpenGL Extension Wrangler (GLEW) has API support
 Email: nvpr-support@nvidia.com
Don’t Forget the 20th Anniversary Party




    Date: August 8th 2012 ( today! )
    Location: JW Marriott Los Angeles at LA Live
    Venue: Gold Ballroom – Salon 1
Other OpenGL-related
    NVIDIA Sessions at SIGGRAPH
GPU Ray Tracing and OptiX
    Wednesday in West Hall 503, 3:50 PM - 4:50 PM
    David McAllister, OptiX Manager, NVIDIA
    Phillip Miller, Director, Workstation Software Product Management, NVIDIA
Voxel Cone Tracing & Sparse Voxel Octree for Real-time Global Illumination
    Wednesday in NVIDIA Booth, 3:50 PM - 4:50 PM
    Cyril Crassin, Postdoctoral Research Scientist, NVIDIA Research
OpenSubdiv: High Performance GPU Subdivision Surface Drawing
    Thursday in NVIDIA Booth, 10:00 AM - 10:30 AM
    Pixar Animation Studios GPU Team, Pixar
nvFX : A New Scene & Material Effect Framework for OpenGL and DirectX
    Thursday in NVIDIA Booth, 2:00 PM - 2:30 PM
    Tristan Lorach, Developer Relations Senior Engineer, NVIDIA

More Related Content

What's hot

NV_path_rendering Frequently Asked Questions
NV_path_rendering Frequently Asked QuestionsNV_path_rendering Frequently Asked Questions
NV_path_rendering Frequently Asked QuestionsMark Kilgard
 
Programming with NV_path_rendering: An Annex to the SIGGRAPH Asia 2012 paper...
Programming with NV_path_rendering:  An Annex to the SIGGRAPH Asia 2012 paper...Programming with NV_path_rendering:  An Annex to the SIGGRAPH Asia 2012 paper...
Programming with NV_path_rendering: An Annex to the SIGGRAPH Asia 2012 paper...Mark Kilgard
 
GTC 2012: NVIDIA OpenGL in 2012
GTC 2012: NVIDIA OpenGL in 2012GTC 2012: NVIDIA OpenGL in 2012
GTC 2012: NVIDIA OpenGL in 2012Mark Kilgard
 
NVIDIA OpenGL in 2016
NVIDIA OpenGL in 2016NVIDIA OpenGL in 2016
NVIDIA OpenGL in 2016Mark Kilgard
 
Mixing Path Rendering and 3D
Mixing Path Rendering and 3DMixing Path Rendering and 3D
Mixing Path Rendering and 3DMark Kilgard
 
Accelerating Vector Graphics Rendering using the Graphics Hardware Pipeline
Accelerating Vector Graphics Rendering using the Graphics Hardware PipelineAccelerating Vector Graphics Rendering using the Graphics Hardware Pipeline
Accelerating Vector Graphics Rendering using the Graphics Hardware PipelineMark Kilgard
 
NVIDIA's OpenGL Functionality
NVIDIA's OpenGL FunctionalityNVIDIA's OpenGL Functionality
NVIDIA's OpenGL FunctionalityMark Kilgard
 
OpenGL 3.2 and More
OpenGL 3.2 and MoreOpenGL 3.2 and More
OpenGL 3.2 and MoreMark Kilgard
 
Virtual Reality Features of NVIDIA GPUs
Virtual Reality Features of NVIDIA GPUsVirtual Reality Features of NVIDIA GPUs
Virtual Reality Features of NVIDIA GPUsMark Kilgard
 
OpenGL Shading Language
OpenGL Shading LanguageOpenGL Shading Language
OpenGL Shading LanguageJungsoo Nam
 
CS 354 GPU Architecture
CS 354 GPU ArchitectureCS 354 GPU Architecture
CS 354 GPU ArchitectureMark Kilgard
 
Avoiding 19 Common OpenGL Pitfalls
Avoiding 19 Common OpenGL PitfallsAvoiding 19 Common OpenGL Pitfalls
Avoiding 19 Common OpenGL PitfallsMark Kilgard
 
CS 354 Introduction
CS 354 IntroductionCS 354 Introduction
CS 354 IntroductionMark Kilgard
 
CS 354 Vector Graphics & Path Rendering
CS 354 Vector Graphics & Path RenderingCS 354 Vector Graphics & Path Rendering
CS 354 Vector Graphics & Path RenderingMark Kilgard
 
CS 354 Viewing Stuff
CS 354 Viewing StuffCS 354 Viewing Stuff
CS 354 Viewing StuffMark Kilgard
 
An Introduction to NV_path_rendering
An Introduction to NV_path_renderingAn Introduction to NV_path_rendering
An Introduction to NV_path_renderingMark Kilgard
 
Modern OpenGL Usage: Using Vertex Buffer Objects Well
Modern OpenGL Usage: Using Vertex Buffer Objects Well Modern OpenGL Usage: Using Vertex Buffer Objects Well
Modern OpenGL Usage: Using Vertex Buffer Objects Well Mark Kilgard
 

What's hot (20)

NV_path_rendering Frequently Asked Questions
NV_path_rendering Frequently Asked QuestionsNV_path_rendering Frequently Asked Questions
NV_path_rendering Frequently Asked Questions
 
Programming with NV_path_rendering: An Annex to the SIGGRAPH Asia 2012 paper...
Programming with NV_path_rendering:  An Annex to the SIGGRAPH Asia 2012 paper...Programming with NV_path_rendering:  An Annex to the SIGGRAPH Asia 2012 paper...
Programming with NV_path_rendering: An Annex to the SIGGRAPH Asia 2012 paper...
 
GTC 2012: NVIDIA OpenGL in 2012
GTC 2012: NVIDIA OpenGL in 2012GTC 2012: NVIDIA OpenGL in 2012
GTC 2012: NVIDIA OpenGL in 2012
 
NVIDIA OpenGL in 2016
NVIDIA OpenGL in 2016NVIDIA OpenGL in 2016
NVIDIA OpenGL in 2016
 
Mixing Path Rendering and 3D
Mixing Path Rendering and 3DMixing Path Rendering and 3D
Mixing Path Rendering and 3D
 
Accelerating Vector Graphics Rendering using the Graphics Hardware Pipeline
Accelerating Vector Graphics Rendering using the Graphics Hardware PipelineAccelerating Vector Graphics Rendering using the Graphics Hardware Pipeline
Accelerating Vector Graphics Rendering using the Graphics Hardware Pipeline
 
NVIDIA's OpenGL Functionality
NVIDIA's OpenGL FunctionalityNVIDIA's OpenGL Functionality
NVIDIA's OpenGL Functionality
 
OpenGL 3.2 and More
OpenGL 3.2 and MoreOpenGL 3.2 and More
OpenGL 3.2 and More
 
OpenGL for 2015
OpenGL for 2015OpenGL for 2015
OpenGL for 2015
 
Virtual Reality Features of NVIDIA GPUs
Virtual Reality Features of NVIDIA GPUsVirtual Reality Features of NVIDIA GPUs
Virtual Reality Features of NVIDIA GPUs
 
Realizing OpenGL
Realizing OpenGLRealizing OpenGL
Realizing OpenGL
 
OpenGL Shading Language
OpenGL Shading LanguageOpenGL Shading Language
OpenGL Shading Language
 
CS 354 GPU Architecture
CS 354 GPU ArchitectureCS 354 GPU Architecture
CS 354 GPU Architecture
 
Avoiding 19 Common OpenGL Pitfalls
Avoiding 19 Common OpenGL PitfallsAvoiding 19 Common OpenGL Pitfalls
Avoiding 19 Common OpenGL Pitfalls
 
CS 354 Introduction
CS 354 IntroductionCS 354 Introduction
CS 354 Introduction
 
OpenGL 4 for 2010
OpenGL 4 for 2010OpenGL 4 for 2010
OpenGL 4 for 2010
 
CS 354 Vector Graphics & Path Rendering
CS 354 Vector Graphics & Path RenderingCS 354 Vector Graphics & Path Rendering
CS 354 Vector Graphics & Path Rendering
 
CS 354 Viewing Stuff
CS 354 Viewing StuffCS 354 Viewing Stuff
CS 354 Viewing Stuff
 
An Introduction to NV_path_rendering
An Introduction to NV_path_renderingAn Introduction to NV_path_rendering
An Introduction to NV_path_rendering
 
Modern OpenGL Usage: Using Vertex Buffer Objects Well
Modern OpenGL Usage: Using Vertex Buffer Objects Well Modern OpenGL Usage: Using Vertex Buffer Objects Well
Modern OpenGL Usage: Using Vertex Buffer Objects Well
 

Viewers also liked

Deep learning on spark
Deep learning on sparkDeep learning on spark
Deep learning on sparkSatyendra Rana
 
Accelerating Machine Learning Applications on Spark Using GPUs
Accelerating Machine Learning Applications on Spark Using GPUsAccelerating Machine Learning Applications on Spark Using GPUs
Accelerating Machine Learning Applications on Spark Using GPUsIBM
 
GPUs in Big Data - StampedeCon 2014
GPUs in Big Data - StampedeCon 2014GPUs in Big Data - StampedeCon 2014
GPUs in Big Data - StampedeCon 2014StampedeCon
 
PG-Strom - GPU Accelerated Asyncr
PG-Strom - GPU Accelerated AsyncrPG-Strom - GPU Accelerated Asyncr
PG-Strom - GPU Accelerated AsyncrKohei KaiGai
 
Computational Techniques for the Statistical Analysis of Big Data in R
Computational Techniques for the Statistical Analysis of Big Data in RComputational Techniques for the Statistical Analysis of Big Data in R
Computational Techniques for the Statistical Analysis of Big Data in Rherbps10
 
Enabling Graph Analytics at Scale: The Opportunity for GPU-Acceleration of D...
Enabling Graph Analytics at Scale:  The Opportunity for GPU-Acceleration of D...Enabling Graph Analytics at Scale:  The Opportunity for GPU-Acceleration of D...
Enabling Graph Analytics at Scale: The Opportunity for GPU-Acceleration of D...odsc
 
Heterogeneous System Architecture Overview
Heterogeneous System Architecture OverviewHeterogeneous System Architecture Overview
Heterogeneous System Architecture Overviewinside-BigData.com
 
PG-Strom - GPGPU meets PostgreSQL, PGcon2015
PG-Strom - GPGPU meets PostgreSQL, PGcon2015PG-Strom - GPGPU meets PostgreSQL, PGcon2015
PG-Strom - GPGPU meets PostgreSQL, PGcon2015Kohei KaiGai
 
PyData Amsterdam - Name Matching at Scale
PyData Amsterdam - Name Matching at ScalePyData Amsterdam - Name Matching at Scale
PyData Amsterdam - Name Matching at ScaleGoDataDriven
 
From Machine Learning to Learning Machines: Creating an End-to-End Cognitive ...
From Machine Learning to Learning Machines: Creating an End-to-End Cognitive ...From Machine Learning to Learning Machines: Creating an End-to-End Cognitive ...
From Machine Learning to Learning Machines: Creating an End-to-End Cognitive ...Spark Summit
 
DeepLearning4J and Spark: Successes and Challenges - François Garillot
DeepLearning4J and Spark: Successes and Challenges - François GarillotDeepLearning4J and Spark: Successes and Challenges - François Garillot
DeepLearning4J and Spark: Successes and Challenges - François Garillotsparktc
 
Containerizing GPU Applications with Docker for Scaling to the Cloud
Containerizing GPU Applications with Docker for Scaling to the CloudContainerizing GPU Applications with Docker for Scaling to the Cloud
Containerizing GPU Applications with Docker for Scaling to the CloudSubbu Rama
 
How to Solve Real-Time Data Problems
How to Solve Real-Time Data ProblemsHow to Solve Real-Time Data Problems
How to Solve Real-Time Data ProblemsIBM Power Systems
 
Tallinn Estonia Advanced Java Meetup Spark + TensorFlow = TensorFrames Oct 24...
Tallinn Estonia Advanced Java Meetup Spark + TensorFlow = TensorFrames Oct 24...Tallinn Estonia Advanced Java Meetup Spark + TensorFlow = TensorFrames Oct 24...
Tallinn Estonia Advanced Java Meetup Spark + TensorFlow = TensorFrames Oct 24...Chris Fregly
 
The Potential of GPU-driven High Performance Data Analytics in Spark
The Potential of GPU-driven High Performance Data Analytics in SparkThe Potential of GPU-driven High Performance Data Analytics in Spark
The Potential of GPU-driven High Performance Data Analytics in SparkSpark Summit
 
Spark Summit EU talk by Tim Hunter
Spark Summit EU talk by Tim HunterSpark Summit EU talk by Tim Hunter
Spark Summit EU talk by Tim HunterSpark Summit
 
GPU Support in Spark and GPU/CPU Mixed Resource Scheduling at Production Scale
GPU Support in Spark and GPU/CPU Mixed Resource Scheduling at Production ScaleGPU Support in Spark and GPU/CPU Mixed Resource Scheduling at Production Scale
GPU Support in Spark and GPU/CPU Mixed Resource Scheduling at Production Scalesparktc
 

Viewers also liked (20)

Deep learning on spark
Deep learning on sparkDeep learning on spark
Deep learning on spark
 
Accelerating Machine Learning Applications on Spark Using GPUs
Accelerating Machine Learning Applications on Spark Using GPUsAccelerating Machine Learning Applications on Spark Using GPUs
Accelerating Machine Learning Applications on Spark Using GPUs
 
GPUs in Big Data - StampedeCon 2014
GPUs in Big Data - StampedeCon 2014GPUs in Big Data - StampedeCon 2014
GPUs in Big Data - StampedeCon 2014
 
PG-Strom - GPU Accelerated Asyncr
PG-Strom - GPU Accelerated AsyncrPG-Strom - GPU Accelerated Asyncr
PG-Strom - GPU Accelerated Asyncr
 
Computational Techniques for the Statistical Analysis of Big Data in R
Computational Techniques for the Statistical Analysis of Big Data in RComputational Techniques for the Statistical Analysis of Big Data in R
Computational Techniques for the Statistical Analysis of Big Data in R
 
GPU Ecosystem
GPU EcosystemGPU Ecosystem
GPU Ecosystem
 
Enabling Graph Analytics at Scale: The Opportunity for GPU-Acceleration of D...
Enabling Graph Analytics at Scale:  The Opportunity for GPU-Acceleration of D...Enabling Graph Analytics at Scale:  The Opportunity for GPU-Acceleration of D...
Enabling Graph Analytics at Scale: The Opportunity for GPU-Acceleration of D...
 
Heterogeneous System Architecture Overview
Heterogeneous System Architecture OverviewHeterogeneous System Architecture Overview
Heterogeneous System Architecture Overview
 
PG-Strom - GPGPU meets PostgreSQL, PGcon2015
PG-Strom - GPGPU meets PostgreSQL, PGcon2015PG-Strom - GPGPU meets PostgreSQL, PGcon2015
PG-Strom - GPGPU meets PostgreSQL, PGcon2015
 
PyData Amsterdam - Name Matching at Scale
PyData Amsterdam - Name Matching at ScalePyData Amsterdam - Name Matching at Scale
PyData Amsterdam - Name Matching at Scale
 
Hadoop + GPU
Hadoop + GPUHadoop + GPU
Hadoop + GPU
 
Deep Learning on Hadoop
Deep Learning on HadoopDeep Learning on Hadoop
Deep Learning on Hadoop
 
From Machine Learning to Learning Machines: Creating an End-to-End Cognitive ...
From Machine Learning to Learning Machines: Creating an End-to-End Cognitive ...From Machine Learning to Learning Machines: Creating an End-to-End Cognitive ...
From Machine Learning to Learning Machines: Creating an End-to-End Cognitive ...
 
DeepLearning4J and Spark: Successes and Challenges - François Garillot
DeepLearning4J and Spark: Successes and Challenges - François GarillotDeepLearning4J and Spark: Successes and Challenges - François Garillot
DeepLearning4J and Spark: Successes and Challenges - François Garillot
 
Containerizing GPU Applications with Docker for Scaling to the Cloud
Containerizing GPU Applications with Docker for Scaling to the CloudContainerizing GPU Applications with Docker for Scaling to the Cloud
Containerizing GPU Applications with Docker for Scaling to the Cloud
 
How to Solve Real-Time Data Problems
How to Solve Real-Time Data ProblemsHow to Solve Real-Time Data Problems
How to Solve Real-Time Data Problems
 
Tallinn Estonia Advanced Java Meetup Spark + TensorFlow = TensorFrames Oct 24...
Tallinn Estonia Advanced Java Meetup Spark + TensorFlow = TensorFrames Oct 24...Tallinn Estonia Advanced Java Meetup Spark + TensorFlow = TensorFrames Oct 24...
Tallinn Estonia Advanced Java Meetup Spark + TensorFlow = TensorFrames Oct 24...
 
The Potential of GPU-driven High Performance Data Analytics in Spark
The Potential of GPU-driven High Performance Data Analytics in SparkThe Potential of GPU-driven High Performance Data Analytics in Spark
The Potential of GPU-driven High Performance Data Analytics in Spark
 
Spark Summit EU talk by Tim Hunter
Spark Summit EU talk by Tim HunterSpark Summit EU talk by Tim Hunter
Spark Summit EU talk by Tim Hunter
 
GPU Support in Spark and GPU/CPU Mixed Resource Scheduling at Production Scale
GPU Support in Spark and GPU/CPU Mixed Resource Scheduling at Production ScaleGPU Support in Spark and GPU/CPU Mixed Resource Scheduling at Production Scale
GPU Support in Spark and GPU/CPU Mixed Resource Scheduling at Production Scale
 

Similar to SIGGRAPH 2012: GPU-Accelerated 2D and Web Rendering

Understanding hardware acceleration on mobile browsers presentation
Understanding hardware acceleration on mobile browsers presentationUnderstanding hardware acceleration on mobile browsers presentation
Understanding hardware acceleration on mobile browsers presentationJustin Dorfman
 
Understanding Hardware Acceleration on Mobile Browsers
Understanding Hardware Acceleration on Mobile BrowsersUnderstanding Hardware Acceleration on Mobile Browsers
Understanding Hardware Acceleration on Mobile BrowsersAriya Hidayat
 
Computer Graphics Notes
Computer Graphics NotesComputer Graphics Notes
Computer Graphics NotesGurpreet singh
 
Rich User Interaction with SVG
Rich User Interaction with SVGRich User Interaction with SVG
Rich User Interaction with SVGstsire
 
Modern OpenGL scientific visualization
Modern OpenGL scientific visualizationModern OpenGL scientific visualization
Modern OpenGL scientific visualizationNicolas Rougier
 
Open source print quality software
Open source print quality softwareOpen source print quality software
Open source print quality softwareChristophe Mercier
 
Redefining Mobile Graphics Stack
Redefining Mobile Graphics StackRedefining Mobile Graphics Stack
Redefining Mobile Graphics Stackofilabs
 
Understanding Hardware Acceleration on Mobile Browsers
Understanding Hardware Acceleration on Mobile BrowsersUnderstanding Hardware Acceleration on Mobile Browsers
Understanding Hardware Acceleration on Mobile BrowsersAriya Hidayat
 
2011/11/20 modul8 workshop at Apple Store Ginza
2011/11/20 modul8 workshop at Apple Store Ginza2011/11/20 modul8 workshop at Apple Store Ginza
2011/11/20 modul8 workshop at Apple Store Ginzaopticious
 
Revolutionising Textile Decoration & Finishing With Digital Inkjet Technology
Revolutionising Textile Decoration & Finishing With Digital Inkjet TechnologyRevolutionising Textile Decoration & Finishing With Digital Inkjet Technology
Revolutionising Textile Decoration & Finishing With Digital Inkjet TechnologyXennia Technology
 
아이폰강의(7) pdf
아이폰강의(7) pdf아이폰강의(7) pdf
아이폰강의(7) pdfsunwooindia
 
Remote Graphical Rendering
Remote Graphical RenderingRemote Graphical Rendering
Remote Graphical RenderingJoel Isaacson
 
Canvas & Canvas - Presentation to NYC.js
Canvas & Canvas - Presentation to NYC.js Canvas & Canvas - Presentation to NYC.js
Canvas & Canvas - Presentation to NYC.js Henry Poydar
 
OW2con'14 - XLcoud, 3D rendering in the cloud, Marius Preda, Institut Mines T...
OW2con'14 - XLcoud, 3D rendering in the cloud, Marius Preda, Institut Mines T...OW2con'14 - XLcoud, 3D rendering in the cloud, Marius Preda, Institut Mines T...
OW2con'14 - XLcoud, 3D rendering in the cloud, Marius Preda, Institut Mines T...xlcloud
 
CAPTCHA and Convolutional neural network
CAPTCHA and Convolutional neural network CAPTCHA and Convolutional neural network
CAPTCHA and Convolutional neural network Bushra Jbawi
 
Parallel and Distributed Computing on Low Latency Clusters
Parallel and Distributed Computing on Low Latency ClustersParallel and Distributed Computing on Low Latency Clusters
Parallel and Distributed Computing on Low Latency ClustersVittorio Giovara
 
Digital image processing / Procesiranje digitalnih slik / 2. 9. 2009
Digital image processing / Procesiranje digitalnih slik / 2. 9. 2009Digital image processing / Procesiranje digitalnih slik / 2. 9. 2009
Digital image processing / Procesiranje digitalnih slik / 2. 9. 2009National and University Library
 
Day 1 presentation terminology
Day 1 presentation   terminologyDay 1 presentation   terminology
Day 1 presentation terminologykelv_w
 

Similar to SIGGRAPH 2012: GPU-Accelerated 2D and Web Rendering (20)

Hardware Accelerated 2D Rendering for Android
Hardware Accelerated 2D Rendering for AndroidHardware Accelerated 2D Rendering for Android
Hardware Accelerated 2D Rendering for Android
 
NV_path_rendering
NV_path_renderingNV_path_rendering
NV_path_rendering
 
Understanding hardware acceleration on mobile browsers presentation
Understanding hardware acceleration on mobile browsers presentationUnderstanding hardware acceleration on mobile browsers presentation
Understanding hardware acceleration on mobile browsers presentation
 
Understanding Hardware Acceleration on Mobile Browsers
Understanding Hardware Acceleration on Mobile BrowsersUnderstanding Hardware Acceleration on Mobile Browsers
Understanding Hardware Acceleration on Mobile Browsers
 
Computer Graphics Notes
Computer Graphics NotesComputer Graphics Notes
Computer Graphics Notes
 
Rich User Interaction with SVG
Rich User Interaction with SVGRich User Interaction with SVG
Rich User Interaction with SVG
 
Modern OpenGL scientific visualization
Modern OpenGL scientific visualizationModern OpenGL scientific visualization
Modern OpenGL scientific visualization
 
Open source print quality software
Open source print quality softwareOpen source print quality software
Open source print quality software
 
Redefining Mobile Graphics Stack
Redefining Mobile Graphics StackRedefining Mobile Graphics Stack
Redefining Mobile Graphics Stack
 
Understanding Hardware Acceleration on Mobile Browsers
Understanding Hardware Acceleration on Mobile BrowsersUnderstanding Hardware Acceleration on Mobile Browsers
Understanding Hardware Acceleration on Mobile Browsers
 
2011/11/20 modul8 workshop at Apple Store Ginza
2011/11/20 modul8 workshop at Apple Store Ginza2011/11/20 modul8 workshop at Apple Store Ginza
2011/11/20 modul8 workshop at Apple Store Ginza
 
Revolutionising Textile Decoration & Finishing With Digital Inkjet Technology
Revolutionising Textile Decoration & Finishing With Digital Inkjet TechnologyRevolutionising Textile Decoration & Finishing With Digital Inkjet Technology
Revolutionising Textile Decoration & Finishing With Digital Inkjet Technology
 
아이폰강의(7) pdf
아이폰강의(7) pdf아이폰강의(7) pdf
아이폰강의(7) pdf
 
Remote Graphical Rendering
Remote Graphical RenderingRemote Graphical Rendering
Remote Graphical Rendering
 
Canvas & Canvas - Presentation to NYC.js
Canvas & Canvas - Presentation to NYC.js Canvas & Canvas - Presentation to NYC.js
Canvas & Canvas - Presentation to NYC.js
 
OW2con'14 - XLcoud, 3D rendering in the cloud, Marius Preda, Institut Mines T...
OW2con'14 - XLcoud, 3D rendering in the cloud, Marius Preda, Institut Mines T...OW2con'14 - XLcoud, 3D rendering in the cloud, Marius Preda, Institut Mines T...
OW2con'14 - XLcoud, 3D rendering in the cloud, Marius Preda, Institut Mines T...
 
CAPTCHA and Convolutional neural network
CAPTCHA and Convolutional neural network CAPTCHA and Convolutional neural network
CAPTCHA and Convolutional neural network
 
Parallel and Distributed Computing on Low Latency Clusters
Parallel and Distributed Computing on Low Latency ClustersParallel and Distributed Computing on Low Latency Clusters
Parallel and Distributed Computing on Low Latency Clusters
 
Digital image processing / Procesiranje digitalnih slik / 2. 9. 2009
Digital image processing / Procesiranje digitalnih slik / 2. 9. 2009Digital image processing / Procesiranje digitalnih slik / 2. 9. 2009
Digital image processing / Procesiranje digitalnih slik / 2. 9. 2009
 
Day 1 presentation terminology
Day 1 presentation   terminologyDay 1 presentation   terminology
Day 1 presentation terminology
 

More from Mark Kilgard

D11: a high-performance, protocol-optional, transport-optional, window system...
D11: a high-performance, protocol-optional, transport-optional, window system...D11: a high-performance, protocol-optional, transport-optional, window system...
D11: a high-performance, protocol-optional, transport-optional, window system...Mark Kilgard
 
Computers, Graphics, Engineering, Math, and Video Games for High School Students
Computers, Graphics, Engineering, Math, and Video Games for High School StudentsComputers, Graphics, Engineering, Math, and Video Games for High School Students
Computers, Graphics, Engineering, Math, and Video Games for High School StudentsMark Kilgard
 
NVIDIA OpenGL and Vulkan Support for 2017
NVIDIA OpenGL and Vulkan Support for 2017NVIDIA OpenGL and Vulkan Support for 2017
NVIDIA OpenGL and Vulkan Support for 2017Mark Kilgard
 
NVIDIA OpenGL 4.6 in 2017
NVIDIA OpenGL 4.6 in 2017NVIDIA OpenGL 4.6 in 2017
NVIDIA OpenGL 4.6 in 2017Mark Kilgard
 
EXT_window_rectangles
EXT_window_rectanglesEXT_window_rectangles
EXT_window_rectanglesMark Kilgard
 
NV_path rendering Functional Improvements
NV_path rendering Functional ImprovementsNV_path rendering Functional Improvements
NV_path rendering Functional ImprovementsMark Kilgard
 
OpenGL 4.5 Update for NVIDIA GPUs
OpenGL 4.5 Update for NVIDIA GPUsOpenGL 4.5 Update for NVIDIA GPUs
OpenGL 4.5 Update for NVIDIA GPUsMark Kilgard
 
CS 354 Final Exam Review
CS 354 Final Exam ReviewCS 354 Final Exam Review
CS 354 Final Exam ReviewMark Kilgard
 
CS 354 Surfaces, Programmable Tessellation, and NPR Graphics
CS 354 Surfaces, Programmable Tessellation, and NPR GraphicsCS 354 Surfaces, Programmable Tessellation, and NPR Graphics
CS 354 Surfaces, Programmable Tessellation, and NPR GraphicsMark Kilgard
 
CS 354 Performance Analysis
CS 354 Performance AnalysisCS 354 Performance Analysis
CS 354 Performance AnalysisMark Kilgard
 
CS 354 Acceleration Structures
CS 354 Acceleration StructuresCS 354 Acceleration Structures
CS 354 Acceleration StructuresMark Kilgard
 
CS 354 Global Illumination
CS 354 Global IlluminationCS 354 Global Illumination
CS 354 Global IlluminationMark Kilgard
 
CS 354 Ray Casting & Tracing
CS 354 Ray Casting & TracingCS 354 Ray Casting & Tracing
CS 354 Ray Casting & TracingMark Kilgard
 
CS 354 Bezier Curves
CS 354 Bezier Curves CS 354 Bezier Curves
CS 354 Bezier Curves Mark Kilgard
 

More from Mark Kilgard (15)

D11: a high-performance, protocol-optional, transport-optional, window system...
D11: a high-performance, protocol-optional, transport-optional, window system...D11: a high-performance, protocol-optional, transport-optional, window system...
D11: a high-performance, protocol-optional, transport-optional, window system...
 
Computers, Graphics, Engineering, Math, and Video Games for High School Students
Computers, Graphics, Engineering, Math, and Video Games for High School StudentsComputers, Graphics, Engineering, Math, and Video Games for High School Students
Computers, Graphics, Engineering, Math, and Video Games for High School Students
 
NVIDIA OpenGL and Vulkan Support for 2017
NVIDIA OpenGL and Vulkan Support for 2017NVIDIA OpenGL and Vulkan Support for 2017
NVIDIA OpenGL and Vulkan Support for 2017
 
NVIDIA OpenGL 4.6 in 2017
NVIDIA OpenGL 4.6 in 2017NVIDIA OpenGL 4.6 in 2017
NVIDIA OpenGL 4.6 in 2017
 
EXT_window_rectangles
EXT_window_rectanglesEXT_window_rectangles
EXT_window_rectangles
 
NV_path rendering Functional Improvements
NV_path rendering Functional ImprovementsNV_path rendering Functional Improvements
NV_path rendering Functional Improvements
 
OpenGL 4.5 Update for NVIDIA GPUs
OpenGL 4.5 Update for NVIDIA GPUsOpenGL 4.5 Update for NVIDIA GPUs
OpenGL 4.5 Update for NVIDIA GPUs
 
CS 354 Final Exam Review
CS 354 Final Exam ReviewCS 354 Final Exam Review
CS 354 Final Exam Review
 
CS 354 Surfaces, Programmable Tessellation, and NPR Graphics
CS 354 Surfaces, Programmable Tessellation, and NPR GraphicsCS 354 Surfaces, Programmable Tessellation, and NPR Graphics
CS 354 Surfaces, Programmable Tessellation, and NPR Graphics
 
CS 354 Performance Analysis
CS 354 Performance AnalysisCS 354 Performance Analysis
CS 354 Performance Analysis
 
CS 354 Acceleration Structures
CS 354 Acceleration StructuresCS 354 Acceleration Structures
CS 354 Acceleration Structures
 
CS 354 Global Illumination
CS 354 Global IlluminationCS 354 Global Illumination
CS 354 Global Illumination
 
CS 354 Ray Casting & Tracing
CS 354 Ray Casting & TracingCS 354 Ray Casting & Tracing
CS 354 Ray Casting & Tracing
 
CS 354 Typography
CS 354 TypographyCS 354 Typography
CS 354 Typography
 
CS 354 Bezier Curves
CS 354 Bezier Curves CS 354 Bezier Curves
CS 354 Bezier Curves
 

Recently uploaded

04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024Results
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessPixlogix Infotech
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsJoaquim Jorge
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 

Recently uploaded (20)

04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your Business
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 

SIGGRAPH 2012: GPU-Accelerated 2D and Web Rendering

  • 1. GPU-Accelerated 2D and Web Rendering Mark Kilgard
  • 2. Talk Details Location: West Hall Meeting Room 503, Los Angeles Convention Center Date: Wednesday, August 8, 2012 Time: 2:40 PM – 3:40 PM Mark Kilgard (Principal Software Engineer, NVIDIA) Abstract: The future of GPU-based visual computing integrates the web, resolution-independent 2D graphics, and 3D to maximize interactivity and quality while minimizing consumed power. See what NVIDIA is doing today to accelerate resolution-independent 2D graphics for web content. This presentation explains NVIDIA's unique "stencil, then cover" approach to accelerating path rendering with OpenGL and demonstrates the wide variety of web content that can be accelerated with this approach. Topic Areas: GPU Accelerated Internet; Digital Content Creation & Film; Visualization Level: Intermediate Watch video replay: http://nvidia.fullviewmedia.com/siggraph2012/ondemand/SS106.html
  • 3. Mark Kilgard Principal System Software Engineer OpenGL driver and API evolution Cg (“C for graphics”) shading language GPU-accelerated path rendering OpenGL Utility Toolkit (GLUT) implementer Author of OpenGL for the X Window System Co-author of Cg Tutorial
  • 4. GPUs are good at a lot of stuff
  • 8. Physics simulation CUDA N-Body
  • 13. What about advancing 2D graphics?
  • 14. Can GPUs render & improve the immersive web?
  • 15. What is path rendering? A rendering approach Resolution-independent two-dimensional graphics Occlusion & transparency depend on rendering order So called “Painter’s Algorithm” Basic primitive is a path to be filled or stroked Path is a sequence of path commands Commands are – moveto, lineto, curveto, arcto, closepath, etc. Standards Content: PostScript, PDF, TrueType fonts, Flash, Scalable Vector Graphics (SVG), HTML5 Canvas, Silverlight, Office drawings APIs: Apple Quartz 2D, Khronos OpenVG, Microsoft Direct2D, Cairo, Skia, Qt::QPainter, Anti-grain Graphics
  • 16. Seminal Path Rendering Paper John Warnock & Douglas Wyatt, Xerox PARC Presented SIGGRAPH 1982 Warnock founded Adobe months later John Warnock Adobe founder
  • 17. Path Rendering Standards Document Resolution- Immersive 2D Graphics Office Printing and Independent Web Programming Productivity Exchange Fonts Experience Interfaces Applications Java 2D API OpenType Flash QtGui API TrueType Scalable Mac OS X Vector 2D API Adobe Illustrator Graphics Open XML Paper (XPS) Inkscape HTML 5 Khronos API Open Source
  • 18. Live Demo Classic PostScript content Complex text rendering Yesterday’s New York Times rendered from Flash content its resolution-independent form
  • 19. Last Year’s SIGGRAPH Results in Real-time Ron Maharik, Mikhail Bessmeltsev, Alla Sheffer, Ariel Shamir and Nathan Carr SIGGRAPH 2011, July 2011 “Girl with Words in Her Hair” scene 591 paths 338,507 commands 1,244,474 coordinates
  • 20. 3D Rendering vs. Path Rendering Characteristic GPU 3D rendering Path rendering Dimensionality Projective 3D 2D, typically affine Pixel mapping Resolution independent Resolution independent Occlusion Depth buffering Painter’s algorithm Rendering primitives Points, lines, triangles Paths Primitive constituents Vertices Control points Constituents per primitive 1, 2, or 3 respectively Unbounded Topology of filled primitives Always convex Can be concave, self-intersecting, and have holes Degree of primitives 1st order (linear) Up to 3rd order (cubic) Rendering modes Filled, wire-frame Filling, stroking Line properties Width, stipple pattern Width, dash pattern, capping, join style Color processing Programmable shading Painting + filter effects Text rendering No direct support (2nd class support) Omni-present (1st class support) Raster operations Blending Brushes, blend modes, compositing Color model RGB or sRGB RGB, sRGB, CYMK, or grayscale Clipping operations Clip planes, scissoring, stenciling Clipping to an arbitrary clip path Coverage determination Per-color sample Sub-color sample
  • 21. CPU vs. GPU Limited at Rendering Tasks over Time 100% 100% 90% 90% 80% 80% 70% 70% 60% 60% 50% GPU 50% GPU CPU CPU 40% 40% 30% 30% 20% 20% 10% 10% 0% 0% 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 Pipelined 3D Interactive Rendering Path Rendering Goal of NV_path_rendering is to make path rendering a GPU-limited task Render all interactive pixels, whether 3D or 2D or web content with the GPU
  • 22. What is NV_path_rendering? OpenGL extension to GPU-accelerate path rendering Uses “stencil, then cover” (StC) approach Create a path object Step 1: “Stencil” the path object into the stencil buffer GPU provides fast stenciling of filled or stroked paths Step 2: “Cover” the path object and stencil test against its coverage stenciled by the prior step Application can configure arbitrary shading during the step More details later Supports the union of functionality of all major path rendering standards Includes all stroking embellishments Includes first-class text and font support Allows functionality to mix with traditional 3D and programmable shading
  • 23. Configuration GPU: GeForce 480 GTX (GF100) CPU: Core i7 950 @ 3.07 GHz NV_path_rendering Compared to Alternatives Alternative approaches are all much slower
  • 24. Configuration GPU: GeForce 480 GTX (GF100) CPU: Core i7 950 @ 3.07 GHz Detail on Alternatives Fast, but unacceptable quality
  • 25. Across an range of scenes… Release 300 GeForce GTX 480 Speedups over Alternatives Y axis is logarithmic—shows how many TIMES faster NV_path_rendering is that competitor
  • 27. Tiger Scene on GeForce 650 Absolute Frames/Second on GeForce 650 500.0 450.0 NVpr “peaks” at 1,800 FPS at 100x100 400.0 NV_path_rendering (16x) Cairo 350.0 Qt Frames per second Skia Bitmap 300.0 Skia Ganesh FBO Skia Ganesh 1x (aliased) 250.0 Direct2D GPU Direct2D WARP 200.0 poor quality 150.0 100.0 50.0 0.0 100x100 200x200 300x300 400x400 500x500 600x600 700x700 800x800 900x900 1000x1000 1100x1100 Window resolution
  • 28. NV_path_rendering is more than just matching CPU vector graphics 3D and vector graphics mix Superior quality   CPU GPU Competitors Arbitrary programmable shader on paths— 2D in perspective is free bump mapping
  • 29. Partial Solutions Not Enough Path rendering has 30 years of heritage and history Can’t do a 90% solution and Software to change Trying to “mix” CPU and GPU methods doesn’t work Expensive to move software—needs to be an unambiguous win Must surpass CPU approaches on all fronts Performance Quality Functionality Conformance to standards More power efficient Enable new applications
  • 30. Path Filling and Stroking just filling just stroking filling + stroke = intended content
  • 31. Dashing Content Examples Artist made windows with dashed line Same cake segment missing dashed stroking details Technical diagrams and charts often employ Frosting on cake is dashed dashing elliptical arcs with round end caps for “beaded” look; flowers are also dashing All content shown is fully GPU rendered Dashing character outlines for quilted look
  • 32. Excellent Geometric Fidelity for Stroking Correct stroking is hard Lots of CPU implementations approximate stroking GPU-accelerated OpenVG reference GPU-accelerated stroking avoids such short-cuts   GPU has FLOPS to compute true stroke point containment Cairo Qt   Stroking with tight end-point curve
  • 33. The Approach Step 1 Step 2: Stencil Cover repeat “Stencil, then Cover” (StC) Map the path rendering task from a sequential algorithm… …to a pipelined and massively parallel task Break path rendering into two steps First, “stencil” the path’s coverage into stencil buffer Second, conservatively “cover” path Test against path coverage determined in the 1st step Shade the path And reset the stencil value to render next path
  • 34. Pixel pipeline Vertex pipeline Path pipeline Application Path specification Pixel assembly Vertex assembly Transform path (unpack) Vertex operations transform feedback Primitive assembly Pixel operations Primitive operations Fill/Stroke Covering Pixel pack Rasterization read Texture Fragment operations back memory Fill/Stroke Application Raster operations Stenciling Framebuffer Display
  • 35. Key Operations for Rendering Path Objects Stencil operation only updates stencil buffer glStencilFillPathNV, glStencilStrokePathNV Cover operation glCoverFillPathNV, glCoverStrokePathNV renders hull polygons guaranteed to “cover” region updated by corresponding stencil Two-step rendering paradigm stencil, then cover (StC) Application controls cover stenciling and shading operations Gives application considerable control No vertex, tessellation, or geometry shaders active during steps Why? Paths have control points & rasterized regions, not vertices, triangles
  • 36. Path Rendering Example (1 of 3) Let’s draw a green concave 5-point star even-odd fill style non-zero fill style Path specification by string of a star GLuint pathObj = 42; const char *pathString ="M100,180 L40,10 L190,120 L10,120 L160,10 z"; glPathStringNV(pathObj,GL_PATH_FORMAT_SVG_NV, strlen(pathString),pathString); Alternative: path specification by data static const GLubyte pathCommands[5] = { GL_MOVE_TO_NV, GL_LINE_TO_NV, GL_LINE_TO_NV, GL_LINE_TO_NV, GL_LINE_TO_NV, GL_CLOSE_PATH_NV }; static const GLshort pathVertices[5][2] = { {100,180}, {40,10}, {190,120}, {10,120}, {160,10} }; glPathCommandsNV(pathObj, 6, pathCommands, GL_SHORT, 10, pathVertices);
  • 37. Path Rendering Example (2 of 3) Initialization Clear the stencil buffer to zero and the color buffer to black glClearStencil(0); glClearColor(0,0,0,0); glStencilMask(~0); glClear(GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); Specify the Path's Transform glMatrixIdentityEXT(GL_PROJECTION); glMatrixOrthoEXT(GL_MODELVIEW, 0,200, 0,200, -1,1); // uses DSA! Nothing really specific to path rendering here DSA = OpenGL’s Direct State Access extension (EXT_direct_state_access)
  • 38. Path Rendering Example (3 of 3) Render star with non-zero fill style Stencil path glStencilFillPathNV(pathObj, GL_COUNT_UP_NV, 0x1F); non-zero fill style Cover path glEnable(GL_STENCIL_TEST); glStencilFunc(GL_NOTEQUAL, 0, 0x1F); glStencilOp(GL_KEEP, GL_KEEP, GL_ZERO); glColor3f(0,1,0); // green glCoverFillPathNV(pathObj, GL_BOUNDING_BOX_NV); Alternative: for even-odd fill style even-odd fill style Just program glStencilFunc differently glStencilFunc(GL_NOTEQUAL, 0, 0x1); // alternative mask
  • 39. “Stencil, then Cover” stencil fill path command path front-end Path Fill Stenciling path projective object Specify a path per-path transform fill region Specify arbitrary path transformation operations Projective (4x4) allowed clipping & Depth values can be generated for scissoring sample depth testing accessibility Sample accessibility determined window, depth Accessibility can be limited by any & stencil tests or all of Scissor test, depth test, stencil test, view frustum, user-defined clip path winding planes, sample mask, stipple number pattern, and window ownership per-sample computation Winding number w.r.t. the operations transformed path is computed Added to stencil value of accessible stencil samples Fill stencil update: stenciling buffer +, -, or invert specific
  • 40. “Stencil, then Cover” cover fill path command path front-end Path Fill Covering path projective object Specify a path per-path transform Specify arbitrary path fill region transformation operations clipping & Projective (4x4) allowed scissoring Depth values can be generated for sample depth testing accessibility window, depth Sample accessibility determined per-sample & stencil tests Accessibility can be limited by any operations or all of Scissor test, depth test, stencil stencil test, view frustum, user-defined per-fragment or update clip planes, sample mask, stipple per-sample pattern, and window ownership typically zero shading Conservative covering geometry uses stencil to “cover” filled path programmable Determined by prior stencil step color stencil path buffer shading buffer
  • 41. Adding Stroking to the Star After the filling, add a stroked “rim” to the star like this… Set some stroking parameters (one-time): glPathParameterfNV(pathObj, GL_STROKE_WIDTH_NV, 10.5); glPathParameteriNV(pathObj, GL_JOIN_STYLE_NV, GL_ROUND_NV); non-zero fill style Stroke the star Stencil path glStencilStrokePathNV(pathObj, 0x3, 0xF); // stroked samples marked “3” Cover path glEnable(GL_STENCIL_TEST); glStencilFunc(GL_EQUAL, 3, 0xF); // update if sample marked “3” glStencilOp(GL_KEEP, GL_KEEP, GL_ZERO); glColor3f(1,1,0); // yellow glCoverStrokePathNV(pathObj, GL_BOUNDING_BOX_NV); even-odd fill style
  • 42. stencil stroke “Stencil, then Cover” path command path front-end Path Stroke Stenciling path projective object Specify a path per-path transform Specify arbitrary path transformation fill region Projective (4x4) allowed operations clipping & Depth values can be generated for depth testing scissoring sample Sample accessibility determined accessibility Accessibility can be limited by any window, depth or all of & stencil tests Scissor test, depth test, stencil test, view frustum, user-defined clip planes, sample mask, stipple pattern, and window ownership stroke per-sample point Point containment w.r.t. the stroked path is determined operations containment Replace stencil value of contained samples Stroke stencil stencil stenciling update: buffer specific replace
  • 43. cover stroke “Stencil, then Cover” path command path front-end Path Stroke Covering path projective object Specify a path per-path transform Specify arbitrary path fill region transformation operations clipping & Projective (4x4) allowed scissoring sample Depth values can be generated for depth testing accessibility Sample accessibility determined per-sample window, depth Accessibility can be limited by any & stencil tests operations or all of Scissor test, depth test, stencil test, view frustum, stencil user-defined clip planes, per-fragment or update sample mask, stipple pattern, per-sample typically zero and window ownership shading Conservative covering geometry uses stencil to “cover” stroked path programmable Determined by prior stencil step color stencil path buffer shading buffer
  • 44. First-class, Resolution-independent Font Support Fonts are a standard, first-class part of all path rendering systems Foreign to 3D graphics systems such as OpenGL and Direct3D, but natural for path rendering Because letter forms in fonts have outlines defined with paths TrueType, PostScript, and OpenType fonts all use outlines to specify glyphs NV_path_rendering makes font support easy Can specify a range of path objects with A specified font Sequence or range of Unicode character points No requirement for applications use font API to load glyphs You can also load glyphs “manually” from your own glyph outlines Functionality provides OS portability and meets needs of applications with mundane font requirements
  • 45. Handling Common Path Rendering Functionality: Filtering GPUs are highly efficient at image filtering Fast texture mapping  Qt Mipmapping Anisotropic filtering Wrap modes Moiré CPUs aren't really artifacts  GPU  Cairo
  • 46. Handling Uncommon Path Rendering Functionality: Projection Projection “just works” Because GPU does everything with perspective-correct interpolation
  • 47. Projective Path Rendering Support Compared  GPU  Skia  Cairo  Qt flawless yes, but bugs unsupported unsupported correct correct unsupported unsupported correct wrong unsupported unsupported
  • 48. Path Geometric Queries glIsPointInFillPathNV determine if object-space (x,y) position is inside or outside path, given a winding number mask glIsPointInStrokePathNV determine if object-space (x,y) position is inside the stroke of a path accounts for dash pattern, joins, and caps glGetPathLengthNV returns approximation of geometric length of a given sub-range of path segments glPointAlongPathNV returns the object-space (x,y) position and 2D tangent vector a given offset into a specified path object Useful for “text follows a path” Queries are modeled after OpenVG queries
  • 49. Accessible Samples of a Transformed Path When stenciled or covered, a path is transformed by OpenGL’s current modelview-projection matrix Allows for arbitrary 4x4 projective transform Means (x,y,0,1) object-space coordinate can be transformed to have depth Fill or stroke stenciling affects “accessible” samples A samples is not accessible if any of these apply to the sample clipped by user-defined or view frustum clip planes discarded by the polygon stipple, if enabled discarded by the pixel ownership test discarded by the scissor test, if enabled discarded by the depth test, if enabled displaced by the polygon offset from glPathStencilDepthOffsetNV discarded by the depth test, if enabled discarded by the (implicitly enabled) stencil test specified by glPathStencilFuncNV where the read mask is the bitwise AND of the glPathStencilFuncNV read mask and the bit-inversion of the effective mask parameter of the stenciling operation
  • 50. Mixing Depth Buffering and Path Rendering PostScript tigers surrounding Utah teapot Plus overlaid TrueType font rendering No textures involved, no multi-pass
  • 51. Demo
  • 52. 3D Path Rendering Details Stencil step uses GLfloat slope = -0.05; GLint bias = -1; glPathStencilDepthOffsetNV(slope, bias); glDepthFunc(GL_LESS); glEnable(GL_DEPTH_TEST); Stenciling step uses glPathCoverDepthFuncNV(GL_ALWAYS); Observation Stencil step is testing—but not writing—depth Stencil won’t be updated if stencil step fails depth test at a sample Cover step is writing—but not testing—depth Cover step doesn’t need depth test because stencil test would only pass if prior stencil step’s depth test passed Tricky, but neat because minimal mode changes involved
  • 53. Without glPathStencilDepthOffset Bad Things Happen Each tiger is layered 240 paths Without the depth offset during the stencil step, all the—essentially co-planar—layers would Z-fight as shown below terrible z-fighting artifacts
  • 54. Path Transformation Process Path object-space coordinates object (x,y,0,1) Modelview eye-space coordinates color/fog/tex coordinates matrix (xe,ye,ze,we) + attributes color/fog/tex coords. User-defined Object-space clip planes color/fog/tex Eye-space generation color/fog/tex generation clipped eye-space coordinates (xe,ye,ze,we) + attributes clipped clip-space Projection clip-space coordinates View-frustum coordinates to path matrix (xc,yc,zc,wc) + attributes clip planes (xc,yc,zc,wc) + attributes stenciling or covering
  • 55. Clip Planes Work with Path Rendering Scene showing a Welsh dragon clipped to all 64 combinations of 6 clip planes enabled & disabled
  • 56. Path Rendering Works with Scissoring and Stippling too Scene showing a tiger scissoring into 9 regions Tiger with two different polygon stipple patterns
  • 57. Rendering Paths Clipped to Some Other Arbitrary Path Example clipping the PostScript tiger to a heart constructed from two cubic Bezier curves unclipped tiger tiger with pink background clipped to heart
  • 58. Complex Clipping Example tiger is 240 paths cowboy clip is the union of 1,366 paths result of clipping tiger to the union of all the cowboy paths
  • 59. Arbitrary Programmable GPU Shading with Path Rendering During the “cover” step, you can do arbitrary fragment processing Could be Fixed-function fragment processing OpenGL assembly programs Cg shaders compiled to assembly with Cg runtime OpenGL Shading Language (GLSL) shaders Your pick—they all work! Remember: Your vertex, geometry, & tessellation shaders ignored during cover step (Even your fragment shader is ignored during the “stencil” step)
  • 60. Example of Bump Mapping on Path Rendered Text Phrase “Brick wall!” is path rendered and bump mapped with a Cg fragment shader light source position
  • 61. Anti-aliasing Discussion Good anti-aliasing is a big deal for path rendering Particularly true for font rendering of small point sizes Features of glyphs are often on the scale of a pixel or less NV_path_rendering uses multiple stencil samples per pixel for reasonable antialiasing Otherwise, image quality is poor 4 samples/pixel bare minimum 8 or 16 samples/pixel is pretty sufficient But 16 requires expensive 2x2 supersampling of 4x multisampling 16x is extremely memory intensive Alternative: quality vs. performance tradeoff Fast enough to render multiple passes to improve quality Approaches Accumulation buffer Alpha accumulation
  • 62. Anti-aliasing Strategy Benefits Benefits from GPU’s existing hardware AA strategies GPU Multiple color-stencil-depth rendered samples per pixel coverage NOT 4, 8, or 16 samples per pixel conflated with Rotated grid sub-positions opacity Fast downsampling by GPU Avoids conflating coverage & opacity Cairo, Qt, Skia, Maintains distinct color sample and Direct2D per sample location rendered Centroid sampling shows dark Fast enough for temporal cracks artifacts due to conflating schemes artifacts coverage with >>60 fps means multi-pass opacity, notice improves quality background bleeding
  • 63. Real Flash Scene same scene, GPU-rendered without conflation conflation artifacts abound, rendered by Skia conflation is aliasing & edge coverage percents are un-predicable in general; means conflated pixels flicker when animated slowly
  • 64. GPU Advantages Fast, quality filtering Mipmapping of gradient color ramps essentially free Includes anisotropic filtering (up to 16x) Filtering is post-conversion from sRGB Full access to programmable shading No fixed palette of solid color / gradient / pattern brushes Bump mapping, shadow mapping, etc.—it’s all available to you Blending Supports native blending in sRGB color space Both colors converted to linear RGB Then result is converted stored as sRGB Freely mix 3D and path rendering in same framebuffer Path rendering buffer can be depth tested against 3D So can 3D rendering be stenciled against path rendering Obviously performance is MUCH better than CPUs
  • 65. Improved Color Space: sRGB Path Rendering Radial color gradient example Modern GPUs have native support for moving from saturated red to blue perceptually-correct for sRGB framebuffer blending sRGB texture filtering No reason to tolerate uncorrected linear RGB color artifacts! More intuitive for artists to control  linear RGB Negligible expense for GPU to perform transition between saturated red and saturated blue has sRGB-correct rendering dark purple region However quite expensive for software path renderers to perform sRGB rendering Not done in practice  sRGB perceptually smooth transition from saturated red to saturated blue
  • 66. Trying Out NV_path_rendering Operating system support 2000, XP, Vista, Windows 7, Linux, FreeBSD, and Solaris Unfortunately no Mac support GPU support GeForce 8 and up (Tesla and beyond) Most efficient on Fermi and Kepler GPUs Current performance can be expected to improve Shipping since NVIDIA’s Release 275 drivers Available since summer 2011 New Release 300 drivers have remarkable NV_path_rendering performance Try it, you’ll like it
  • 67. Learning NV_path_rendering White paper + source code available “Getting Started with NV_path_rendering” Explains Path specification “Stencil, then Cover” API usage Instanced rendering for text and glyphs
  • 68. NV_path_rendering SDK Examples A set of NV_path_rendering examples of varying levels of complexity Most involved example is an accelerated SVG viewer Not a complete SVG implementation Compiles on Windows and Linux Standard makefiles for Linux Use Visual Studio 2008 for Windows
  • 69. Whitepapers “Getting Started with NV_path_rendering”
  • 70. Whitepapers “Mixing 3D and Path Rendering”
  • 71. SDK Example Walkthrough (1) pr_basic—simplest example pr_hello_world—kerned, underlined, of path filling & stroking stroked, and linear gradient filled text pr_welsh_dragon—filled layers pr_gradient—path with holes with texture applied
  • 72. SDK Example Walkthrough (2) pr_font_file—loading glyphs from a font file pr_korean—rendering UTF-8 string of Korea with the GL_FONT_FILE_NV target characters pr_shaders—use Cg shaders to bump map text with brick-wall texture
  • 73. SDK Example Walkthrough (3) pr_text_wheel—render projected gradient pr_tiger—classic PostScript tiger rendered text as spokes of a wheel as filled & stroked path layers pr_warp_tiger—warp the tiger with a free projective transform click & drag the bounding rectangle corners to change the projection
  • 74. SDK Example Walkthrough (4) pr_tiger3d—multiple projected and depth tested pr_svg—GPU-accelerated SVG viewer tigers + 3D teapot + overlaid text pr_pick—test points to determine if they are in the filled and/or stroked region of a complex path
  • 75. Conclusions GPU-acceleration of 2D resolution-independent graphics is coming HTML 5 and low-power requirements are demanding it “Stencil, then Cover” approach Very fast Quality, functionality, and features Available today through NV_path_rendering Shipping today NV_path_rendering resources available
  • 77. More Information Best current driver: use OpenGL 4.3 beta driver http://www.nvidia.com/content/devzone/opengl-driver-4.3.html Or try www.nvidia.com/drivers Grab the latest Beta drivers for your OS & GPU Latest drivers greatly improve instanced stencil step performance! Developer resources http://developer.nvidia.com/nv-path-rendering Whitepapers, FAQ, specification NVprSDK—software development kit NVprDEMOs—pre-compiled Windows demos OpenGL Extension Wrangler (GLEW) has API support Email: nvpr-support@nvidia.com
  • 78. Don’t Forget the 20th Anniversary Party Date: August 8th 2012 ( today! ) Location: JW Marriott Los Angeles at LA Live Venue: Gold Ballroom – Salon 1
  • 79. Other OpenGL-related NVIDIA Sessions at SIGGRAPH GPU Ray Tracing and OptiX Wednesday in West Hall 503, 3:50 PM - 4:50 PM David McAllister, OptiX Manager, NVIDIA Phillip Miller, Director, Workstation Software Product Management, NVIDIA Voxel Cone Tracing & Sparse Voxel Octree for Real-time Global Illumination Wednesday in NVIDIA Booth, 3:50 PM - 4:50 PM Cyril Crassin, Postdoctoral Research Scientist, NVIDIA Research OpenSubdiv: High Performance GPU Subdivision Surface Drawing Thursday in NVIDIA Booth, 10:00 AM - 10:30 AM Pixar Animation Studios GPU Team, Pixar nvFX : A New Scene & Material Effect Framework for OpenGL and DirectX Thursday in NVIDIA Booth, 2:00 PM - 2:30 PM Tristan Lorach, Developer Relations Senior Engineer, NVIDIA

Editor's Notes

  1. NV_path_rendering provides a new third pipeline—in addition to the vertex and pixel pipelines—for rendering pixels