radeon/vcn: add VP9 context buffer
authorLeo Liu <leo.liu@amd.com>
Wed, 14 Mar 2018 19:09:07 +0000 (15:09 -0400)
committerLeo Liu <leo.liu@amd.com>
Thu, 12 Apr 2018 15:15:13 +0000 (11:15 -0400)
Signed-off-by: Leo Liu <leo.liu@amd.com>
Acked-by: Christian König <christian.koenig@amd.com>
src/gallium/drivers/radeon/radeon_vcn_dec.c

index 170cc3fa41ed8c63c55ddc8ffa1ee269c9582a17..b4cfba1713ca65721759ece31b1f541d7e81220c 100644 (file)
@@ -936,6 +936,32 @@ static struct pb_buffer *rvcn_dec_message_decode(struct radeon_decoder *dec,
 
                memcpy(codec, (void*)&vp9, sizeof(rvcn_dec_message_vp9_t));
                index->message_id = RDECODE_MESSAGE_VP9;
+
+               if (dec->ctx.res == NULL) {
+                       unsigned ctx_size;
+                       uint8_t *ptr;
+
+                       /* default probability + probability data */
+                       ctx_size = 2304 * 5;
+
+                       /* SRE collocated context data */
+                       ctx_size += 32 * 2 * 64 * 64;
+
+                       /* SMP collocated context data */
+                       ctx_size += 9 * 64 * 2 * 64 * 64;
+
+                       /* SDB left tile pixel */
+                       ctx_size += 8 * 2 * 4096;
+
+                       if (!si_vid_create_buffer(dec->screen, &dec->ctx, ctx_size, PIPE_USAGE_DEFAULT))
+                               RVID_ERR("Can't allocated context buffer.\n");
+                       si_vid_clear_buffer(dec->base.context, &dec->ctx);
+
+                       /* ctx needs probs table */
+                       ptr = dec->ws->buffer_map(dec->ctx.res->buf, dec->cs, PIPE_TRANSFER_WRITE);
+                       fill_probs_table(ptr);
+                       dec->ws->buffer_unmap(dec->ctx.res->buf);
+               }
                break;
        }
        default: