mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 22:38:05 +02:00
intel: Improve the test for readpixels blit path format checking.
We were allowing things like copying RG1616 to a user's ARGB8888 format, while we were denying anything that wasn't ARGB8888 or RGB565. Reviewed-by: Chad Versace <chad.versace@linux.intel.com>
This commit is contained in:
parent
3c7e96ff01
commit
731d474d98
3 changed files with 6 additions and 37 deletions
|
|
@ -123,38 +123,6 @@ intel_check_blit_fragment_ops(struct gl_context * ctx, bool src_alpha_is_one)
|
|||
return true;
|
||||
}
|
||||
|
||||
/* The intel_region struct doesn't really do enough to capture the
|
||||
* format of the pixels in the region. For now this code assumes that
|
||||
* the region is a display surface and hence is either ARGB8888 or
|
||||
* RGB565.
|
||||
* XXX FBO: If we'd pass in the intel_renderbuffer instead of region, we'd
|
||||
* know the buffer's pixel format.
|
||||
*
|
||||
* \param format as given to glDraw/ReadPixels
|
||||
* \param type as given to glDraw/ReadPixels
|
||||
*/
|
||||
bool
|
||||
intel_check_blit_format(struct intel_region * region,
|
||||
GLenum format, GLenum type)
|
||||
{
|
||||
if (region->cpp == 4 &&
|
||||
(type == GL_UNSIGNED_INT_8_8_8_8_REV ||
|
||||
type == GL_UNSIGNED_BYTE) && format == GL_BGRA) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (region->cpp == 2 &&
|
||||
type == GL_UNSIGNED_SHORT_5_6_5_REV && format == GL_BGR) {
|
||||
return true;
|
||||
}
|
||||
|
||||
DBG("%s: bad format for blit (cpp %d, type %s format %s)\n",
|
||||
__FUNCTION__, region->cpp,
|
||||
_mesa_lookup_enum_by_nr(type), _mesa_lookup_enum_by_nr(format));
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void
|
||||
intelInitPixelFuncs(struct dd_function_table *functions)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -34,10 +34,6 @@ void intelInitPixelFuncs(struct dd_function_table *functions);
|
|||
bool intel_check_blit_fragment_ops(struct gl_context * ctx,
|
||||
bool src_alpha_is_one);
|
||||
|
||||
bool intel_check_blit_format(struct intel_region *region,
|
||||
GLenum format, GLenum type);
|
||||
|
||||
|
||||
void intelReadPixels(struct gl_context * ctx,
|
||||
GLint x, GLint y,
|
||||
GLsizei width, GLsizei height,
|
||||
|
|
|
|||
|
|
@ -39,6 +39,8 @@
|
|||
#include "intel_context.h"
|
||||
#include "intel_blit.h"
|
||||
#include "intel_buffers.h"
|
||||
#include "intel_fbo.h"
|
||||
#include "intel_mipmap_tree.h"
|
||||
#include "intel_regions.h"
|
||||
#include "intel_pixel.h"
|
||||
#include "intel_buffer_objects.h"
|
||||
|
|
@ -94,9 +96,12 @@ do_blit_readpixels(struct gl_context * ctx,
|
|||
return false;
|
||||
}
|
||||
|
||||
struct gl_renderbuffer *rb = ctx->ReadBuffer->_ColorReadBuffer;
|
||||
struct intel_renderbuffer *irb = intel_renderbuffer(rb);
|
||||
|
||||
if (ctx->_ImageTransferState ||
|
||||
!intel_check_blit_format(src, format, type)) {
|
||||
!_mesa_format_matches_format_and_type(irb->mt->format, format, type,
|
||||
false)) {
|
||||
DBG("%s - bad format for blit\n", __FUNCTION__);
|
||||
return false;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue