gallium/swr: Fix min/max range index draw
authorKrzysztof Raszkowski <krzysztof.raszkowski@intel.com>
Fri, 21 Feb 2020 13:05:33 +0000 (14:05 +0100)
committerKrzysztof Raszkowski <krzysztof.raszkowski@intel.com>
Mon, 24 Feb 2020 10:27:23 +0000 (10:27 +0000)
Reviewed-by: Jan Zielinski <jan.zielinski@intel.com>
Tested-by: Marge Bot <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3905>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3905>

src/gallium/auxiliary/util/u_vbuf.h
src/gallium/drivers/swr/swr_state.cpp

index 8167d997ab82872ea81eba8c8fd3945053715aae..b364e06344a55f4324e10a579535983bbb94a230 100644 (file)
 #ifndef U_VBUF_H
 #define U_VBUF_H
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 /* This module takes care of user buffer uploads and vertex format fallbacks.
  * It's designed for the drivers which don't want to use the Draw module.
  * There is a more detailed description at the beginning of the .c file.
@@ -86,4 +90,9 @@ void u_vbuf_restore_vertex_elements(struct u_vbuf *mgr);
 void u_vbuf_save_vertex_buffer0(struct u_vbuf *mgr);
 void u_vbuf_restore_vertex_buffer0(struct u_vbuf *mgr);
 
+
+#ifdef __cplusplus
+}
+#endif
+
 #endif
index 625f0050ad59b0951a8c4337686c94fdaf2e3778..2967dd233cd09463847cd0dc11f3679f4c651488 100644 (file)
@@ -51,6 +51,7 @@
 #include "util/u_framebuffer.h"
 #include "util/u_viewport.h"
 #include "util/u_prim.h"
+#include "util/u_vbuf.h"
 
 #include "swr_state.h"
 #include "swr_context.h"
@@ -1399,8 +1400,12 @@ swr_update_derived(struct pipe_context *pipe,
 
    /* Set vertex & index buffers */
    if (ctx->dirty & SWR_NEW_VERTEX) {
-      const struct pipe_draw_info &info = *p_draw_info;
-
+      struct pipe_draw_info info = *p_draw_info;
+      /* SWR always need min/max index info for index draw,
+      *  compute it if upper layer does not do for us */
+      if (info.index_size > 0 && info.max_index == ~0u) {
+         u_vbuf_get_minmax_index(pipe, &info, &(info.min_index), &(info.max_index));
+      }
       /* vertex buffers */
       SWR_VERTEX_BUFFER_STATE swrVertexBuffers[PIPE_MAX_ATTRIBS];
       for (UINT i = 0; i < ctx->num_vertex_buffers; i++) {