- dst = pipe_buffer_create( pipe->screen,
- PIPE_BIND_INDEX_BUFFER,
- size );
- if (dst == NULL)
+ assert(index_size == 2 || index_size == 4);
+
+ if (!screen->debug.no_cache_index_buffers) {
+ /* Check if we already have a translated index buffer */
+ if (src_sbuf->translated_indices.buffer &&
+ src_sbuf->translated_indices.orig_prim == orig_prim &&
+ src_sbuf->translated_indices.new_prim == gen_prim &&
+ src_sbuf->translated_indices.offset == offset &&
+ src_sbuf->translated_indices.count == orig_nr &&
+ src_sbuf->translated_indices.index_size == index_size) {
+ pipe_resource_reference(out_buf, src_sbuf->translated_indices.buffer);
+ return PIPE_OK;
+ }
+ }
+
+ /* Need to trim vertex count to make sure we don't write too much data
+ * to the dst buffer in the translate() call.
+ */
+ u_trim_pipe_prim(gen_prim, &gen_nr);
+
+ size = index_size * gen_nr;
+
+ dst = pipe_buffer_create(pipe->screen,
+ PIPE_BIND_INDEX_BUFFER, PIPE_USAGE_DEFAULT, size);
+ if (!dst)