mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-09 02:28:10 +02:00
mesa: Fix return type of _mesa_get_format_bytes() (#37351)
Despite that negative values aren't sensible here, making this unsigned
is dangerous. Consider get_pointer_generic, which computes a value of
the form:
void *base + (int x * int stride + int y) * unsigned bpp
The usual arithmetic conversions will coerce the (x*stride + y)
subexpression to unsigned. Since stride can be negative, this is
disastrous.
Fixes at least the following piglit tests on Ironlake:
fbo/fbo-blit-d24s8
spec/ARB_depth_texture/fbo-clear-formats
spec/EXT_packed_depth_stencil/fbo-clear-formats
NOTE: This is a candidate for the 7.10 branch.
Reviewed-by: Chad Versace <chad.versace@intel.com>
Signed-off-by: Adam Jackson <ajax@redhat.com>
This commit is contained in:
parent
d0c6d24a9e
commit
e8b1c6d6f5
2 changed files with 4 additions and 2 deletions
|
|
@ -1118,8 +1118,10 @@ _mesa_get_format_name(gl_format format)
|
|||
* Return bytes needed to store a block of pixels in the given format.
|
||||
* Normally, a block is 1x1 (a single pixel). But for compressed formats
|
||||
* a block may be 4x4 or 8x4, etc.
|
||||
*
|
||||
* Note: not GLuint, so as not to coerce math to unsigned. cf. fdo #37351
|
||||
*/
|
||||
GLuint
|
||||
GLint
|
||||
_mesa_get_format_bytes(gl_format format)
|
||||
{
|
||||
const struct gl_format_info *info = _mesa_get_format_info(format);
|
||||
|
|
|
|||
|
|
@ -216,7 +216,7 @@ typedef enum
|
|||
extern const char *
|
||||
_mesa_get_format_name(gl_format format);
|
||||
|
||||
extern GLuint
|
||||
extern GLint
|
||||
_mesa_get_format_bytes(gl_format format);
|
||||
|
||||
extern GLint
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue