start = vertex_range_start + stride * min_index;
             range = (stride * (max_index - min_index) +
                      vertex_size);
+
+            /**
+             * Unreal Engine 4 has a bug in usage of glDrawRangeElements,
+             * causing it to be called with a number of vertices in place
+             * of "end" parameter (which specifies the maximum array index
+             * contained in indices).
+             *
+             * Since there is unknown amount of games affected and we
+             * could not identify that a game is built with UE4 - we are
+             * forced to make a blanket workaround, disregarding max_index
+             * in range calculations. Fortunately all such calls look like:
+             *   glDrawRangeElements(GL_TRIANGLES, 0, 3, 3, ...);
+             * So we are able to narrow down this workaround.
+             *
+             * See: https://gitlab.freedesktop.org/mesa/mesa/-/issues/2917
+             */
+            if (unlikely(max_index == 3 && min_index == 0 &&
+                         brw->draw.derived_params.is_indexed_draw)) {
+                  range = intel_buffer->Base.Size - offset - start;
+            }
          }
       }