svga: fix vgpu9 sprite coordinate bug
authorBrian Paul <brianp@vmware.com>
Thu, 23 Aug 2018 15:25:15 +0000 (09:25 -0600)
committerBrian Paul <brianp@vmware.com>
Wed, 29 Aug 2018 17:29:07 +0000 (11:29 -0600)
Setting GL_POINT_SPRITE_COORD_ORIGIN to GL_LOWER_LEFT did not work for
vgpu9.  We can use the rasterizer sprite_coord_enable bitfield as-is.
We need to index into it using the TGSI semantic index, not the
register index.

This fixes the Piglit fbo-gl_pointcoord and glsl-fs-pointcoord tests.

Testing done: Piglit, Mesa sprite demos

Reviewed-by: Charmaine Lee <charmainel@vmware.com>
src/gallium/drivers/svga/svga_shader.h
src/gallium/drivers/svga/svga_state_fs.c
src/gallium/drivers/svga/svga_tgsi_decl_sm30.c

index 70d1246982715b1abb9414f397ae2420f0864b8f..b703e048b24cc0a177586a2dfafdb05653134e54 100644 (file)
@@ -93,7 +93,7 @@ struct svga_compile_key
    unsigned num_unnormalized_coords:8;
    unsigned clip_plane_enable:PIPE_MAX_CLIP_PLANES;
    unsigned sprite_origin_lower_left:1;
-   unsigned sprite_coord_enable;
+   uint16_t sprite_coord_enable;
    struct {
       unsigned compare_mode:1;
       unsigned compare_func:3;
@@ -101,7 +101,6 @@ struct svga_compile_key
       unsigned texel_bias:1;
       unsigned width_height_idx:5; /**< texture unit */
       unsigned is_array:1;
-      unsigned sprite_texgen:1;
       unsigned swizzle_r:3;
       unsigned swizzle_g:3;
       unsigned swizzle_b:3;
index 5190542d0276e8379db3b687db89674796a7d47c..73f8856b15984f97f43dc3cf44a68debc4ebbb51 100644 (file)
@@ -331,10 +331,7 @@ make_fs_key(const struct svga_context *svga,
    }
 
    /* sprite coord gen state */
-   for (i = 0; i < svga->curr.num_samplers[shader]; ++i) {
-      key->tex[i].sprite_texgen =
-         svga->curr.rast->templ.sprite_coord_enable & (1 << i);
-   }
+   key->sprite_coord_enable = svga->curr.rast->templ.sprite_coord_enable;
 
    key->sprite_origin_lower_left = (svga->curr.rast->templ.sprite_coord_mode
                                     == PIPE_SPRITE_COORD_LOWER_LEFT);
index 0ecabc7e740880175bed02c10ecabfb27be67c01..766e439188324bcc6ede8fd8531a426496203e2a 100644 (file)
@@ -289,7 +289,7 @@ ps30_input(struct svga_shader_emitter *emit,
       if (semantic.Name == TGSI_SEMANTIC_GENERIC &&
           emit->key.sprite_origin_lower_left &&
           index >= 1 &&
-          emit->key.tex[index - 1].sprite_texgen) {
+          emit->key.sprite_coord_enable & (1 << semantic.Index)) {
          /* This is a sprite texture coord with lower-left origin.
           * We need to invert the texture T coordinate since the SVGA3D
           * device only supports an upper-left origin.