Hi, 

         I noticed Mesa will get unexpected result when it packs data
with special type and format into a group. The following patch can
correct this issue.

If it is right, I will check it into git.

 

diff --git a/src/mesa/main/image.c b/src/mesa/main/image.c

index 6ff4089..fc8e1f0 100644

--- a/src/mesa/main/image.c

+++ b/src/mesa/main/image.c

@@ -1331,6 +1331,7 @@ _mesa_pack_rgba_span_float(GLcontext *ct

                      dst[i*4+2] = FLOAT_TO_BYTE(rgba[i][RCOMP]);

                      dst[i*4+3] = FLOAT_TO_BYTE(rgba[i][ACOMP]);

                   }

+                 break;

                case GL_ABGR_EXT:

                   for (i=0;i<n;i++) {

                      dst[i*4+0] = FLOAT_TO_BYTE(rgba[i][ACOMP]);

@@ -1479,6 +1480,7 @@ _mesa_pack_rgba_span_float(GLcontext *ct

                      dst[i*4+2] = FLOAT_TO_SHORT(rgba[i][RCOMP]);

                      dst[i*4+3] = FLOAT_TO_SHORT(rgba[i][ACOMP]);

                   }

+                 break;

                case GL_ABGR_EXT:

                   for (i=0;i<n;i++) {

                      dst[i*4+0] = FLOAT_TO_SHORT(rgba[i][ACOMP]);

@@ -1815,7 +1817,7 @@ _mesa_pack_rgba_span_float(GLcontext *ct

             for (i=0;i<n;i++) {

                dst[i] = (((GLint) (rgba[i][RCOMP] * 7.0F))     )

                       | (((GLint) (rgba[i][GCOMP] * 7.0F)) << 3)

-                      | (((GLint) (rgba[i][BCOMP] * 3.0F)) << 5);

+                      | (((GLint) (rgba[i][BCOMP] * 3.0F)) << 6);

             }

          }

          break;

@@ -1861,9 +1863,9 @@ _mesa_pack_rgba_span_float(GLcontext *ct

          else if (dstFormat == GL_ABGR_EXT) {

             GLushort *dst = (GLushort *) dstAddr;

             for (i=0;i<n;i++) {

-               dst[i] = (((GLint) (rgba[i][ACOMP] * 15.0F)) <<  4)

+               dst[i] = (((GLint) (rgba[i][ACOMP] * 15.0F)) << 12)

                       | (((GLint) (rgba[i][BCOMP] * 15.0F)) <<  8)

-                      | (((GLint) (rgba[i][GCOMP] * 15.0F)) << 12)

+                      | (((GLint) (rgba[i][GCOMP] * 15.0F)) <<  4)

                       | (((GLint) (rgba[i][RCOMP] * 15.0F))      );

             }

          }

 

Thanks

Haihao

-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
Mesa3d-dev mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mesa3d-dev

Reply via email to