Name

    NV_conservative_raster_dilate

Name Strings

    GL_NV_conservative_raster_dilate

Contact

    Kedarnath Thangudu, NVIDIA Corporation (kthangudu 'at' nvidia.com)

Contributors

    Chris Wyman, NVIDIA Corporation (cwyman 'at' nvidia.com)
    Aaron Lefohn, NVIDIA Corporation (alefohn 'at' nvidia.com)
    Mark Kilgard, NVIDIA Corporation (mkilgard 'at' nvidia.com)
    Eric Werness, NVIDIA Corporation (ewerness 'at' nvidia.com)

Status

    Shipping in Nvidia release 352.XX drivers and up.

Version

    Last Modified Date:         September 10, 2015
    Revision:                   2

Number

    OpenGL Extension #480

Dependencies

    This extension is written against the NV_conservative_raster extension as 
    applied to OpenGL 4.3 specification (Compatibility Profile) but may be 
    used with the Core profile or OpenGL ES 2.0 or later.
    
Overview

    This extension extends the conservative rasterization functionality 
    provided by NV_conservative_raster. It provides a new control to generate 
    an "over-conservative" rasterization by dilating primitives prior to 
    rasterization.

    When using conservative raster to bin geometry, this extension provides a 
    programmable overlap region between adjacent primitives.  Regular 
    rasterization bins triangles with a shared edge uniquely into pixels. 
    Conservative raster has a one-pixel overlap along the shared edge.  Using 
    a half-pixel raster dilation, this overlap region increases to two pixels.

New Procedures and Functions
    
    void ConservativeRasterParameterfNV(enum pname, float value);

New Tokens

    Accepted by the <pname> parameter of ConservativeRasterParameterfNV:
        CONSERVATIVE_RASTER_DILATE_NV                   0x9379

    Accepted by the <pname> parameter of GetBooleanv, GetIntegerv, 
    GetInteger64v, GetFloatv, and GetDoublev:

        CONSERVATIVE_RASTER_DILATE_NV                   0x9379
        CONSERVATIVE_RASTER_DILATE_RANGE_NV             0x937A
        CONSERVATIVE_RASTER_DILATE_GRANULARITY_NV       0x937B

Additions to Chapter 14 of the OpenGL 4.3 (Compatibility Profile) Specification
(Fixed-Function Primitive Assembly and Rasterization)

    Add the following paragraph to the end of the new subsection 14.6.X 
    "Conservative Rasterization" added by NV_conservative_raster

    When CONSERVATIVE_RASTERIZATION_NV is enabled, an "over conservative" 
    rasterization of primitives may be achieved by dilating points, lines, or 
    polygons in screen space prior to rasterization. The amount of dilation 
    may be specified by the following command

        void ConservativeRasterParameterfNV(enum pname, float value);

    with the <pname> set to CONSERVATIVE_RASTER_DILATE_NV. The <value> 
    specifies the amount of dilation as a fraction of the pixel size. Not all 
    fractional values are supported. If the requested value is greater than
    the maximum supported value, the maximum supported value is used. If any 
    other supported value is requested, the nearest supported value which
    is greater than the requested value is used. Only a dilation value of 0 
    pixels is guaranteed to be supported; others depend on the implementation.
    Calling Get with CONSERVATIVE_RASTER_DILATE_RANGE_NV returns 
    two floating point values representing minimum and maximum supported 
    dilation values. Calling Get with CONSERVATIVE_RASTER_DILATE_-
    GRANULARITY_NV returns a single floating point value representing the 
    value difference between consecutive supported values within the range.

Additions to the AGL/GLX/WGL Specifications

    None.

GLX Protocol

    None.
    
Modifications to the OpenGL Shading Language Specification, Version 4.30

    None.

Errors
    
    If ConservativeRasterParameteriNV is called and <pname> is not 
    CONSERVATIVE_RASTER_DILATE_NV the error INVALID_ENUM is generated.

    If ConservativeRasterParameteriNV is called with <pname> set to 
    CONSERVATIVE_RASTER_DILATE_NV the error INVALID_VALUE is generated if 
    <value> is less than 0.

New Implementation Dependent State
                                                        Minimum
    Get Value                      Type    Get Command  Value      Description                        Sec.
    ---------                      ------- -----------  -------    ------------------------------     ------
    CONSERVATIVE_RASTER_DILATE_-   2 x R+  GetFloatv    0, 0.75    Min and Max dilation values        14.6.X
        RANGE_NV                                                   supported
    CONSERVATIVE_RASTER_DILATE_-   R+      GetFloatv    0          Difference between consecutive     14.6.X
        GRANULARITY_NV                                             supported values in the range

New State

    Get Value                       Get Command  Type  Initial Value  Description                  Sec.    Attribute
    ---------                       -----------  ----  -------------  -----------                  ----    ---------
    CONSERVATIVE_RASTER_DILATE_NV   GetFloatv    R+    0              Dilate primitives when       14.6.X  -
                                                                      conservative rasterization
                                                                      is enabled.

NVIDIA Implementation Details

    NVIDIA's GeForce 9xx and Quadro Mxxxx series of GPUs (GM20x) and Tegra X1 
    support this extension with a granularity of 0.25 and a range of [0, 0.75].

Issues

    None.

Revision History
    
    Revision 2
    - Fix the descriptions for the <pname> parameters.
    - Fix typos and wordings.

    Revision 1
    - Internal revisions.
