[Mesa-dev] [PATCH 08/10] gallium/vl: use the common uploader
Christian König
deathsimple at vodafone.de
Fri Jan 27 12:05:48 UTC 2017
Reviewed-by: Christian König <christian.koenig at amd.com>.
Am 27.01.2017 um 12:02 schrieb Marek Olšák:
> From: Marek Olšák <marek.olsak at amd.com>
>
> ---
> src/gallium/auxiliary/vl/vl_compositor.c | 14 ++------------
> src/gallium/auxiliary/vl/vl_compositor.h | 1 -
> src/gallium/state_trackers/va/context.c | 4 ----
> 3 files changed, 2 insertions(+), 17 deletions(-)
>
> diff --git a/src/gallium/auxiliary/vl/vl_compositor.c b/src/gallium/auxiliary/vl/vl_compositor.c
> index 1efcb75..f98b185 100644
> --- a/src/gallium/auxiliary/vl/vl_compositor.c
> +++ b/src/gallium/auxiliary/vl/vl_compositor.c
> @@ -775,21 +775,21 @@ calc_drawn_area(struct vl_compositor_state *s, struct vl_compositor_layer *layer
>
> static void
> gen_vertex_data(struct vl_compositor *c, struct vl_compositor_state *s, struct u_rect *dirty)
> {
> struct vertex2f *vb;
> unsigned i;
>
> assert(c);
>
> /* Allocate new memory for vertices. */
> - u_upload_alloc(c->upload, 0,
> + u_upload_alloc(c->pipe->stream_uploader, 0,
> c->vertex_buf.stride * VL_COMPOSITOR_MAX_LAYERS * 4, /* size */
> 4, /* alignment */
> &c->vertex_buf.buffer_offset, &c->vertex_buf.buffer,
> (void**)&vb);
>
> for (i = 0; i < VL_COMPOSITOR_MAX_LAYERS; i++) {
> if (s->used_layers & (1 << i)) {
> struct vl_compositor_layer *layer = &s->layers[i];
> gen_rect_verts(vb, layer);
> vb += 20;
> @@ -810,21 +810,21 @@ gen_vertex_data(struct vl_compositor *c, struct vl_compositor_state *s, struct u
> dirty->y1 <= drawn.y1) {
>
> // We clear the dirty area anyway, no need for clear_render_target
> dirty->x0 = dirty->y0 = MAX_DIRTY;
> dirty->x1 = dirty->y1 = MIN_DIRTY;
> }
> }
> }
> }
>
> - u_upload_unmap(c->upload);
> + u_upload_unmap(c->pipe->stream_uploader);
> }
>
> static void
> draw_layers(struct vl_compositor *c, struct vl_compositor_state *s, struct u_rect *dirty)
> {
> unsigned vb_index, i;
>
> assert(c);
>
> for (i = 0, vb_index = 0; i < VL_COMPOSITOR_MAX_LAYERS; ++i) {
> @@ -906,21 +906,20 @@ vl_compositor_clear_layers(struct vl_compositor_state *s)
> for ( j = 0; j < 4; ++j)
> s->layers[i].colors[j] = v_one;
> }
> }
>
> void
> vl_compositor_cleanup(struct vl_compositor *c)
> {
> assert(c);
>
> - u_upload_destroy(c->upload);
> cleanup_buffers(c);
> cleanup_shaders(c);
> cleanup_pipe_state(c);
> }
>
> bool
> vl_compositor_set_csc_matrix(struct vl_compositor_state *s,
> vl_csc_matrix const *matrix,
> float luma_min, float luma_max)
> {
> @@ -1190,39 +1189,30 @@ vl_compositor_render(struct vl_compositor_state *s,
>
> bool
> vl_compositor_init(struct vl_compositor *c, struct pipe_context *pipe)
> {
> assert(c);
>
> memset(c, 0, sizeof(*c));
>
> c->pipe = pipe;
>
> - c->upload = u_upload_create(pipe, 128 * 1024, PIPE_BIND_VERTEX_BUFFER,
> - PIPE_USAGE_STREAM);
> -
> - if (!c->upload)
> - return false;
> -
> if (!init_pipe_state(c)) {
> - u_upload_destroy(c->upload);
> return false;
> }
>
> if (!init_shaders(c)) {
> - u_upload_destroy(c->upload);
> cleanup_pipe_state(c);
> return false;
> }
>
> if (!init_buffers(c)) {
> - u_upload_destroy(c->upload);
> cleanup_shaders(c);
> cleanup_pipe_state(c);
> return false;
> }
>
> return true;
> }
>
> bool
> vl_compositor_init_state(struct vl_compositor_state *s, struct pipe_context *pipe)
> diff --git a/src/gallium/auxiliary/vl/vl_compositor.h b/src/gallium/auxiliary/vl/vl_compositor.h
> index 5460619..535abb7 100644
> --- a/src/gallium/auxiliary/vl/vl_compositor.h
> +++ b/src/gallium/auxiliary/vl/vl_compositor.h
> @@ -92,21 +92,20 @@ struct vl_compositor_state
>
> union pipe_color_union clear_color;
>
> unsigned used_layers:VL_COMPOSITOR_MAX_LAYERS;
> struct vl_compositor_layer layers[VL_COMPOSITOR_MAX_LAYERS];
> };
>
> struct vl_compositor
> {
> struct pipe_context *pipe;
> - struct u_upload_mgr *upload;
>
> struct pipe_framebuffer_state fb_state;
> struct pipe_vertex_buffer vertex_buf;
>
> void *sampler_linear;
> void *sampler_nearest;
> void *blend_clear, *blend_add;
> void *rast;
> void *dsa;
> void *vertex_elems_state;
> diff --git a/src/gallium/state_trackers/va/context.c b/src/gallium/state_trackers/va/context.c
> index 357c9be..d749e65 100644
> --- a/src/gallium/state_trackers/va/context.c
> +++ b/src/gallium/state_trackers/va/context.c
> @@ -223,24 +223,20 @@ vlVaCreateContext(VADriverContextP ctx, VAConfigID config_id, int picture_width,
>
> if (!(picture_width && picture_height) && !is_vpp)
> return VA_STATUS_ERROR_INVALID_IMAGE_FORMAT;
>
> context = CALLOC(1, sizeof(vlVaContext));
> if (!context)
> return VA_STATUS_ERROR_ALLOCATION_FAILED;
>
> if (is_vpp) {
> context->decoder = NULL;
> - if (!drv->compositor.upload) {
> - FREE(context);
> - return VA_STATUS_ERROR_INVALID_CONTEXT;
> - }
> } else {
> context->templat.profile = config->profile;
> context->templat.entrypoint = config->entrypoint;
> context->templat.chroma_format = PIPE_VIDEO_CHROMA_FORMAT_420;
> context->templat.width = picture_width;
> context->templat.height = picture_height;
> context->templat.expect_chunked_decode = true;
>
> switch (u_reduce_video_profile(context->templat.profile)) {
> case PIPE_VIDEO_FORMAT_MPEG12:
More information about the mesa-dev
mailing list