static void blitter_restore_CSOs(struct blitter_context_priv *ctx)
{
struct pipe_context *pipe = ctx->pipe;
+ unsigned i;
/* restore the state objects which are always required to be saved */
pipe->bind_blend_state(pipe, ctx->blitter.saved_blend_state);
pipe->set_vertex_buffers(pipe,
ctx->blitter.saved_num_vertex_buffers,
ctx->blitter.saved_vertex_buffers);
+
+ for (i = 0; i < ctx->blitter.saved_num_vertex_buffers; i++) {
+ if (ctx->blitter.saved_vertex_buffers[i].buffer) {
+ pipe_resource_reference(&ctx->blitter.saved_vertex_buffers[i].buffer,
+ NULL);
+ }
+ }
ctx->blitter.saved_num_vertex_buffers = ~0;
}
}
#ifndef U_BLITTER_H
#define U_BLITTER_H
+#include "util/u_inlines.h"
#include "util/u_memory.h"
#include "pipe/p_state.h"
int num_vertex_buffers,
struct pipe_vertex_buffer *vertex_buffers)
{
+ unsigned i;
assert(num_vertex_buffers <= Elements(blitter->saved_vertex_buffers));
blitter->saved_num_vertex_buffers = num_vertex_buffers;
+
+ for (i = 0; i < num_vertex_buffers; i++) {
+ if (vertex_buffers[i].buffer) {
+ pipe_resource_reference(&blitter->saved_vertex_buffers[i].buffer,
+ vertex_buffers[i].buffer);
+ }
+ }
+
memcpy(blitter->saved_vertex_buffers,
vertex_buffers,
num_vertex_buffers * sizeof(struct pipe_vertex_buffer));