Mesa (main): aux/indices: include provoking vertex check in prim type conversion

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Tue Jun 15 19:49:22 UTC 2021


Module: Mesa
Branch: main
Commit: 532472da0b6c5facf9f0e380f1f6a6e340c9bac4
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=532472da0b6c5facf9f0e380f1f6a6e340c9bac4

Author: Neha Bhende <bhenden at vmware.com>
Date:   Mon Jun 14 15:49:15 2021 -0700

aux/indices: include provoking vertex check in prim type conversion

Include provoking vertex checking in u_index_prim_type_convert() to make sure
the right primitive type is returned from the generator function.

Fixes google earth running on VMware svga device on hw version 11.

Fixes: cad2026b72cf ("aux/indices: break out primitive type conversion to separate function")

Reviewed-by: Charmaine Lee <charmainel at vmware.com>
Reviewed-By: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11367>

---

 src/gallium/auxiliary/indices/u_indices.c | 8 ++++----
 src/gallium/auxiliary/indices/u_indices.h | 2 +-
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/src/gallium/auxiliary/indices/u_indices.c b/src/gallium/auxiliary/indices/u_indices.c
index ae2110561a8..b61674334c3 100644
--- a/src/gallium/auxiliary/indices/u_indices.c
+++ b/src/gallium/auxiliary/indices/u_indices.c
@@ -60,9 +60,9 @@ static void translate_byte_to_ushort( const void *in,
 }
 
 enum pipe_prim_type
-u_index_prim_type_convert(unsigned hw_mask, enum pipe_prim_type prim)
+u_index_prim_type_convert(unsigned hw_mask, enum pipe_prim_type prim, bool pv_matches)
 {
-   if (hw_mask & (1<<prim))
+   if ((hw_mask & (1<<prim)) && pv_matches)
       return prim;
 
    switch (prim) {
@@ -159,7 +159,7 @@ u_index_translator(unsigned hw_mask,
       return U_TRANSLATE_MEMCPY;
    }
    *out_translate = translate[in_idx][out_idx][in_pv][out_pv][prim_restart][prim];
-   *out_prim = u_index_prim_type_convert(hw_mask, prim);
+   *out_prim = u_index_prim_type_convert(hw_mask, prim, in_pv == out_pv);
    *out_nr = u_index_count_converted_indices(hw_mask, in_pv == out_pv, prim, nr);
 
    return ret;
@@ -248,7 +248,7 @@ u_index_generator(unsigned hw_mask,
 
    *out_index_size = ((start + nr) > 0xfffe) ? 4 : 2;
    out_idx = out_size_idx(*out_index_size);
-   *out_prim = u_index_prim_type_convert(hw_mask, prim);
+   *out_prim = u_index_prim_type_convert(hw_mask, prim, in_pv == out_pv);
    *out_nr = u_index_count_converted_indices(hw_mask, in_pv == out_pv, prim, nr);
 
    if ((hw_mask & (1<<prim)) && 
diff --git a/src/gallium/auxiliary/indices/u_indices.h b/src/gallium/auxiliary/indices/u_indices.h
index 459163cd1c8..3c57f9c5da5 100644
--- a/src/gallium/auxiliary/indices/u_indices.h
+++ b/src/gallium/auxiliary/indices/u_indices.h
@@ -84,7 +84,7 @@ void u_index_init( void );
 
 /* returns the primitive type resulting from index translation */
 enum pipe_prim_type
-u_index_prim_type_convert(unsigned hw_mask, enum pipe_prim_type prim);
+u_index_prim_type_convert(unsigned hw_mask, enum pipe_prim_type prim, bool pv_matches);
 
 static inline unsigned
 u_index_size_convert(unsigned index_size)



More information about the mesa-commit mailing list