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