[g3dvl] memcpy the DCT buffer instead of writing it directly
authorChristian König <deathsimple@vodafone.de>
Sat, 7 May 2011 16:09:31 +0000 (18:09 +0200)
committerChristian König <deathsimple@vodafone.de>
Sat, 7 May 2011 16:09:31 +0000 (18:09 +0200)
It looks like texture buffers are not cached so this seems to be alot faster

src/gallium/auxiliary/vl/vl_mpeg12_bitstream.c

index 36eed51909257603d10f63e3f87953d8643186c1..9401081307aaf6d23776c48598ee2e85ae3e5ebf 100644 (file)
@@ -1258,7 +1258,7 @@ static inline void
 slice_intra_DCT(struct vl_mpg12_bs *bs, struct pipe_mpeg12_picture_desc * picture, const int scan[64], int cc,
                  unsigned x, unsigned y, enum pipe_mpeg12_dct_type coding, int quantizer_scale, int dc_dct_pred[3])
 {
-   short *dest = bs->ycbcr_buffer[cc];
+   short dest[64];
 
    bs->ycbcr_stream[cc]->x = x;
    bs->ycbcr_stream[cc]->y = y;
@@ -1283,6 +1283,8 @@ slice_intra_DCT(struct vl_mpg12_bs *bs, struct pipe_mpeg12_picture_desc * pictur
    else
       get_intra_block_B14(bs, picture, scan, quantizer_scale, dest);
 
+   memcpy(bs->ycbcr_buffer[cc], dest, sizeof(int16_t) * 64);
+
    bs->num_ycbcr_blocks[cc]++;
    bs->ycbcr_stream[cc]++;
    bs->ycbcr_buffer[cc] += 64;
@@ -1292,7 +1294,7 @@ static inline void
 slice_non_intra_DCT(struct vl_mpg12_bs *bs, struct pipe_mpeg12_picture_desc * picture, const int scan[64], int cc,
                     unsigned x, unsigned y, int quantizer_scale, enum pipe_mpeg12_dct_type coding)
 {
-   short *dest = bs->ycbcr_buffer[cc];
+   short dest[64];
 
    bs->ycbcr_stream[cc]->x = x;
    bs->ycbcr_stream[cc]->y = y;
@@ -1305,6 +1307,8 @@ slice_non_intra_DCT(struct vl_mpg12_bs *bs, struct pipe_mpeg12_picture_desc * pi
    else
       get_non_intra_block(bs, picture, scan, quantizer_scale, dest);
 
+   memcpy(bs->ycbcr_buffer[cc], dest, sizeof(int16_t) * 64);
+
    bs->num_ycbcr_blocks[cc]++;
    bs->ycbcr_stream[cc]++;
    bs->ycbcr_buffer[cc] += 64;