Mesa (master): gallium/indices: translate primitive-restart values

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Tue Aug 18 12:28:44 UTC 2020


Module: Mesa
Branch: master
Commit: f5cce8929ad61449ec0e43046a9699e19a2df0ce
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=f5cce8929ad61449ec0e43046a9699e19a2df0ce

Author: Erik Faye-Lund <erik.faye-lund at collabora.com>
Date:   Thu Jun 25 12:26:54 2020 +0200

gallium/indices: translate primitive-restart values

This adds a config-option to u_primconvert that translates primitive
restart values to the max-values for the index size. This allows us to
support arbitrary primitive-restart indices on hardware that only
supports fixed restart-indices.

Reviewed-By: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
Reviewed-by: Gert Wollny <gert.wollny at collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5976>

---

 src/gallium/auxiliary/indices/u_primconvert.c | 9 +++++++++
 src/gallium/auxiliary/indices/u_primconvert.h | 1 +
 2 files changed, 10 insertions(+)

diff --git a/src/gallium/auxiliary/indices/u_primconvert.c b/src/gallium/auxiliary/indices/u_primconvert.c
index 5b3c66a838c..d0a1a78e40e 100644
--- a/src/gallium/auxiliary/indices/u_primconvert.c
+++ b/src/gallium/auxiliary/indices/u_primconvert.c
@@ -44,6 +44,7 @@
 #include "util/u_draw.h"
 #include "util/u_inlines.h"
 #include "util/u_memory.h"
+#include "util/u_prim_restart.h"
 #include "util/u_upload_mgr.h"
 
 #include "indices/u_indices.h"
@@ -152,6 +153,14 @@ util_primconvert_draw_vbo(struct primconvert_context *pc,
 
    if (info->index_size) {
       trans_func(src, info->start, info->count, new_info.count, info->restart_index, dst);
+
+      if (pc->cfg.fixed_prim_restart && info->primitive_restart) {
+         new_info.restart_index = (1ull << (new_info.index_size * 8)) - 1;
+         if (info->restart_index != new_info.restart_index)
+            util_translate_prim_restart_data(new_info.index_size, dst, dst,
+                                             new_info.count,
+                                             info->restart_index);
+      }
    }
    else {
       gen_func(info->start, new_info.count, dst);
diff --git a/src/gallium/auxiliary/indices/u_primconvert.h b/src/gallium/auxiliary/indices/u_primconvert.h
index dfec9f975cb..80d25a49313 100644
--- a/src/gallium/auxiliary/indices/u_primconvert.h
+++ b/src/gallium/auxiliary/indices/u_primconvert.h
@@ -33,6 +33,7 @@ struct primconvert_context;
 
 struct primconvert_config {
    uint32_t primtypes_mask;
+   bool fixed_prim_restart;
 };
 
 struct primconvert_context *util_primconvert_create(struct pipe_context *pipe,



More information about the mesa-commit mailing list