mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 13:58:04 +02:00
mesa: allow GL_BITMAP type in _mesa_image_image_stride()
It's possible to hand a GL_COLOR_INDEX/GL_BITMAP image to glTexImage3D() which gets converted to RGBA via the glPixelMap tables. This fixes a failure with piglit/fdo10370 with Gallium.
This commit is contained in:
parent
42b747e57d
commit
995456f930
1 changed files with 25 additions and 15 deletions
|
|
@ -1,8 +1,9 @@
|
|||
/*
|
||||
* Mesa 3-D graphics library
|
||||
* Version: 7.1
|
||||
* Version: 7.5
|
||||
*
|
||||
* Copyright (C) 1999-2008 Brian Paul All Rights Reserved.
|
||||
* Copyright (C) 2009 VMware, Inc. All Rights Reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
|
|
@ -755,12 +756,20 @@ _mesa_image_image_stride( const struct gl_pixelstore_attrib *packing,
|
|||
GLint width, GLint height,
|
||||
GLenum format, GLenum type )
|
||||
{
|
||||
ASSERT(packing);
|
||||
ASSERT(type != GL_BITMAP);
|
||||
GLint bytesPerRow, bytesPerImage, remainder;
|
||||
|
||||
{
|
||||
ASSERT(packing);
|
||||
|
||||
if (type == GL_BITMAP) {
|
||||
if (packing->RowLength == 0) {
|
||||
bytesPerRow = (width + 7) / 8;
|
||||
}
|
||||
else {
|
||||
bytesPerRow = (packing->RowLength + 7) / 8;
|
||||
}
|
||||
}
|
||||
else {
|
||||
const GLint bytesPerPixel = _mesa_bytes_per_pixel(format, type);
|
||||
GLint bytesPerRow, bytesPerImage, remainder;
|
||||
|
||||
if (bytesPerPixel <= 0)
|
||||
return -1; /* error */
|
||||
|
|
@ -770,17 +779,18 @@ _mesa_image_image_stride( const struct gl_pixelstore_attrib *packing,
|
|||
else {
|
||||
bytesPerRow = bytesPerPixel * packing->RowLength;
|
||||
}
|
||||
remainder = bytesPerRow % packing->Alignment;
|
||||
if (remainder > 0)
|
||||
bytesPerRow += (packing->Alignment - remainder);
|
||||
|
||||
if (packing->ImageHeight == 0)
|
||||
bytesPerImage = bytesPerRow * height;
|
||||
else
|
||||
bytesPerImage = bytesPerRow * packing->ImageHeight;
|
||||
|
||||
return bytesPerImage;
|
||||
}
|
||||
|
||||
remainder = bytesPerRow % packing->Alignment;
|
||||
if (remainder > 0)
|
||||
bytesPerRow += (packing->Alignment - remainder);
|
||||
|
||||
if (packing->ImageHeight == 0)
|
||||
bytesPerImage = bytesPerRow * height;
|
||||
else
|
||||
bytesPerImage = bytesPerRow * packing->ImageHeight;
|
||||
|
||||
return bytesPerImage;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue