nvc0: move nvc0_decoder into nouveau, rename to nouveau_vp3_decoder
authorIlia Mirkin <imirkin@alum.mit.edu>
Sat, 10 Aug 2013 19:42:19 +0000 (15:42 -0400)
committerMaarten Lankhorst <maarten.lankhorst@canonical.com>
Thu, 15 Aug 2013 13:19:47 +0000 (15:19 +0200)
Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
src/gallium/drivers/nouveau/nouveau_vp3_video.h
src/gallium/drivers/nvc0/nvc0_video.c
src/gallium/drivers/nvc0/nvc0_video.h
src/gallium/drivers/nvc0/nvc0_video_bsp.c
src/gallium/drivers/nvc0/nvc0_video_ppp.c
src/gallium/drivers/nvc0/nvc0_video_vp.c

index bff5d76be4bb54567896378f67524338092e2e22..7322138623a46f44b61c7739d0f8d2f3f4435b3f 100644 (file)
  */
 
 #include "pipe/p_defines.h"
+
 #include "vl/vl_video_buffer.h"
 
+#include "util/u_video.h"
+
 struct nouveau_vp3_video_buffer {
    struct pipe_video_buffer base;
    unsigned num_planes, valid_ref;
@@ -32,6 +35,163 @@ struct nouveau_vp3_video_buffer {
    struct pipe_surface *surfaces[VL_NUM_COMPONENTS * 2];
 };
 
+#define SLICE_SIZE 0x200
+#define VP_OFFSET 0x200
+#define COMM_OFFSET 0x500
+
+#define NOUVEAU_VP3_DEBUG_FENCE 0
+
+#if NOUVEAU_VP3_DEBUG_FENCE
+# define NOUVEAU_VP3_VIDEO_QDEPTH 1
+#else
+# define NOUVEAU_VP3_VIDEO_QDEPTH 2
+#endif
+
+#define SUBC_BSP(m) dec->bsp_idx, (m)
+#define SUBC_VP(m) dec->vp_idx, (m)
+#define SUBC_PPP(m) dec->ppp_idx, (m)
+
+union pipe_desc {
+   struct pipe_picture_desc *base;
+   struct pipe_mpeg12_picture_desc *mpeg12;
+   struct pipe_mpeg4_picture_desc *mpeg4;
+   struct pipe_vc1_picture_desc *vc1;
+   struct pipe_h264_picture_desc *h264;
+};
+
+struct nouveau_vp3_decoder {
+   struct pipe_video_decoder base;
+   struct nouveau_client *client;
+   struct nouveau_object *channel[3], *bsp, *vp, *ppp;
+   struct nouveau_pushbuf *pushbuf[3];
+
+#if NOUVEAU_VP3_DEBUG_FENCE
+   /* dump fence and comm, as needed.. */
+   unsigned *fence_map;
+   struct comm *comm;
+
+   struct nouveau_bo *fence_bo;
+#endif
+
+   struct nouveau_bo *fw_bo, *bitplane_bo;
+
+   // array size max_references + 2, contains unpostprocessed images
+   // added at the end of ref_bo is a tmp array
+   // tmp is an array for h264, with each member being used for a ref frame or current
+   // target.. size = (((mb(w)*((mb(h)+1)&~1))+3)>>2)<<8 * (max_references+1)
+   // for other codecs, it simply seems that size = w*h is enough
+   // unsure what it's supposed to contain..
+   struct nouveau_bo *ref_bo;
+
+   struct nouveau_bo *inter_bo[2];
+
+   struct nouveau_bo *bsp_bo[NOUVEAU_VP3_VIDEO_QDEPTH];
+
+   // bo's used by each cycle:
+
+   // bsp_bo: contains raw bitstream data and parameters for BSP and VP.
+   // inter_bo: contains data shared between BSP and VP
+   // ref_bo: reference image data, used by PPP and VP
+   // bitplane_bo: contain bitplane data (similar to ref_bo), used by BSP only
+   // fw_bo: used by VP only.
+
+   // Needed amount of copies in optimal case:
+   // 2 copies of inter_bo, VP would process the last inter_bo, while BSP is
+   // writing out a new set.
+   // NOUVEAU_VP3_VIDEO_QDEPTH copies of bsp_bo. We don't want to block the
+   // pipeline ever, and give shaders a chance to run as well.
+
+   struct {
+      struct nouveau_vp3_video_buffer *vidbuf;
+      unsigned last_used;
+      unsigned field_pic_flag : 1;
+      unsigned decoded_top : 1;
+      unsigned decoded_bottom : 1;
+   } refs[17];
+   unsigned fence_seq, fw_sizes, last_frame_num, tmp_stride, ref_stride;
+
+   unsigned bsp_idx, vp_idx, ppp_idx;
+};
+
+struct comm {
+       uint32_t bsp_cur_index; // 000
+       uint32_t byte_ofs; // 004
+       uint32_t status[0x10]; // 008
+       uint32_t pos[0x10]; // 048
+       uint8_t pad[0x100 - 0x88]; // 0a0 bool comm_encrypted
+
+       uint32_t pvp_cur_index; // 100
+       uint32_t acked_byte_ofs; // 104
+       uint32_t status_vp[0x10]; // 108
+       uint16_t mb_y[0x10]; //148
+       uint32_t pvp_stage; // 168 0xeeXX
+       uint16_t parse_endpos_index; // 16c
+       uint16_t irq_index; // 16e
+       uint8_t  irq_470[0x10]; // 170
+       uint32_t irq_pos[0x10]; // 180
+       uint32_t parse_endpos[0x10]; // 1c0
+};
+
+static INLINE uint32_t nouveau_vp3_video_align(uint32_t h)
+{
+   return ((h+0x3f)&~0x3f);
+};
+
+static INLINE uint32_t mb(uint32_t coord)
+{
+   return (coord + 0xf)>>4;
+}
+
+static INLINE uint32_t mb_half(uint32_t coord)
+{
+   return (coord + 0x1f)>>5;
+}
+
+static INLINE uint64_t
+nouveau_vp3_video_addr(struct nouveau_vp3_decoder *dec, struct nouveau_vp3_video_buffer *target)
+{
+   uint64_t ret;
+   if (target)
+      ret = dec->ref_stride * target->valid_ref;
+   else
+      ret = dec->ref_stride * (dec->base.max_references+1);
+   return dec->ref_bo->offset + ret;
+}
+
+static INLINE void
+nouveau_vp3_ycbcr_offsets(struct nouveau_vp3_decoder *dec, uint32_t *y2,
+                          uint32_t *cbcr, uint32_t *cbcr2)
+{
+   uint32_t w = mb(dec->base.width), size;
+   *y2 = mb_half(dec->base.height)*w;
+   *cbcr = *y2 * 2;
+   *cbcr2 = *cbcr + w * (nouveau_vp3_video_align(dec->base.height)>>6);
+
+   /* The check here should never fail because it means a bug
+    * in the code rather than a bug in hardware..
+    */
+   size = (2 * (*cbcr2 - *cbcr) + *cbcr) << 8;
+   if (size > dec->ref_stride) {
+      debug_printf("Overshot ref_stride (%u) with size %u and ofs (%u,%u,%u)\n",
+                   dec->ref_stride, size, *y2<<8, *cbcr<<8, *cbcr2<<8);
+      *y2 = *cbcr = *cbcr2 = 0;
+      assert(size <= dec->ref_stride);
+   }
+}
+
+static INLINE void
+nouveau_vp3_inter_sizes(struct nouveau_vp3_decoder *dec, uint32_t slice_count,
+                        uint32_t *slice_size, uint32_t *bucket_size,
+                        uint32_t *ring_size)
+{
+   *slice_size = (SLICE_SIZE * slice_count)>>8;
+   if (u_reduce_video_profile(dec->base.profile) == PIPE_VIDEO_CODEC_MPEG12)
+      *bucket_size = 0;
+   else
+      *bucket_size = mb(dec->base.width) * 3;
+   *ring_size = (dec->inter_bo[0]->size >> 8) - *bucket_size - *slice_size;
+}
+
 struct pipe_video_buffer *
 nouveau_vp3_video_buffer_create(struct pipe_context *pipe,
                                 const struct pipe_video_buffer *templat,
index 58eb39f0aca13232ca7be7a248b4591d9c75637e..97fd24f56195e53cc36906bd8aa5c62555e89878 100644 (file)
@@ -87,7 +87,7 @@ nvc0_decoder_decode_bitstream(struct pipe_video_decoder *decoder,
                               const void *const *data,
                               const unsigned *num_bytes)
 {
-   struct nvc0_decoder *dec = (struct nvc0_decoder *)decoder;
+   struct nouveau_vp3_decoder *dec = (struct nouveau_vp3_decoder *)decoder;
    struct nouveau_vp3_video_buffer *target = (struct nouveau_vp3_video_buffer *)video_target;
    uint32_t comm_seq = ++dec->fence_seq;
    union pipe_desc desc;
@@ -113,7 +113,7 @@ nvc0_decoder_decode_bitstream(struct pipe_video_decoder *decoder,
 static void
 nvc0_decoder_flush(struct pipe_video_decoder *decoder)
 {
-   struct nvc0_decoder *dec = (struct nvc0_decoder *)decoder;
+   struct nouveau_vp3_decoder *dec = (struct nouveau_vp3_decoder *)decoder;
    (void)dec;
 }
 
@@ -134,19 +134,19 @@ nvc0_decoder_end_frame(struct pipe_video_decoder *decoder,
 static void
 nvc0_decoder_destroy(struct pipe_video_decoder *decoder)
 {
-   struct nvc0_decoder *dec = (struct nvc0_decoder *)decoder;
+   struct nouveau_vp3_decoder *dec = (struct nouveau_vp3_decoder *)decoder;
    int i;
 
    nouveau_bo_ref(NULL, &dec->ref_bo);
    nouveau_bo_ref(NULL, &dec->bitplane_bo);
    nouveau_bo_ref(NULL, &dec->inter_bo[0]);
    nouveau_bo_ref(NULL, &dec->inter_bo[1]);
-#if NVC0_DEBUG_FENCE
+#if NOUVEAU_VP3_DEBUG_FENCE
    nouveau_bo_ref(NULL, &dec->fence_bo);
 #endif
    nouveau_bo_ref(NULL, &dec->fw_bo);
 
-   for (i = 0; i < NVC0_VIDEO_QDEPTH; ++i)
+   for (i = 0; i < NOUVEAU_VP3_VIDEO_QDEPTH; ++i)
       nouveau_bo_ref(NULL, &dec->bsp_bo[i]);
 
    nouveau_object_del(&dec->bsp);
@@ -198,7 +198,7 @@ nvc0_create_decoder(struct pipe_context *context,
                     bool chunked_decode)
 {
    struct nouveau_screen *screen = &((struct nvc0_context *)context)->screen->base;
-   struct nvc0_decoder *dec;
+   struct nouveau_vp3_decoder *dec;
    struct nouveau_pushbuf **push;
    union nouveau_bo_config cfg;
    bool kepler = screen->device->chipset >= 0xe0;
@@ -221,7 +221,7 @@ nvc0_create_decoder(struct pipe_context *context,
       return NULL;
    }
 
-   dec = CALLOC_STRUCT(nvc0_decoder);
+   dec = CALLOC_STRUCT(nouveau_vp3_decoder);
    if (!dec)
       return NULL;
    dec->client = screen->client;
@@ -313,7 +313,7 @@ nvc0_create_decoder(struct pipe_context *context,
    dec->base.begin_frame = nvc0_decoder_begin_frame;
    dec->base.end_frame = nvc0_decoder_end_frame;
 
-   for (i = 0; i < NVC0_VIDEO_QDEPTH && !ret; ++i)
+   for (i = 0; i < NOUVEAU_VP3_VIDEO_QDEPTH && !ret; ++i)
       ret = nouveau_bo_new(screen->device, NOUVEAU_BO_VRAM,
                            0, 1 << 20, &cfg, &dec->bsp_bo[i]);
    if (!ret)
@@ -350,7 +350,7 @@ nvc0_create_decoder(struct pipe_context *context,
    }
    case PIPE_VIDEO_CODEC_MPEG4_AVC: {
       codec = 3;
-      dec->tmp_stride = 16 * mb_half(width) * nvc0_video_align(height) * 3 / 2;
+      dec->tmp_stride = 16 * mb_half(width) * nouveau_vp3_video_align(height) * 3 / 2;
       tmp_size = dec->tmp_stride * (max_references + 1);
       assert(max_references <= 16);
       break;
@@ -440,7 +440,7 @@ nvc0_create_decoder(struct pipe_context *context,
          goto fail;
    }
 
-   dec->ref_stride = mb(width)*16 * (mb_half(height)*32 + nvc0_video_align(height)/2);
+   dec->ref_stride = mb(width)*16 * (mb_half(height)*32 + nouveau_vp3_video_align(height)/2);
    ret = nouveau_bo_new(screen->device, NOUVEAU_BO_VRAM, 0,
                         dec->ref_stride * (max_references+2) + tmp_size,
                         &cfg, &dec->ref_bo);
@@ -463,7 +463,7 @@ nvc0_create_decoder(struct pipe_context *context,
 
    ++dec->fence_seq;
 
-#if NVC0_DEBUG_FENCE
+#if NOUVEAU_VP3_DEBUG_FENCE
    ret = nouveau_bo_new(screen->device, NOUVEAU_BO_GART|NOUVEAU_BO_MAP,
                         0, 0x1000, NULL, &dec->fence_bo);
    if (ret)
index 67eca7c3c8d94d10985c6ca9af36559dfdb95845..1ceb6ebe56c4b081660e40ae2f54883dc7289493 100644 (file)
 
 #include "util/u_video.h"
 
-#define SLICE_SIZE 0x200
-#define VP_OFFSET 0x200
-#define COMM_OFFSET 0x500
-
-#define NVC0_DEBUG_FENCE 0
-
-#if NVC0_DEBUG_FENCE
-# define NVC0_VIDEO_QDEPTH 1
-#else
-# define NVC0_VIDEO_QDEPTH 2
-#endif
-
-#define SUBC_BSP(m) dec->bsp_idx, (m)
-#define SUBC_VP(m) dec->vp_idx, (m)
-#define SUBC_PPP(m) dec->ppp_idx, (m)
-
-union pipe_desc {
-   struct pipe_picture_desc *base;
-   struct pipe_mpeg12_picture_desc *mpeg12;
-   struct pipe_mpeg4_picture_desc *mpeg4;
-   struct pipe_vc1_picture_desc *vc1;
-   struct pipe_h264_picture_desc *h264;
-};
-
-struct nvc0_decoder {
-   struct pipe_video_decoder base;
-   struct nouveau_client *client;
-   struct nouveau_object *channel[3], *bsp, *vp, *ppp;
-   struct nouveau_pushbuf *pushbuf[3];
-
-#if NVC0_DEBUG_FENCE
-   /* dump fence and comm, as needed.. */
-   unsigned *fence_map;
-   struct comm *comm;
-
-   struct nouveau_bo *fence_bo;
-#endif
-
-   struct nouveau_bo *fw_bo, *bitplane_bo;
-
-   // array size max_references + 2, contains unpostprocessed images
-   // added at the end of ref_bo is a tmp array
-   // tmp is an array for h264, with each member being used for a ref frame or current
-   // target.. size = (((mb(w)*((mb(h)+1)&~1))+3)>>2)<<8 * (max_references+1)
-   // for other codecs, it simply seems that size = w*h is enough
-   // unsure what it's supposed to contain..
-   struct nouveau_bo *ref_bo;
-
-   struct nouveau_bo *inter_bo[2];
-
-   struct nouveau_bo *bsp_bo[NVC0_VIDEO_QDEPTH];
-
-   // bo's used by each cycle:
-
-   // bsp_bo: contains raw bitstream data and parameters for BSP and VP.
-   // inter_bo: contains data shared between BSP and VP
-   // ref_bo: reference image data, used by PPP and VP
-   // bitplane_bo: contain bitplane data (similar to ref_bo), used by BSP only
-   // fw_bo: used by VP only.
-
-   // Needed amount of copies in optimal case:
-   // 2 copies of inter_bo, VP would process the last inter_bo, while BSP is
-   // writing out a new set.
-   // NVC0_VIDEO_QDEPTH copies of bsp_bo. We don't want to block the pipeline ever,
-   // and give shaders a chance to run as well.
-
-   struct {
-      struct nouveau_vp3_video_buffer *vidbuf;
-      unsigned last_used;
-      unsigned field_pic_flag : 1;
-      unsigned decoded_top : 1;
-      unsigned decoded_bottom : 1;
-   } refs[17];
-   unsigned fence_seq, fw_sizes, last_frame_num, tmp_stride, ref_stride;
-
-   unsigned bsp_idx, vp_idx, ppp_idx;
-};
-
-struct comm {
-       uint32_t bsp_cur_index; // 000
-       uint32_t byte_ofs; // 004
-       uint32_t status[0x10]; // 008
-       uint32_t pos[0x10]; // 048
-       uint8_t pad[0x100 - 0x88]; // 0a0 bool comm_encrypted
-
-       uint32_t pvp_cur_index; // 100
-       uint32_t acked_byte_ofs; // 104
-       uint32_t status_vp[0x10]; // 108
-       uint16_t mb_y[0x10]; //148
-       uint32_t pvp_stage; // 168 0xeeXX
-       uint16_t parse_endpos_index; // 16c
-       uint16_t irq_index; // 16e
-       uint8_t  irq_470[0x10]; // 170
-       uint32_t irq_pos[0x10]; // 180
-       uint32_t parse_endpos[0x10]; // 1c0
-};
-
-static INLINE uint32_t nvc0_video_align(uint32_t h)
-{
-   return ((h+0x3f)&~0x3f);
-};
-
-static INLINE uint32_t mb(uint32_t coord)
-{
-   return (coord + 0xf)>>4;
-}
-
-static INLINE uint32_t mb_half(uint32_t coord)
-{
-   return (coord + 0x1f)>>5;
-}
-
-static INLINE uint64_t
-nvc0_video_addr(struct nvc0_decoder *dec, struct nouveau_vp3_video_buffer *target)
-{
-   uint64_t ret;
-   if (target)
-      ret = dec->ref_stride * target->valid_ref;
-   else
-      ret = dec->ref_stride * (dec->base.max_references+1);
-   return dec->ref_bo->offset + ret;
-}
-
-static INLINE void
-nvc0_decoder_ycbcr_offsets(struct nvc0_decoder *dec, uint32_t *y2,
-                           uint32_t *cbcr, uint32_t *cbcr2)
-{
-   uint32_t w = mb(dec->base.width), size;
-   *y2 = mb_half(dec->base.height)*w;
-   *cbcr = *y2 * 2;
-   *cbcr2 = *cbcr + w * (nvc0_video_align(dec->base.height)>>6);
-
-   /* The check here should never fail because it means a bug
-    * in the code rather than a bug in hardware..
-    */
-   size = (2 * (*cbcr2 - *cbcr) + *cbcr) << 8;
-   if (size > dec->ref_stride) {
-      debug_printf("Overshot ref_stride (%u) with size %u and ofs (%u,%u,%u)\n",
-                   dec->ref_stride, size, *y2<<8, *cbcr<<8, *cbcr2<<8);
-      *y2 = *cbcr = *cbcr2 = 0;
-      assert(size <= dec->ref_stride);
-   }
-}
-
-static INLINE void
-nvc0_decoder_inter_sizes(struct nvc0_decoder *dec, uint32_t slice_count,
-                         uint32_t *slice_size, uint32_t *bucket_size,
-                         uint32_t *ring_size)
-{
-   *slice_size = (SLICE_SIZE * slice_count)>>8;
-   if (u_reduce_video_profile(dec->base.profile) == PIPE_VIDEO_CODEC_MPEG12)
-      *bucket_size = 0;
-   else
-      *bucket_size = mb(dec->base.width) * 3;
-   *ring_size = (dec->inter_bo[0]->size >> 8) - *bucket_size - *slice_size;
-}
-
 extern unsigned
-nvc0_decoder_bsp(struct nvc0_decoder *dec, union pipe_desc desc,
+nvc0_decoder_bsp(struct nouveau_vp3_decoder *dec, union pipe_desc desc,
                  struct nouveau_vp3_video_buffer *target,
                  unsigned comm_seq, unsigned num_buffers,
                  const void *const *data, const unsigned *num_bytes,
                  unsigned *vp_caps, unsigned *is_ref,
                  struct nouveau_vp3_video_buffer *refs[16]);
 
-extern void nvc0_decoder_vp_caps(struct nvc0_decoder *dec,
+extern void nvc0_decoder_vp_caps(struct nouveau_vp3_decoder *dec,
                                  union pipe_desc desc,
                                  struct nouveau_vp3_video_buffer *target,
                                  unsigned comm_seq,
@@ -202,11 +45,11 @@ extern void nvc0_decoder_vp_caps(struct nvc0_decoder *dec,
                                  struct nouveau_vp3_video_buffer *refs[16]);
 
 extern void
-nvc0_decoder_vp(struct nvc0_decoder *dec, union pipe_desc desc,
+nvc0_decoder_vp(struct nouveau_vp3_decoder *dec, union pipe_desc desc,
                 struct nouveau_vp3_video_buffer *target, unsigned comm_seq,
                 unsigned caps, unsigned is_ref,
                 struct nouveau_vp3_video_buffer *refs[16]);
 
 extern void
-nvc0_decoder_ppp(struct nvc0_decoder *dec, union pipe_desc desc,
+nvc0_decoder_ppp(struct nouveau_vp3_decoder *dec, union pipe_desc desc,
                  struct nouveau_vp3_video_buffer *target, unsigned comm_seq);
index bdb9c64be16f2eecf43b32f8d061551150bd3229..c632a5e5185ee498164a1c44ad42359258d91030 100644 (file)
@@ -110,7 +110,7 @@ struct h264_picparm_bsp {
 };
 
 static uint32_t
-nvc0_decoder_fill_picparm_mpeg12_bsp(struct nvc0_decoder *dec,
+nvc0_decoder_fill_picparm_mpeg12_bsp(struct nouveau_vp3_decoder *dec,
                                      struct pipe_mpeg12_picture_desc *desc,
                                      char *map)
 {
@@ -132,7 +132,7 @@ nvc0_decoder_fill_picparm_mpeg12_bsp(struct nvc0_decoder *dec,
 }
 
 static uint32_t
-nvc0_decoder_fill_picparm_mpeg4_bsp(struct nvc0_decoder *dec,
+nvc0_decoder_fill_picparm_mpeg4_bsp(struct nouveau_vp3_decoder *dec,
                                     struct pipe_mpeg4_picture_desc *desc,
                                     char *map)
 {
@@ -157,7 +157,7 @@ nvc0_decoder_fill_picparm_mpeg4_bsp(struct nvc0_decoder *dec,
 }
 
 static uint32_t
-nvc0_decoder_fill_picparm_vc1_bsp(struct nvc0_decoder *dec,
+nvc0_decoder_fill_picparm_vc1_bsp(struct nouveau_vp3_decoder *dec,
                                   struct pipe_vc1_picture_desc *d,
                                   char *map)
 {
@@ -189,7 +189,7 @@ nvc0_decoder_fill_picparm_vc1_bsp(struct nvc0_decoder *dec,
 }
 
 static uint32_t
-nvc0_decoder_fill_picparm_h264_bsp(struct nvc0_decoder *dec,
+nvc0_decoder_fill_picparm_h264_bsp(struct nouveau_vp3_decoder *dec,
                                    struct pipe_h264_picture_desc *d,
                                    char *map)
 {
@@ -230,7 +230,7 @@ nvc0_decoder_fill_picparm_h264_bsp(struct nvc0_decoder *dec,
    return caps | 3;
 }
 
-#if NVC0_DEBUG_FENCE
+#if NOUVEAU_VP3_DEBUG_FENCE
 static void dump_comm_bsp(struct comm *comm)
 {
    unsigned idx = comm->bsp_cur_index & 0xf;
@@ -240,7 +240,7 @@ static void dump_comm_bsp(struct comm *comm)
 #endif
 
 unsigned
-nvc0_decoder_bsp(struct nvc0_decoder *dec, union pipe_desc desc,
+nvc0_decoder_bsp(struct nouveau_vp3_decoder *dec, union pipe_desc desc,
                  struct nouveau_vp3_video_buffer *target,
                  unsigned comm_seq, unsigned num_buffers,
                  const void *const *data, const unsigned *num_bytes,
@@ -255,13 +255,13 @@ nvc0_decoder_bsp(struct nvc0_decoder *dec, union pipe_desc desc,
    uint32_t endmarker, caps;
    struct strparm_bsp *str_bsp;
    int ret, i;
-   struct nouveau_bo *bsp_bo = dec->bsp_bo[comm_seq % NVC0_VIDEO_QDEPTH];
+   struct nouveau_bo *bsp_bo = dec->bsp_bo[comm_seq % NOUVEAU_VP3_VIDEO_QDEPTH];
    struct nouveau_bo *inter_bo = dec->inter_bo[comm_seq & 1];
    unsigned fence_extra = 0;
    struct nouveau_pushbuf_refn bo_refs[] = {
       { bsp_bo, NOUVEAU_BO_RD | NOUVEAU_BO_VRAM },
       { inter_bo, NOUVEAU_BO_WR | NOUVEAU_BO_VRAM },
-#if NVC0_DEBUG_FENCE
+#if NOUVEAU_VP3_DEBUG_FENCE
       { dec->fence_bo, NOUVEAU_BO_WR | NOUVEAU_BO_GART },
 #endif
       { dec->bitplane_bo, NOUVEAU_BO_RDWR | NOUVEAU_BO_VRAM },
@@ -271,7 +271,7 @@ nvc0_decoder_bsp(struct nvc0_decoder *dec, union pipe_desc desc,
    if (!dec->bitplane_bo)
       num_refs--;
 
-#if NVC0_DEBUG_FENCE
+#if NOUVEAU_VP3_DEBUG_FENCE
    fence_extra = 4;
 #endif
 
@@ -329,7 +329,7 @@ nvc0_decoder_bsp(struct nvc0_decoder *dec, union pipe_desc desc,
    /* Reserved for picparm_vp */
    bsp += 0x300;
    /* Reserved for comm */
-#if !NVC0_DEBUG_FENCE
+#if !NOUVEAU_VP3_DEBUG_FENCE
    memset(bsp, 0, 0x200);
 #endif
    bsp += 0x200;
@@ -351,7 +351,7 @@ nvc0_decoder_bsp(struct nvc0_decoder *dec, union pipe_desc desc,
    bsp_addr = bsp_bo->offset >> 8;
    inter_addr = inter_bo->offset >> 8;
 
-#if NVC0_DEBUG_FENCE
+#if NOUVEAU_VP3_DEBUG_FENCE
    memset(dec->comm, 0, 0x200);
    comm_addr = (dec->fence_bo->offset + COMM_OFFSET) >> 8;
 #else
@@ -370,7 +370,7 @@ nvc0_decoder_bsp(struct nvc0_decoder *dec, union pipe_desc desc,
 
       bitplane_addr = dec->bitplane_bo->offset >> 8;
 
-      nvc0_decoder_inter_sizes(dec, 1, &slice_size, &bucket_size, &ring_size);
+      nouveau_vp3_inter_sizes(dec, 1, &slice_size, &bucket_size, &ring_size);
       BEGIN_NVC0(push, SUBC_BSP(0x400), 6);
       PUSH_DATA (push, bsp_addr); // 400 picparm addr
       PUSH_DATA (push, inter_addr); // 404 interparm addr
@@ -379,7 +379,7 @@ nvc0_decoder_bsp(struct nvc0_decoder *dec, union pipe_desc desc,
       PUSH_DATA (push, bitplane_addr); // 410 BITPLANE_DATA
       PUSH_DATA (push, 0x400); // 414 BITPLANE_DATA_SIZE
    } else {
-      nvc0_decoder_inter_sizes(dec, desc.h264->slice_count, &slice_size, &bucket_size, &ring_size);
+      nouveau_vp3_inter_sizes(dec, desc.h264->slice_count, &slice_size, &bucket_size, &ring_size);
       BEGIN_NVC0(push, SUBC_BSP(0x400), 8);
       PUSH_DATA (push, bsp_addr); // 400 picparm addr
       PUSH_DATA (push, inter_addr); // 404 interparm addr
@@ -392,7 +392,7 @@ nvc0_decoder_bsp(struct nvc0_decoder *dec, union pipe_desc desc,
       // TODO: Double check 414 / 418 with nvidia trace
    }
 
-#if NVC0_DEBUG_FENCE
+#if NOUVEAU_VP3_DEBUG_FENCE
    BEGIN_NVC0(push, SUBC_BSP(0x240), 3);
    PUSH_DATAh(push, dec->fence_bo->offset);
    PUSH_DATA (push, dec->fence_bo->offset);
index 836add33c20a4c99d36f6efbf00df1c174cbcafe..496db80a23e3d71152bc6525b56e031a781ec3ab 100644 (file)
@@ -23,7 +23,7 @@
 #include "nvc0_video.h"
 
 static void
-nvc0_decoder_setup_ppp(struct nvc0_decoder *dec, struct nouveau_vp3_video_buffer *target, uint32_t low700) {
+nvc0_decoder_setup_ppp(struct nouveau_vp3_decoder *dec, struct nouveau_vp3_video_buffer *target, uint32_t low700) {
    struct nouveau_pushbuf *push = dec->pushbuf[2];
 
    uint32_t stride_in = mb(dec->base.width);
@@ -36,7 +36,7 @@ nvc0_decoder_setup_ppp(struct nvc0_decoder *dec, struct nouveau_vp3_video_buffer
       { NULL, NOUVEAU_BO_WR | NOUVEAU_BO_VRAM },
       { NULL, NOUVEAU_BO_WR | NOUVEAU_BO_VRAM },
       { dec->ref_bo, NOUVEAU_BO_RD | NOUVEAU_BO_VRAM },
-#if NVC0_DEBUG_FENCE
+#if NOUVEAU_VP3_DEBUG_FENCE
       { dec->fence_bo, NOUVEAU_BO_WR | NOUVEAU_BO_GART },
 #endif
    };
@@ -48,10 +48,10 @@ nvc0_decoder_setup_ppp(struct nvc0_decoder *dec, struct nouveau_vp3_video_buffer
    }
 
    nouveau_pushbuf_refn(push, bo_refs, num_refs);
-   nvc0_decoder_ycbcr_offsets(dec, &y2, &cbcr, &cbcr2);
+   nouveau_vp3_ycbcr_offsets(dec, &y2, &cbcr, &cbcr2);
 
    BEGIN_NVC0(push, SUBC_PPP(0x700), 10);
-   in_addr = nvc0_video_addr(dec, target) >> 8;
+   in_addr = nouveau_vp3_video_addr(dec, target) >> 8;
 
    PUSH_DATA (push, (stride_out << 24) | (stride_out << 16) | low700); // 700
    PUSH_DATA (push, (stride_in << 24) | (stride_in << 16) | (dec_h << 8) | dec_w); // 704
@@ -73,7 +73,7 @@ nvc0_decoder_setup_ppp(struct nvc0_decoder *dec, struct nouveau_vp3_video_buffer
 }
 
 static uint32_t
-nvc0_decoder_vc1_ppp(struct nvc0_decoder *dec, struct pipe_vc1_picture_desc *desc, struct nouveau_vp3_video_buffer *target) {
+nvc0_decoder_vc1_ppp(struct nouveau_vp3_decoder *dec, struct pipe_vc1_picture_desc *desc, struct nouveau_vp3_video_buffer *target) {
    struct nouveau_pushbuf *push = dec->pushbuf[2];
 
    nvc0_decoder_setup_ppp(dec, target, 0x1412);
@@ -89,13 +89,13 @@ nvc0_decoder_vc1_ppp(struct nvc0_decoder *dec, struct pipe_vc1_picture_desc *des
 }
 
 void
-nvc0_decoder_ppp(struct nvc0_decoder *dec, union pipe_desc desc, struct nouveau_vp3_video_buffer *target, unsigned comm_seq) {
+nvc0_decoder_ppp(struct nouveau_vp3_decoder *dec, union pipe_desc desc, struct nouveau_vp3_video_buffer *target, unsigned comm_seq) {
    enum pipe_video_codec codec = u_reduce_video_profile(dec->base.profile);
    struct nouveau_pushbuf *push = dec->pushbuf[2];
    unsigned ppp_caps = 0x10;
    unsigned fence_extra = 0;
 
-#if NVC0_DEBUG_FENCE
+#if NOUVEAU_VP3_DEBUG_FENCE
    fence_extra = 4;
 #endif
 
@@ -116,7 +116,7 @@ nvc0_decoder_ppp(struct nvc0_decoder *dec, union pipe_desc desc, struct nouveau_
    PUSH_DATA (push, comm_seq);
    PUSH_DATA (push, ppp_caps);
 
-#if NVC0_DEBUG_FENCE
+#if NOUVEAU_VP3_DEBUG_FENCE
    BEGIN_NVC0(push, SUBC_PPP(0x240), 3);
    PUSH_DATAh(push, (dec->fence_bo->offset + 0x20));
    PUSH_DATA (push, (dec->fence_bo->offset + 0x20));
index 74e3915a288cf0939ea3fabeb1f6273d56cf8f4c..e3c00b9c710619294474d5ca34b0c70f039ea575 100644 (file)
@@ -170,7 +170,7 @@ struct h264_picparm_vp { // 700..a00
 };
 
 static void
-nvc0_decoder_handle_references(struct nvc0_decoder *dec, struct nouveau_vp3_video_buffer *refs[16], unsigned seq, struct nouveau_vp3_video_buffer *target)
+nvc0_decoder_handle_references(struct nouveau_vp3_decoder *dec, struct nouveau_vp3_video_buffer *refs[16], unsigned seq, struct nouveau_vp3_video_buffer *target)
 {
    unsigned h264 = u_reduce_video_profile(dec->base.profile) == PIPE_VIDEO_CODEC_MPEG4_AVC;
    unsigned i, idx, empty_spot = dec->base.max_references + 1;
@@ -221,7 +221,7 @@ nvc0_decoder_handle_references(struct nvc0_decoder *dec, struct nouveau_vp3_vide
 }
 
 static void
-nvc0_decoder_kick_ref(struct nvc0_decoder *dec, struct nouveau_vp3_video_buffer *target)
+nvc0_decoder_kick_ref(struct nouveau_vp3_decoder *dec, struct nouveau_vp3_video_buffer *target)
 {
    dec->refs[target->valid_ref].vidbuf = NULL;
    dec->refs[target->valid_ref].last_used = 0;
@@ -229,7 +229,7 @@ nvc0_decoder_kick_ref(struct nvc0_decoder *dec, struct nouveau_vp3_video_buffer
 }
 
 static uint32_t
-nvc0_decoder_fill_picparm_mpeg12_vp(struct nvc0_decoder *dec,
+nvc0_decoder_fill_picparm_mpeg12_vp(struct nouveau_vp3_decoder *dec,
                                     struct pipe_mpeg12_picture_desc *desc,
                                     struct nouveau_vp3_video_buffer *refs[16],
                                     unsigned *is_ref,
@@ -252,10 +252,10 @@ nvc0_decoder_fill_picparm_mpeg12_vp(struct nvc0_decoder *dec,
    pic_vp->height = mb(dec->base.height);
    pic_vp->unk08 = pic_vp->unk04 = (dec->base.width+0xf)&~0xf; // Stride
 
-   nvc0_decoder_ycbcr_offsets(dec, &pic_vp->ofs[1], &pic_vp->ofs[3], &pic_vp->ofs[4]);
+   nouveau_vp3_ycbcr_offsets(dec, &pic_vp->ofs[1], &pic_vp->ofs[3], &pic_vp->ofs[4]);
    pic_vp->ofs[5] = pic_vp->ofs[3];
    pic_vp->ofs[0] = pic_vp->ofs[2] = 0;
-   nvc0_decoder_inter_sizes(dec, 1, &ring, &pic_vp->bucket_size, &pic_vp->inter_ring_data_size);
+   nouveau_vp3_inter_sizes(dec, 1, &ring, &pic_vp->bucket_size, &pic_vp->inter_ring_data_size);
 
    pic_vp->alternate_scan = desc->alternate_scan;
    pic_vp->pad2[0] = pic_vp->pad2[1] = pic_vp->pad2[2] = 0;
@@ -278,7 +278,7 @@ nvc0_decoder_fill_picparm_mpeg12_vp(struct nvc0_decoder *dec,
 }
 
 static uint32_t
-nvc0_decoder_fill_picparm_mpeg4_vp(struct nvc0_decoder *dec,
+nvc0_decoder_fill_picparm_mpeg4_vp(struct nouveau_vp3_decoder *dec,
                                    struct pipe_mpeg4_picture_desc *desc,
                                    struct nouveau_vp3_video_buffer *refs[16],
                                    unsigned *is_ref,
@@ -293,11 +293,11 @@ nvc0_decoder_fill_picparm_mpeg4_vp(struct nvc0_decoder *dec,
    pic_vp->height = mb(dec->base.height)<<4;
    pic_vp->unk0c = pic_vp->unk08 = mb(dec->base.width)<<4; // Stride
 
-   nvc0_decoder_ycbcr_offsets(dec, &pic_vp->ofs[1], &pic_vp->ofs[3], &pic_vp->ofs[4]);
+   nouveau_vp3_ycbcr_offsets(dec, &pic_vp->ofs[1], &pic_vp->ofs[3], &pic_vp->ofs[4]);
    pic_vp->ofs[5] = pic_vp->ofs[3];
    pic_vp->ofs[0] = pic_vp->ofs[2] = 0;
    pic_vp->pad1 = pic_vp->pad2 = 0;
-   nvc0_decoder_inter_sizes(dec, 1, &ring, &pic_vp->bucket_size, &pic_vp->inter_ring_data_size);
+   nouveau_vp3_inter_sizes(dec, 1, &ring, &pic_vp->bucket_size, &pic_vp->inter_ring_data_size);
 
    pic_vp->trd[0] = desc->trd[0];
    pic_vp->trd[1] = desc->trd[1];
@@ -326,7 +326,7 @@ nvc0_decoder_fill_picparm_mpeg4_vp(struct nvc0_decoder *dec,
 }
 
 static uint32_t
-nvc0_decoder_fill_picparm_h264_vp(struct nvc0_decoder *dec,
+nvc0_decoder_fill_picparm_h264_vp(struct nouveau_vp3_decoder *dec,
                                   const struct pipe_h264_picture_desc *d,
                                   struct nouveau_vp3_video_buffer *refs[16],
                                   unsigned *is_ref,
@@ -341,12 +341,12 @@ nvc0_decoder_fill_picparm_h264_vp(struct nvc0_decoder *dec,
    h->width = mb(dec->base.width);
    h->height = mb(dec->base.height);
    h->stride1 = h->stride2 = mb(dec->base.width)*16;
-   nvc0_decoder_ycbcr_offsets(dec, &h->ofs[1], &h->ofs[3], &h->ofs[4]);
+   nouveau_vp3_ycbcr_offsets(dec, &h->ofs[1], &h->ofs[3], &h->ofs[4]);
    h->ofs[5] = h->ofs[3];
    h->ofs[0] = h->ofs[2] = 0;
    h->u24 = dec->tmp_stride >> 8;
    assert(h->u24);
-   nvc0_decoder_inter_sizes(dec, 1, &ring, &h->bucket_size, &h->inter_ring_data_size);
+   nouveau_vp3_inter_sizes(dec, 1, &ring, &h->bucket_size, &h->inter_ring_data_size);
 
    h->u220 = 0;
    h->f0 = d->mb_adaptive_frame_field_flag;
@@ -410,7 +410,7 @@ nvc0_decoder_fill_picparm_h264_vp(struct nvc0_decoder *dec,
 }
 
 static void
-nvc0_decoder_fill_picparm_h264_vp_refs(struct nvc0_decoder *dec,
+nvc0_decoder_fill_picparm_h264_vp_refs(struct nouveau_vp3_decoder *dec,
                                        struct pipe_h264_picture_desc *d,
                                        struct nouveau_vp3_video_buffer *refs[16],
                                        struct nouveau_vp3_video_buffer *target,
@@ -429,7 +429,7 @@ nvc0_decoder_fill_picparm_h264_vp_refs(struct nvc0_decoder *dec,
 }
 
 static uint32_t
-nvc0_decoder_fill_picparm_vc1_vp(struct nvc0_decoder *dec,
+nvc0_decoder_fill_picparm_vc1_vp(struct nouveau_vp3_decoder *dec,
                                  struct pipe_vc1_picture_desc *d,
                                  struct nouveau_vp3_video_buffer *refs[16],
                                  unsigned *is_ref,
@@ -440,14 +440,14 @@ nvc0_decoder_fill_picparm_vc1_vp(struct nvc0_decoder *dec,
    assert(dec->base.profile != PIPE_VIDEO_PROFILE_VC1_SIMPLE);
    *is_ref = d->picture_type <= 1;
 
-   nvc0_decoder_ycbcr_offsets(dec, &vc->ofs[1], &vc->ofs[3], &vc->ofs[4]);
+   nouveau_vp3_ycbcr_offsets(dec, &vc->ofs[1], &vc->ofs[3], &vc->ofs[4]);
    vc->ofs[5] = vc->ofs[3];
    vc->ofs[0] = vc->ofs[2] = 0;
    vc->width = dec->base.width;
    vc->height = mb(dec->base.height)<<4;
    vc->unk0c = vc->unk10 = mb(dec->base.width)<<4; // Stride
    vc->pad = vc->pad2 = 0;
-   nvc0_decoder_inter_sizes(dec, 1, &ring, &vc->bucket_size, &vc->inter_ring_data_size);
+   nouveau_vp3_inter_sizes(dec, 1, &ring, &vc->bucket_size, &vc->inter_ring_data_size);
    vc->profile = dec->base.profile - PIPE_VIDEO_PROFILE_VC1_SIMPLE;
    vc->loopfilter = d->loopfilter;
    vc->fastuvmc = d->fastuvmc;
@@ -460,8 +460,8 @@ nvc0_decoder_fill_picparm_vc1_vp(struct nvc0_decoder *dec,
    return 0x12;
 }
 
-#if NVC0_DEBUG_FENCE
-static void dump_comm_vp(struct nvc0_decoder *dec, struct comm *comm, u32 comm_seq,
+#if NOUVEAU_VP3_DEBUG_FENCE
+static void dump_comm_vp(struct nouveau_vp3_decoder *dec, struct comm *comm, u32 comm_seq,
                          struct nouveau_bo *inter_bo, unsigned slice_size)
 {
        unsigned i, idx = comm->pvp_cur_index & 0xf;
@@ -493,12 +493,12 @@ static void dump_comm_vp(struct nvc0_decoder *dec, struct comm *comm, u32 comm_s
 }
 #endif
 
-void nvc0_decoder_vp_caps(struct nvc0_decoder *dec, union pipe_desc desc,
+void nvc0_decoder_vp_caps(struct nouveau_vp3_decoder *dec, union pipe_desc desc,
                           struct nouveau_vp3_video_buffer *target, unsigned comm_seq,
                           unsigned *caps, unsigned *is_ref,
                           struct nouveau_vp3_video_buffer *refs[16])
 {
-   struct nouveau_bo *bsp_bo = dec->bsp_bo[comm_seq % NVC0_VIDEO_QDEPTH];
+   struct nouveau_bo *bsp_bo = dec->bsp_bo[comm_seq % NOUVEAU_VP3_VIDEO_QDEPTH];
    enum pipe_video_codec codec = u_reduce_video_profile(dec->base.profile);
    char *vp = bsp_bo->map + VP_OFFSET;
 
@@ -527,7 +527,7 @@ void nvc0_decoder_vp_caps(struct nvc0_decoder *dec, union pipe_desc desc,
 }
 
 void
-nvc0_decoder_vp(struct nvc0_decoder *dec, union pipe_desc desc,
+nvc0_decoder_vp(struct nouveau_vp3_decoder *dec, union pipe_desc desc,
                 struct nouveau_vp3_video_buffer *target, unsigned comm_seq,
                 unsigned caps, unsigned is_ref,
                 struct nouveau_vp3_video_buffer *refs[16])
@@ -536,41 +536,41 @@ nvc0_decoder_vp(struct nvc0_decoder *dec, union pipe_desc desc,
    uint32_t bsp_addr, comm_addr, inter_addr, ucode_addr, pic_addr[17], last_addr, null_addr;
    uint32_t slice_size, bucket_size, ring_size, i;
    enum pipe_video_codec codec = u_reduce_video_profile(dec->base.profile);
-   struct nouveau_bo *bsp_bo = dec->bsp_bo[comm_seq % NVC0_VIDEO_QDEPTH];
+   struct nouveau_bo *bsp_bo = dec->bsp_bo[comm_seq % NOUVEAU_VP3_VIDEO_QDEPTH];
    struct nouveau_bo *inter_bo = dec->inter_bo[comm_seq & 1];
    u32 fence_extra = 0, codec_extra = 0;
    struct nouveau_pushbuf_refn bo_refs[] = {
       { inter_bo, NOUVEAU_BO_WR | NOUVEAU_BO_VRAM },
       { dec->ref_bo, NOUVEAU_BO_WR | NOUVEAU_BO_VRAM },
       { bsp_bo, NOUVEAU_BO_RD | NOUVEAU_BO_VRAM },
-#if NVC0_DEBUG_FENCE
+#if NOUVEAU_VP3_DEBUG_FENCE
       { dec->fence_bo, NOUVEAU_BO_WR | NOUVEAU_BO_GART },
 #endif
       { dec->fw_bo, NOUVEAU_BO_RD | NOUVEAU_BO_VRAM },
    };
    int num_refs = sizeof(bo_refs)/sizeof(*bo_refs) - !dec->fw_bo;
 
-#if NVC0_DEBUG_FENCE
+#if NOUVEAU_VP3_DEBUG_FENCE
    fence_extra = 4;
 #endif
 
    if (codec == PIPE_VIDEO_CODEC_MPEG4_AVC) {
-      nvc0_decoder_inter_sizes(dec, desc.h264->slice_count, &slice_size, &bucket_size, &ring_size);
+      nouveau_vp3_inter_sizes(dec, desc.h264->slice_count, &slice_size, &bucket_size, &ring_size);
       codec_extra += 2;
    } else
-      nvc0_decoder_inter_sizes(dec, 1, &slice_size, &bucket_size, &ring_size);
+      nouveau_vp3_inter_sizes(dec, 1, &slice_size, &bucket_size, &ring_size);
 
    if (dec->base.max_references > 2)
       codec_extra += 1 + (dec->base.max_references - 2);
 
-   pic_addr[16] = nvc0_video_addr(dec, target) >> 8;
-   last_addr = null_addr = nvc0_video_addr(dec, NULL) >> 8;
+   pic_addr[16] = nouveau_vp3_video_addr(dec, target) >> 8;
+   last_addr = null_addr = nouveau_vp3_video_addr(dec, NULL) >> 8;
 
    for (i = 0; i < dec->base.max_references; ++i) {
       if (!refs[i])
          pic_addr[i] = last_addr;
       else if (dec->refs[refs[i]->valid_ref].vidbuf == refs[i])
-         last_addr = pic_addr[i] = nvc0_video_addr(dec, refs[i]) >> 8;
+         last_addr = pic_addr[i] = nouveau_vp3_video_addr(dec, refs[i]) >> 8;
       else
          pic_addr[i] = null_addr;
    }
@@ -583,7 +583,7 @@ nvc0_decoder_vp(struct nvc0_decoder *dec, union pipe_desc desc,
    nouveau_pushbuf_refn(push, bo_refs, num_refs);
 
    bsp_addr = bsp_bo->offset >> 8;
-#if NVC0_DEBUG_FENCE
+#if NOUVEAU_VP3_DEBUG_FENCE
    comm_addr = (dec->fence_bo->offset + COMM_OFFSET)>>8;
 #else
    comm_addr = bsp_addr + (COMM_OFFSET>>8);
@@ -635,7 +635,7 @@ nvc0_decoder_vp(struct nvc0_decoder *dec, union pipe_desc desc,
 
    //debug_printf("Decoding %08lx with %08lx and %08lx\n", pic_addr[16], pic_addr[0], pic_addr[1]);
 
-#if NVC0_DEBUG_FENCE
+#if NOUVEAU_VP3_DEBUG_FENCE
    BEGIN_NVC0(push, SUBC_VP(0x240), 3);
    PUSH_DATAh(push, (dec->fence_bo->offset + 0x10));
    PUSH_DATA (push, (dec->fence_bo->offset + 0x10));