The clip stage may crash if there's no position output, for this reason
code was added to avoid running the pipeline stages in this case
(
c7c7186045ec617c53f7899280cbe12e59503e4d). However, this failed to actually
work when there was a geometry shader, since unlike the vertex shader it did
not initialize the position output to -1, hence the code trying to detect
this didn't trigger. So simply initialize the position output to -1 just like
the vs does.
This fixes piglit glsl-1.50-transform-feedback-type-and-size (segfault->pass).
clip-distance-out-values.shader_test goes from segfault to assertion failure,
suggesting more fixes are needed, no other piglit changes.
Reviewed-by: Dave Airlie <airlied@redhat.com>
Reviewed-by: Zack Rusin <zackr@vmware.com>
ucp_enable = (1 << num_written_clipdistance) - 1;
}
+ assert(pos != -1);
for (j = 0; j < info->count; j++) {
float *position = out->data[pos];
unsigned mask = 0x0;
DO_CLIP_FULL_Z | DO_CLIP_HALF_Z | DO_CLIP_USER)) {
float *clipvertex = position;
- if ((flags & DO_CLIP_USER) && cv != pos)
+ if ((flags & DO_CLIP_USER) && cv != pos) {
+ assert(cv != -1);
clipvertex = out->data[cv];
+ }
for (i = 0; i < 4; i++) {
out->clip[i] = clipvertex[i];
*/
gs->primitive_boundary = gs->max_output_vertices + 1;
+ gs->position_output = -1;
for (i = 0; i < gs->info.num_outputs; i++) {
if (gs->info.output_semantic_name[i] == TGSI_SEMANTIC_POSITION &&
gs->info.output_semantic_index[i] == 0)