g3dvl: Fix field coded block copy.
authorYounes Manton <younes.m@gmail.com>
Sat, 13 Sep 2008 05:35:14 +0000 (01:35 -0400)
committerYounes Manton <younes.m@gmail.com>
Sat, 13 Sep 2008 05:35:14 +0000 (01:35 -0400)
src/gallium/state_trackers/g3dvl/vl_r16snorm_mc_buf.c
src/libXvMC/surface.c

index 75d326b36e8b0fcb149b75a0bd0578b6dacd0d8c..888f0040bf7052a487e0e477bcbd533249fdba0f 100644 (file)
@@ -108,17 +108,7 @@ static inline int vlGrabFieldCodedBlock(short *src, short *dst, unsigned int dst
 {
        unsigned int y;
 
-       for (y = 0; y < VL_BLOCK_HEIGHT / 2; ++y)
-               memcpy
-               (
-                       dst + y * dst_pitch * 2,
-                       src + y * VL_BLOCK_WIDTH,
-                       VL_BLOCK_WIDTH * 2
-               );
-
-       dst += VL_BLOCK_HEIGHT * dst_pitch;
-
-       for (; y < VL_BLOCK_HEIGHT; ++y)
+       for (y = 0; y < VL_BLOCK_HEIGHT; ++y)
                memcpy
                (
                        dst + y * dst_pitch * 2,
@@ -1181,7 +1171,7 @@ static int vlCreateVertexShaderFieldPMB
                ti += tgsi_build_full_declaration(&decl, &tokens[ti], header, max_tokens - ti);
        }
 
-       /* decl c0              ; Texcoord denorm coefficients */
+       /* decl c0              ; Render target dimensions */
        decl = vl_decl_constants(TGSI_SEMANTIC_GENERIC, 0, 0, 0);
        ti += tgsi_build_full_declaration(&decl, &tokens[ti], header, max_tokens - ti);
 
@@ -1661,8 +1651,8 @@ static int vlCreateVertexShaderFieldBMB
                ti += tgsi_build_full_declaration(&decl, &tokens[ti], header, max_tokens - ti);
        }
 
-       /* decl c0              ; Denorm coefficients */
-       decl = vl_decl_constants(TGSI_SEMANTIC_GENERIC, 0, 0, 6);
+       /* decl c0              ; Render target dimensions */
+       decl = vl_decl_constants(TGSI_SEMANTIC_GENERIC, 0, 0, 0);
        ti += tgsi_build_full_declaration(&decl, &tokens[ti], header, max_tokens - ti);
 
        /*
index a920da52f9117e7fed90ecd48548d2abf6f02067..6031b39d108020a8aa7a7527095d76cca2cc0558 100644 (file)
@@ -40,12 +40,12 @@ static enum vlPictureType PictureToVL(int xvmc_pic)
        return -1;
 }
 
-static enum vlMotionType MotionToVL(int xvmc_motion_type)
+static enum vlMotionType MotionToVL(int xvmc_motion_type, int xvmc_dct_type)
 {
        switch (xvmc_motion_type)
        {
                case XVMC_PREDICTION_FRAME:
-                       return vlMotionTypeFrame;
+                       return xvmc_dct_type == XVMC_DCT_TYPE_FIELD ? vlMotionType16x8 : vlMotionTypeFrame;
                case XVMC_PREDICTION_FIELD:
                        return vlMotionTypeField;
                case XVMC_PREDICTION_DUAL_PRIME:
@@ -171,8 +171,8 @@ Status XvMCRenderSurface
                batch.macroblocks[i].mby = macroblocks->macro_blocks[j].y;
                batch.macroblocks[i].mb_type = TypeToVL(macroblocks->macro_blocks[j].macroblock_type);
                if (batch.macroblocks[i].mb_type != vlMacroBlockTypeIntra)
-                       batch.macroblocks[i].mo_type = MotionToVL(macroblocks->macro_blocks[j].motion_type);
-               batch.macroblocks[i].dct_type = macroblocks->macro_blocks[j].dct_type & XVMC_DCT_TYPE_FIELD ? vlDCTTypeFieldCoded : vlDCTTypeFrameCoded;
+                       batch.macroblocks[i].mo_type = MotionToVL(macroblocks->macro_blocks[j].motion_type, macroblocks->macro_blocks[j].dct_type);
+               batch.macroblocks[i].dct_type = macroblocks->macro_blocks[j].dct_type == XVMC_DCT_TYPE_FIELD ? vlDCTTypeFieldCoded : vlDCTTypeFrameCoded;
 
                for (k = 0; k < 2; ++k)
                        for (l = 0; l < 2; ++l)