On 16 April 2012 09:44, Ian Romanick <span dir="ltr">&lt;<a href="mailto:idr@freedesktop.org">idr@freedesktop.org</a>&gt;</span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="im">On 04/15/2012 03:25 AM, nobled wrote:<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
I&#39;m not sure if I&#39;m missing something, but the non-compatibility<br>
OpenGL 3.1 Specification seems pretty straightforward about this:<br>
<br>
page 42/55 section 2.11 &quot;Vertex Shaders&quot;:<br>
&quot;If the program object<br>
has no vertex shader, or no program object is currently in use, the<br>
results of vertex<br>
shader execution are undefined.&quot;<br>
<br>
page 160/173 section 3.9 &quot;Fragment Shaders&quot;:<br>
&quot;If the program<br>
object has no fragment shader, or no program object is currently in<br>
use, the results<br>
of fragment shader execution are undefined.&quot;<br>
<br>
page 45/58 section 2.11.2 &quot;Program Objects&quot;:<br>
&quot;If UseProgram is called with program set to 0, then the current<br>
rendering state refers to an invalid program object, and the results<br>
of vertex and<br>
fragment shader execution are undefined. However, this is not an error.&quot;<br>
</blockquote>
<br></div>
Right.  It looks like this language persists all the way through OpenGL 4.2.<br>
<br>
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.<br>
<br>
    &quot;Linking will also fail if the program object contains objects<br>
    to form a geometry shader (see section 2.12), and<br>
<br>
        * the program contains no objects to form a vertex shader;<br>
<br>
        ...&quot;<br>
<br>
<br>
    &quot;Linking can fail for a variety of reasons as specified in the<br>
    OpenGL Shading Language Specification, as well as any of the<br>
    following reasons:&quot;<br>
<br>
        * ...<br>
<br>
        * The program object contains objects to form a tessellation<br>
          control shader (see section 2.12.1), and<br>
<br>
            - the program is not separable and contains no objects<br>
              to form a vertex shader;<br>
<br>
        ...&quot;<div class="im"><br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
I&#39;m not sure if &quot;undefined&quot; is used in the &quot;undefined rendering<br>
results&quot; sense or the &quot;summoning nasal demons&quot; sense, though.<br>
</blockquote>
<br></div>
That&#39;s not defined. :p  Sorry, I couldn&#39;t resist.<br>
<br>
Here&#39;s my new proposal:<br>
<br>
    * Don&#39;t generate a linker error or warning for incomplete programs.<br>
<br>
    * For draw calls that use incomplete programs, drop the rendering on the floor and emit a message to the debug log.</blockquote><div><br>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 &quot;the results of fragment shader execution are undefined&quot; 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.<br>
</div></div>