On 04/16/2012 10:01 AM, Paul Berry wrote:
On 16 April 2012 09:44, Ian Romanick <i...@freedesktop.org
<mailto:i...@freedesktop.org>> wrote:

    On 04/15/2012 03:25 AM, nobled wrote:

        I'm not sure if I'm missing something, but the non-compatibility
        OpenGL 3.1 Specification seems pretty straightforward about this:

        page 42/55 section 2.11 "Vertex Shaders":
        "If the program object
        has no vertex shader, or no program object is currently in use, the
        results of vertex
        shader execution are undefined."

        page 160/173 section 3.9 "Fragment Shaders":
        "If the program
        object has no fragment shader, or no program object is currently in
        use, the results
        of fragment shader execution are undefined."

        page 45/58 section 2.11.2 "Program Objects":
        "If UseProgram is called with program set to 0, then the current
        rendering state refers to an invalid program object, and the results
        of vertex and
        fragment shader execution are undefined. However, this is not an
        error."


    Right.  It looks like this language persists all the way through
    OpenGL 4.2.

    I did a bit more spec spelunking, and it seems the only link error
    required by desktop OpenGL is for geometry shaders and tessellation
    shaders.

    "Linking will also fail if the program object contains objects
        to form a geometry shader (see section 2.12), and

            * the program contains no objects to form a vertex shader;

            ..."


    "Linking can fail for a variety of reasons as specified in the
        OpenGL Shading Language Specification, as well as any of the
        following reasons:"

            * ...

            * The program object contains objects to form a tessellation
              control shader (see section 2.12.1), and

                - the program is not separable and contains no objects
                  to form a vertex shader;

            ..."


        I'm not sure if "undefined" is used in the "undefined rendering
        results" sense or the "summoning nasal demons" sense, though.


    That's not defined. :p  Sorry, I couldn't resist.

    Here's my new proposal:

        * Don't generate a linker error or warning for incomplete programs.

        * For draw calls that use incomplete programs, drop the
    rendering on the floor and emit a message to the debug log.


A point of clarification: if the program is incomplete because it lacks
a fragment shader, is transform feedback expected to work?  My read of
the spec is that the phrase "the results of fragment shader execution
are undefined" means that transform feedback is still expected to work
in this situation.  So we need to make sure that we only drop fragments
on the floor, not vertices.

Ah, good catch.  That sounds like a nice test case. :)
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to