mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-02 20:20:09 +01:00
i965/gs: Fixup gl_PointSize on entry to geometry shaders.
gl_PointSize is stored in the w component of VARYING_SLOT_PSIZ, but the geometry shader infrastructure assumes that it should look for all geometry shader inputs of type float in the x component. So when compiling a geomtery shader that uses a gl_PointSize input, fix it up during the shader prolog by moving the w component to the x component. This is similar to how we emit fixups and workarounds for vertex shader attributes. Fixes piglit test spec/glsl-1.50/execution/geometry/core-inputs. Reviewed-by: Ian Romanick <ian.d.romanick@intel.com> Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
This commit is contained in:
parent
8f758b0b92
commit
d14fcd7db7
1 changed files with 17 additions and 0 deletions
|
|
@ -156,6 +156,23 @@ vec4_gs_visitor::emit_prolog()
|
|||
}
|
||||
}
|
||||
|
||||
/* If the geometry shader uses the gl_PointSize input, we need to fix it up
|
||||
* to account for the fact that the vertex shader stored it in the w
|
||||
* component of VARYING_SLOT_PSIZ.
|
||||
*/
|
||||
if (c->gp->program.Base.InputsRead & VARYING_BIT_PSIZ) {
|
||||
this->current_annotation = "swizzle gl_PointSize input";
|
||||
for (int vertex = 0; vertex < c->gp->program.VerticesIn; vertex++) {
|
||||
dst_reg dst(ATTR,
|
||||
BRW_VARYING_SLOT_COUNT * vertex + VARYING_SLOT_PSIZ);
|
||||
dst.type = BRW_REGISTER_TYPE_F;
|
||||
src_reg src(dst);
|
||||
dst.writemask = WRITEMASK_X;
|
||||
src.swizzle = BRW_SWIZZLE_WWWW;
|
||||
emit(MOV(dst, src));
|
||||
}
|
||||
}
|
||||
|
||||
this->current_annotation = NULL;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue