On 17 December 2015 at 04:16, Ilia Mirkin <imir...@alum.mit.edu> wrote:
> Is there any guarantee that bsp_next is called a number of times equal > to the number of slices? Seems like it's just for appending on more > data, which may or may not be equal to the number of slices... Why is > the value in the descriptor wrong? > You are entirely right, it is actually a problem in st/va which does not set slice_count at all. It should use num_elements from the slice param. So I'll drop this patch and submit another one because it will look completely different. Thx for the reviews ! > > On Wed, Dec 16, 2015 at 9:40 AM, Julien Isorce <j.iso...@samsung.com> > wrote: > > https://bugs.freedesktop.org/show_bug.cgi?id=89969 > > > > Signed-off-by: Julien Isorce <j.iso...@samsung.com> > > --- > > src/gallium/drivers/nouveau/nouveau_vp3_video.h | 3 +++ > > src/gallium/drivers/nouveau/nouveau_vp3_video_bsp.c | 17 > +++++++++++++++-- > > 2 files changed, 18 insertions(+), 2 deletions(-) > > > > diff --git a/src/gallium/drivers/nouveau/nouveau_vp3_video.h > b/src/gallium/drivers/nouveau/nouveau_vp3_video.h > > index 1e10693..a826532 100644 > > --- a/src/gallium/drivers/nouveau/nouveau_vp3_video.h > > +++ b/src/gallium/drivers/nouveau/nouveau_vp3_video.h > > @@ -121,6 +121,9 @@ struct nouveau_vp3_decoder { > > > > /* Total data appended so far after last begin frame. */ > > unsigned bsp_size; > > + > > + /* Number of slices so far since last begin frame */ > > + unsigned int nb_slices; > > }; > > > > struct comm { > > diff --git a/src/gallium/drivers/nouveau/nouveau_vp3_video_bsp.c > b/src/gallium/drivers/nouveau/nouveau_vp3_video_bsp.c > > index aab8e25..7a1dc8c 100644 > > --- a/src/gallium/drivers/nouveau/nouveau_vp3_video_bsp.c > > +++ b/src/gallium/drivers/nouveau/nouveau_vp3_video_bsp.c > > @@ -128,6 +128,8 @@ nouveau_vp3_fill_picparm_mpeg12_bsp(struct > nouveau_vp3_decoder *dec, > > for (i = 0; i < 4; ++i) > > pic_bsp->f_code[i/2][i%2] = desc->f_code[i/2][i%2] + 1; // FU > > > > + desc->num_slices = dec->nb_slices; > > + > > return (desc->num_slices << 4) | (dec->base.profile != > PIPE_VIDEO_PROFILE_MPEG1); > > } > > > > @@ -162,7 +164,11 @@ nouveau_vp3_fill_picparm_vc1_bsp(struct > nouveau_vp3_decoder *dec, > > char *map) > > { > > struct vc1_picparm_bsp *vc = (struct vc1_picparm_bsp *)map; > > - uint32_t caps = (d->slice_count << 4)&0xfff0; > > + uint32_t caps = 0; > > + > > + d->slice_count = dec->nb_slices; > > + caps = (d->slice_count << 4)&0xfff0; > > + > > vc->width = dec->base.width; > > vc->height = dec->base.height; > > vc->profile = dec->base.profile - PIPE_VIDEO_PROFILE_VC1_SIMPLE; // > 04 > > @@ -194,9 +200,12 @@ nouveau_vp3_fill_picparm_h264_bsp(struct > nouveau_vp3_decoder *dec, > > char *map) > > { > > struct h264_picparm_bsp stub_h = {}, *h = &stub_h; > > - uint32_t caps = (d->slice_count << 4)&0xfff0; > > + uint32_t caps = 0; > > + > > + d->slice_count = dec->nb_slices; > > > > assert(!(d->slice_count & ~0xfff)); > > + caps = (d->slice_count << 4)&0xfff0; > > if (d->slice_count & 0x1000) > > caps |= 1 << 20; > > > > @@ -239,6 +248,7 @@ nouveau_vp3_bsp_begin(struct nouveau_vp3_decoder > *dec) > > > > dec->bsp_ptr = bsp_bo->map; > > dec->bsp_size = NOUVEAU_VP3_BSP_RESERVED_SIZE; > > + dec->nb_slices = 0; > > > > dec->bsp_ptr += 0x100; > > > > @@ -266,6 +276,8 @@ nouveau_vp3_bsp_next(struct nouveau_vp3_decoder > *dec, unsigned num_buffers, > > struct strparm_bsp *str_bsp = NULL; > > int i = 0; > > > > + ++dec->nb_slices; > > + > > bsp_origin += 0x100; > > str_bsp = (struct strparm_bsp *)bsp_origin; > > > > @@ -331,6 +343,7 @@ nouveau_vp3_bsp_end(struct nouveau_vp3_decoder *dec, > union pipe_desc desc) > > > > dec->bsp_ptr = NULL; > > dec->bsp_size = 0; > > + dec->nb_slices = 0; > > > > return caps; > > } > > -- > > 1.9.1 > > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/mesa-dev >
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev