• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1Name
2
3    QCOM_shader_framebuffer_fetch_noncoherent
4
5Name Strings
6
7    GL_QCOM_shader_framebuffer_fetch_noncoherent
8
9Contact
10
11    Jeff Leger, Qualcomm (jleger@qti.qualcomm.com)
12
13Status
14
15    Complete
16
17Version
18
19    Last Modified Date: April 21, 2017
20    Author Revision: 2
21
22Number
23
24    OpenGL ES Extension #277
25
26Dependencies
27
28    OpenGL ES 2.0 is required.
29
30    Requires one of more of the following OpenGL ES extensions:
31    EXT_shader_framebuffer_fetch
32    ARM_shader_framebuffer_fetch_depth_stencil
33    ARM_shader_framebuffer_fetch
34
35Overview
36
37    Existing extensions such as EXT_shader_framebuffer_fetch and
38    ARM_shader_framebuffer_fetch_depth_stencil allow fragment
39    shaders to read existing framebuffer color or depth/stencil data as input.
40    This extension adds support for reading those same inputs with
41    relaxed coherency requirements.  This mode can avoid expensive
42    per-primitive flushes of the pixel pipeline and may offer performance
43    improvements in some implementations.
44
45    When the relaxed coherency mode is enabled, reads of the framebuffer data
46    by the fragment shader will guarantee defined results only if each sample
47    is touched no more than once in any single rendering pass.  The command
48    FramebufferFetchBarrierQCOM() is provided to indicate a boundary between
49    passes.
50
51New Procedures and Functions
52
53    void FramebufferFetchBarrierQCOM(void);
54
55New Tokens
56
57    Accepted by the <cap> parameter of Disable, Enable, and IsEnabled, and by
58    the <pname> parameter of GetIntegerv, GetBooleanv, GetFloatv, GetDoublev
59    and GetInteger64v:
60
61        FRAMEBUFFER_FETCH_NONCOHERENT_QCOM                     0x96A2
62
63New Builtin Variables
64    none
65
66Changes to the OpenGL ES 2.0 Specification, Chapter 3
67
68    Append the following new sub-section at the end of section 3.8.2, Shader
69    Execution, page 197:
70
71    Framebuffer Fetch Coherency
72
73    Rendering is typically done coherently and in primitive order.  When an
74    individual sample is covered by multiple primitives, rendering for that
75    sample is performed sequentially in the order in which the primitives were
76    submitted.  When a Fragment shader reads framebuffer data (using
77    glLastFragData, gl_LastFragDepthARM, or an inout variable) the value will
78    always return the last fragment value written to the frame buffer.  This
79    coherent behavior is enabled by default, but an optional non-coherent
80    behavior can be enabled or disabled by calling Enable or Disable with the
81    symbolic constant FRAMEBUFFER_FETCH_NONCOHERENT_QCOM.  If the non-coherent
82    behavior is enabled, applications should split their rendering into a collection
83    of passes, none of which touch an individual sample in the framebuffer more than
84    once.  When non-coherent behavior is enabled, the results of framebuffer reads
85    are undefined if the sample being read has been touched previously in the same
86    pass.  The command
87
88      void FramebufferFetchBarrierQCOM(void);
89
90    specifies a boundary between passes.  Any command that causes the value of a
91    sample to be modified using the framebuffer is considered to touch the sample,
92    including clears, blended or unblended primitives, and BlitFramebuffer copies.
93    Calling Disable with the symbolic constant FRAMEBUFFER_FETCH_NONCOHERENT_QCOM
94    implicilty ends the current pass.
95
96New State
97
98
99    Get Value                             Type  Get Command  Minimum Value  Description        Section
100    ---------                             ----  -----------  -------------  --------------     -------
101    FRAMEBUFFER_FETCH_NONCOHERENT_QCOM    B     GetBooleanv  -              enables relaxed
102                                                                            coherency for reads
103                                                                            of framebuffer.
104
105Revision History
106
107    Version 1, 2017/01/06 - Initial draft.
108    Version 2, 2017/04/21 - Extended to include depth/stencil reads.
109