need_pipeline = TRUE;
}
+ /* SVGA_NEW_FS, SVGA_NEW_RAST, SVGA_NEW_REDUCED_PRIMITIVE
+ */
+ if (svga->curr.reduced_prim == PIPE_PRIM_POINTS) {
+ unsigned sprite_coord_gen = svga->curr.rast->templ.sprite_coord_enable;
+ unsigned generic_inputs = svga->curr.fs->generic_inputs;
+
+ if (sprite_coord_gen &&
+ (generic_inputs & ~sprite_coord_gen)) {
+ /* The fragment shader is using some generic inputs that are
+ * not being replaced by auto-generated point/sprite coords (and
+ * auto sprite coord generation is turned on).
+ * The SVGA3D interface does not support that: if we enable
+ * SVGA3D_RS_POINTSPRITEENABLE it gets enabled for _all_
+ * texture coordinate sets.
+ * To solve this, we have to use the draw-module's wide/sprite
+ * point stage.
+ */
+ need_pipeline = TRUE;
+ }
+ }
+
if (need_pipeline != svga->state.sw.need_pipeline) {
svga->state.sw.need_pipeline = need_pipeline;
svga->dirty |= SVGA_NEW_NEED_PIPELINE;
{
"need pipeline",
(SVGA_NEW_RAST |
+ SVGA_NEW_FS |
SVGA_NEW_VS |
SVGA_NEW_REDUCED_PRIMITIVE),
update_need_pipeline
}
/*
- * Some state changes the draw module does makes us belive we
+ * Some state changes the draw module does makes us believe we
* we don't need swtnl. This causes the vdecl code to pickup
* the wrong buffers and vertex formats. Try trivial/line-wide.
*/