/*
* pipe_context
*/
-static struct r600_fence *r600_create_fence(struct r600_pipe_context *ctx)
+static struct r600_fence *r600_create_fence(struct r600_context *rctx)
{
- struct r600_screen *rscreen = ctx->screen;
+ struct r600_screen *rscreen = rctx->screen;
struct r600_fence *fence = NULL;
pipe_mutex_lock(rscreen->fences.mutex);
R600_ERR("r600: failed to create bo for fence objects\n");
goto out;
}
- rscreen->fences.data = ctx->ws->buffer_map(rscreen->fences.bo->buf,
- ctx->ctx.cs,
+ rscreen->fences.data = rctx->ws->buffer_map(rscreen->fences.bo->buf,
+ rctx->cs,
PIPE_TRANSFER_READ_WRITE);
}
pipe_reference_init(&fence->reference, 1);
rscreen->fences.data[fence->index] = 0;
- r600_context_emit_fence(&ctx->ctx, rscreen->fences.bo, fence->index, 1);
+ r600_context_emit_fence(rctx, rscreen->fences.bo, fence->index, 1);
out:
pipe_mutex_unlock(rscreen->fences.mutex);
return fence;
void r600_flush(struct pipe_context *ctx, struct pipe_fence_handle **fence,
unsigned flags)
{
- struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
+ struct r600_context *rctx = (struct r600_context *)ctx;
struct r600_fence **rfence = (struct r600_fence**)fence;
struct pipe_query *render_cond = NULL;
unsigned render_cond_mode = 0;
ctx->render_condition(ctx, NULL, 0);
}
- r600_context_flush(&rctx->ctx, flags);
+ r600_context_flush(rctx, flags);
/* Re-enable render condition. */
if (render_cond) {
static void r600_destroy_context(struct pipe_context *context)
{
- struct r600_pipe_context *rctx = (struct r600_pipe_context *)context;
+ struct r600_context *rctx = (struct r600_context *)context;
rctx->context.delete_depth_stencil_alpha_state(&rctx->context, rctx->custom_dsa_flush);
util_unreference_framebuffer_state(&rctx->framebuffer);
- r600_context_fini(&rctx->ctx);
+ r600_context_fini(rctx);
util_blitter_destroy(rctx->blitter);
static struct pipe_context *r600_create_context(struct pipe_screen *screen, void *priv)
{
- struct r600_pipe_context *rctx = CALLOC_STRUCT(r600_pipe_context);
+ struct r600_context *rctx = CALLOC_STRUCT(r600_context);
struct r600_screen* rscreen = (struct r600_screen *)screen;
if (rctx == NULL)
rctx->context.create_video_decoder = vl_create_decoder;
rctx->context.create_video_buffer = vl_video_buffer_create;
+ r600_init_common_atoms(rctx);
+
switch (rctx->chip_class) {
case R600:
case R700:
r600_init_state_functions(rctx);
- if (r600_context_init(&rctx->ctx, rctx->screen)) {
+ if (r600_context_init(rctx)) {
r600_destroy_context(&rctx->context);
return NULL;
}
case EVERGREEN:
case CAYMAN:
evergreen_init_state_functions(rctx);
- if (evergreen_context_init(&rctx->ctx, rctx->screen)) {
+ if (evergreen_context_init(rctx)) {
r600_destroy_context(&rctx->context);
return NULL;
}
return NULL;
}
- rctx->ctx.pipe = &rctx->context;
- rctx->ctx.flush = r600_flush_from_winsys;
- rctx->ws->cs_set_flush_callback(rctx->ctx.cs, r600_flush_from_winsys, rctx);
+ rctx->ws->cs_set_flush_callback(rctx->cs, r600_flush_from_winsys, rctx);
util_slab_create(&rctx->pool_transfers,
sizeof(struct pipe_transfer), 64,
return NULL;
}
- r600_get_backend_mask(&rctx->ctx); /* this emits commands and must be last */
+ LIST_INITHEAD(&rctx->dirty_states);
+
+ r600_get_backend_mask(rctx); /* this emits commands and must be last */
return &rctx->context;
}
return vl_video_buffer_max_size(screen);
case PIPE_VIDEO_CAP_PREFERED_FORMAT:
return PIPE_FORMAT_NV12;
+ case PIPE_VIDEO_CAP_PREFERS_INTERLACED:
+ return false;
+ case PIPE_VIDEO_CAP_SUPPORTS_INTERLACED:
+ return false;
+ case PIPE_VIDEO_CAP_SUPPORTS_PROGRESSIVE:
+ return true;
default:
return 0;
}