This will be used by common code in the next commit.
Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
/* Check if mapping this buffer would cause waiting for the GPU. */
if (r600_rings_is_buffer_referenced(&rctx->b, rbuffer->cs_buf, RADEON_USAGE_READWRITE) ||
rctx->b.ws->buffer_is_busy(rbuffer->buf, RADEON_USAGE_READWRITE)) {
- r600_invalidate_buffer(&rctx->b.b, &rbuffer->b.b);
+ rctx->b.invalidate_buffer(&rctx->b.b, &rbuffer->b.b);
}
}
else if ((usage & PIPE_TRANSFER_DISCARD_RANGE) &&
uint32_t r600_translate_texformat(struct pipe_screen *screen, enum pipe_format format,
const unsigned char *swizzle_view,
uint32_t *word4_p, uint32_t *yuv_format_p);
-void r600_invalidate_buffer(struct pipe_context *ctx, struct pipe_resource *buf);
/* r600_uvd.c */
struct pipe_video_codec *r600_uvd_create_decoder(struct pipe_context *context,
return ~0;
}
-void r600_invalidate_buffer(struct pipe_context *ctx, struct pipe_resource *buf)
+static void r600_invalidate_buffer(struct pipe_context *ctx, struct pipe_resource *buf)
{
struct r600_context *rctx = (struct r600_context*)ctx;
struct r600_resource *rbuffer = r600_resource(buf);
rctx->b.b.create_surface = r600_create_surface;
rctx->b.b.surface_destroy = r600_surface_destroy;
rctx->b.b.draw_vbo = r600_draw_vbo;
+ rctx->b.invalidate_buffer = r600_invalidate_buffer;
}
void r600_trace_emit(struct r600_context *rctx)
unsigned first_level, unsigned last_level,
unsigned first_layer, unsigned last_layer,
unsigned first_sample, unsigned last_sample);
+
+ /* Reallocate the buffer and update all resource bindings where
+ * the buffer is bound, including all resource descriptors. */
+ void (*invalidate_buffer)(struct pipe_context *ctx, struct pipe_resource *buf);
};
/* r600_buffer.c */
/* Check if mapping this buffer would cause waiting for the GPU. */
if (r600_rings_is_buffer_referenced(&rctx->b, rbuffer->cs_buf, RADEON_USAGE_READWRITE) ||
rctx->b.ws->buffer_is_busy(rbuffer->buf, RADEON_USAGE_READWRITE)) {
- si_invalidate_buffer(&rctx->b.b, &rbuffer->b.b);
+ rctx->b.invalidate_buffer(&rctx->b.b, &rbuffer->b.b);
}
}
* idle by discarding its contents. Apps usually tell us when to do this using
* map_buffer flags, for example.
*/
-void si_invalidate_buffer(struct pipe_context *ctx, struct pipe_resource *buf)
+static void si_invalidate_buffer(struct pipe_context *ctx, struct pipe_resource *buf)
{
struct r600_context *rctx = (struct r600_context*)ctx;
struct r600_resource *rbuffer = r600_resource(buf);
rctx->b.b.set_constant_buffer = si_set_constant_buffer;
rctx->b.b.set_stream_output_targets = si_set_streamout_targets;
rctx->b.clear_buffer = si_clear_buffer;
+ rctx->b.invalidate_buffer = si_invalidate_buffer;
}
void si_release_all_descriptors(struct r600_context *rctx)
void si_copy_buffer(struct r600_context *rctx,
struct pipe_resource *dst, struct pipe_resource *src,
uint64_t dst_offset, uint64_t src_offset, unsigned size);
-void si_invalidate_buffer(struct pipe_context *ctx, struct pipe_resource *buf);
/* si_state.c */
struct si_pipe_shader_selector;