Name

    INTEL_framebuffer_CMAA

Name Strings

    GL_INTEL_framebuffer_CMAA

Contact

   Slawomir Grajewski,  Intel (slawomir.grajewski 'at' intel.com)

Contributors

    Devan Burke, Intel
    Miroslaw Oksiucik, Intel
    Jon Kennedy, Intel

Status

    Complete, shipping on selected Intel graphics.

Version

    Last Modified Date: June 26th, 2015
    Revision: 1

Number

    OpenGL Extension #481
    OpenGL ES Extension #246

Dependencies

    OpenGL dependencies:

        OpenGL 3.0 is required.

        The extension is written against the OpenGL 4.5 Specification, Core
        Profile, October 18, 2013.

    OpenGL ES dependencies:

        This extension is written against the OpenGL ES 3.1 specification,
        June 4, 2014.

Overview

    Multisampling is a mechanism to antialias all GL primitives and is part of
    the GL specification.

    Better visual quality can be achieved by applying multisampling. However,
    on certain platforms it comes at a high performance cost. In general, the
    greater number of samples per pixel, the bigger the cost.

    Conservative Morphological Anti-Aliasing (CMAA) is an alternative approach
    to antialiasing, which operates on the final image. This post processing
    technique results in image quality comparable to multisampling at much
    lower cost and better performance.

    This extension incorporates an optimized CMAA algorithm implementation into
    the GL implementation.

    For more information on CMAA refer to http://software.intel.com.

New Procedures and Functions

    void ApplyFramebufferAttachmentCMAAINTEL();

New Tokens

    None.

Add new Section 17.4.6 to Chapter 17.4, Whole Framebuffer Operations, OpenGL 4.5

    17.4.6 Framebuffer post processing: Conservative Morphological Anti-Aliasting (CMMA)

Add new Section 15.2.5 to Chapter 15.2, Whole Framebuffer Operations, OpenGL ES 3.1

    15.2.5 Framebuffer post processing: Conservative Morphological Anti-Aliasting (CMMA)

    The post processing of current draw buffers pertaining to the framebuffer
    bound to the DRAW_FRAMEBUFFER target according to the Conservative
    Morphological Anti-Aliasing algorithm can be requested by calling

    void ApplyFramebufferAttachmentCMAAINTEL();

    Errors

        An INVALID_OPERATION error is generated if any of the current draw
        buffers is multisampled.

        An OUT_OF_MEMORY error may be generated if the GL implementation is
        unable to allocate internal resources necessary to perform the
        requested operation.

    The CMAA post processing is performed in-place for all color attachments of
    the currently bound draw framebuffer.

Issues

    1. If an application wants to post process color attachments of different
    dimensions/internal formats, what is the best approach in terms of
    performance?

       a. Attach the color attachment to the same framebuffer one after another
          for post processing?

       b. For each color attachment create a dedicated framebuffer object that
          will be used for post processing?

    RESOLVED: b.

    Whilst both approaches are functionally correct, approach b is more
    performant as the GL implementation will allocate temporary resources per
    framebuffer object and will reuse those resources for subsequent post
    processing operations without the need to resize or re-allocate them.

    2. Does the application have to perform any synchronization after requesting
       CMAA post processing?

    RESOLVED: No.

    From synchronization perspective, the post processing request behaves
    exactly as any draw request.

    3. What happens if CMAA post processing is requested for the multisampled
       color attachment?

    RESOLVED

    An INVALID_OPERATION error code is returned.

Revision History

    1.2   08/04/15 sgrajewski   Minor clarifications.
    1.1   06/26/15 sgrajewski   Initial revision.

