mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-04-14 06:40:35 +02:00
draw: don't run pipeline stages when gs has no position output
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
(c7c7186045). 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>
This commit is contained in:
parent
c40d7d6d94
commit
11bd6f0e9b
2 changed files with 5 additions and 1 deletions
|
|
@ -62,6 +62,7 @@ static boolean TAG(do_cliptest)( struct pt_post_vs *pvs,
|
|||
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;
|
||||
|
|
@ -84,8 +85,10 @@ static boolean TAG(do_cliptest)( struct pt_post_vs *pvs,
|
|||
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];
|
||||
|
|
|
|||
|
|
@ -791,6 +791,7 @@ draw_create_geometry_shader(struct draw_context *draw,
|
|||
*/
|
||||
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)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue