From: Maarten Lankhorst Date: Wed, 26 Jun 2013 14:18:42 +0000 (+0200) Subject: nvc0: fix push_space checks for video decoding X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=30c2c344648481c0abe550ee43731263f735e29d;p=mesa.git nvc0: fix push_space checks for video decoding --- diff --git a/src/gallium/drivers/nvc0/nvc0_video.c b/src/gallium/drivers/nvc0/nvc0_video.c index cf61804bd0f..ad40b9456f6 100644 --- a/src/gallium/drivers/nvc0/nvc0_video.c +++ b/src/gallium/drivers/nvc0/nvc0_video.c @@ -450,7 +450,7 @@ nvc0_create_decoder(struct pipe_context *context, dec->comm = (struct comm *)(dec->fence_map + (COMM_OFFSET/sizeof(*dec->fence_map))); /* So lets test if the fence is working? */ - PUSH_SPACE(push[0], 6); + nouveau_pushbuf_space(push[0], 6, 1, 0); PUSH_REFN (push[0], dec->fence_bo, NOUVEAU_BO_GART|NOUVEAU_BO_RDWR); BEGIN_NVC0(push[0], SUBC_BSP(0x240), 3); PUSH_DATAh(push[0], dec->fence_bo->offset); @@ -461,7 +461,7 @@ nvc0_create_decoder(struct pipe_context *context, PUSH_DATA (push[0], 0); PUSH_KICK (push[0]); - PUSH_SPACE(push[1], 6); + nouveau_pushbuf_space(push[1], 6, 1, 0); PUSH_REFN (push[1], dec->fence_bo, NOUVEAU_BO_GART|NOUVEAU_BO_RDWR); BEGIN_NVC0(push[1], SUBC_VP(0x240), 3); PUSH_DATAh(push[1], (dec->fence_bo->offset + 0x10)); @@ -472,7 +472,7 @@ nvc0_create_decoder(struct pipe_context *context, PUSH_DATA (push[1], 0); PUSH_KICK (push[1]); - PUSH_SPACE(push[2], 6); + nouveau_pushbuf_space(push[2], 6, 1, 0); PUSH_REFN (push[2], dec->fence_bo, NOUVEAU_BO_GART|NOUVEAU_BO_RDWR); BEGIN_NVC0(push[2], SUBC_PPP(0x240), 3); PUSH_DATAh(push[2], (dec->fence_bo->offset + 0x20)); diff --git a/src/gallium/drivers/nvc0/nvc0_video_bsp.c b/src/gallium/drivers/nvc0/nvc0_video_bsp.c index 09e78aa5059..450dc2bb528 100644 --- a/src/gallium/drivers/nvc0/nvc0_video_bsp.c +++ b/src/gallium/drivers/nvc0/nvc0_video_bsp.c @@ -268,6 +268,9 @@ nvc0_decoder_bsp(struct nvc0_decoder *dec, union pipe_desc desc, }; int num_refs = sizeof(bo_refs)/sizeof(*bo_refs); + if (!dec->bitplane_bo) + num_refs--; + #ifdef NVC0_DEBUG_FENCE fence_extra = 4; #endif @@ -309,9 +312,7 @@ nvc0_decoder_bsp(struct nvc0_decoder *dec, union pipe_desc desc, nvc0_decoder_vp_caps(dec, desc, target, comm_seq, vp_caps, is_ref, refs); - PUSH_SPACE(push, 6 + (codec == PIPE_VIDEO_CODEC_MPEG4_AVC ? 9 : 7) + fence_extra + 2); - if (!dec->bitplane_bo) - num_refs--; + nouveau_pushbuf_space(push, 6 + (codec == PIPE_VIDEO_CODEC_MPEG4_AVC ? 9 : 7) + fence_extra + 2, num_refs, 0); nouveau_pushbuf_refn(push, bo_refs, num_refs); caps |= 0 << 16; // reset struct comm if flag is set diff --git a/src/gallium/drivers/nvc0/nvc0_video_ppp.c b/src/gallium/drivers/nvc0/nvc0_video_ppp.c index 4eb5932e051..efa25270e8d 100644 --- a/src/gallium/drivers/nvc0/nvc0_video_ppp.c +++ b/src/gallium/drivers/nvc0/nvc0_video_ppp.c @@ -99,7 +99,7 @@ nvc0_decoder_ppp(struct nvc0_decoder *dec, union pipe_desc desc, struct nvc0_vid fence_extra = 4; #endif - PUSH_SPACE(push, 11 + (codec == PIPE_VIDEO_CODEC_VC1 ? 2 : 0) + 3 + fence_extra + 2); + nouveau_pushbuf_space(push, 11 + (codec == PIPE_VIDEO_CODEC_VC1 ? 2 : 0) + 3 + fence_extra + 2, 4, 0); switch (codec) { case PIPE_VIDEO_CODEC_MPEG12: { diff --git a/src/gallium/drivers/nvc0/nvc0_video_vp.c b/src/gallium/drivers/nvc0/nvc0_video_vp.c index eab544da2d3..1ecdd2d91f0 100644 --- a/src/gallium/drivers/nvc0/nvc0_video_vp.c +++ b/src/gallium/drivers/nvc0/nvc0_video_vp.c @@ -580,8 +580,8 @@ nvc0_decoder_vp(struct nvc0_decoder *dec, union pipe_desc desc, if (!is_ref) nvc0_decoder_kick_ref(dec, target); - PUSH_SPACE(push, 8 + 3 * (codec != PIPE_VIDEO_CODEC_MPEG12) + - 6 + codec_extra + fence_extra + 2); + nouveau_pushbuf_space(push, 8 + 3 * (codec != PIPE_VIDEO_CODEC_MPEG12) + + 6 + codec_extra + fence_extra + 2, num_refs, 0); nouveau_pushbuf_refn(push, bo_refs, num_refs);