19e68e191ac9d32f2f93e840a66127e724b442756Eric Anholt/************************************************************************** 29e68e191ac9d32f2f93e840a66127e724b442756Eric Anholt * 39e68e191ac9d32f2f93e840a66127e724b442756Eric Anholt * Copyright 2003 Tungsten Graphics, Inc., Cedar Park, Texas. 49e68e191ac9d32f2f93e840a66127e724b442756Eric Anholt * All Rights Reserved. 59e68e191ac9d32f2f93e840a66127e724b442756Eric Anholt * 69e68e191ac9d32f2f93e840a66127e724b442756Eric Anholt * Permission is hereby granted, free of charge, to any person obtaining a 79e68e191ac9d32f2f93e840a66127e724b442756Eric Anholt * copy of this software and associated documentation files (the 89e68e191ac9d32f2f93e840a66127e724b442756Eric Anholt * "Software"), to deal in the Software without restriction, including 99e68e191ac9d32f2f93e840a66127e724b442756Eric Anholt * without limitation the rights to use, copy, modify, merge, publish, 109e68e191ac9d32f2f93e840a66127e724b442756Eric Anholt * distribute, sub license, and/or sell copies of the Software, and to 119e68e191ac9d32f2f93e840a66127e724b442756Eric Anholt * permit persons to whom the Software is furnished to do so, subject to 129e68e191ac9d32f2f93e840a66127e724b442756Eric Anholt * the following conditions: 139e68e191ac9d32f2f93e840a66127e724b442756Eric Anholt * 149e68e191ac9d32f2f93e840a66127e724b442756Eric Anholt * The above copyright notice and this permission notice (including the 159e68e191ac9d32f2f93e840a66127e724b442756Eric Anholt * next paragraph) shall be included in all copies or substantial portions 169e68e191ac9d32f2f93e840a66127e724b442756Eric Anholt * of the Software. 179e68e191ac9d32f2f93e840a66127e724b442756Eric Anholt * 189e68e191ac9d32f2f93e840a66127e724b442756Eric Anholt * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 199e68e191ac9d32f2f93e840a66127e724b442756Eric Anholt * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 209e68e191ac9d32f2f93e840a66127e724b442756Eric Anholt * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 219e68e191ac9d32f2f93e840a66127e724b442756Eric Anholt * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR 229e68e191ac9d32f2f93e840a66127e724b442756Eric Anholt * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 239e68e191ac9d32f2f93e840a66127e724b442756Eric Anholt * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 249e68e191ac9d32f2f93e840a66127e724b442756Eric Anholt * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 259e68e191ac9d32f2f93e840a66127e724b442756Eric Anholt * 269e68e191ac9d32f2f93e840a66127e724b442756Eric Anholt **************************************************************************/ 279e68e191ac9d32f2f93e840a66127e724b442756Eric Anholt 28ecadb51bbcb972a79f3ed79e65a7986b9396e757Brian Paul#include "main/glheader.h" 29ecadb51bbcb972a79f3ed79e65a7986b9396e757Brian Paul#include "main/image.h" 30ecadb51bbcb972a79f3ed79e65a7986b9396e757Brian Paul#include "main/state.h" 31ecadb51bbcb972a79f3ed79e65a7986b9396e757Brian Paul#include "main/mtypes.h" 321df72402d99145425531297eef6772b88ce5225dEric Anholt#include "main/condrender.h" 33c738ea1191cd1b5a0dc60b0e6d05fd918083e961Paul Berry#include "main/fbobject.h" 3416a1f68c391688a631d1d8d47cd1ac78800bcffcBrian Paul#include "drivers/common/meta.h" 359e68e191ac9d32f2f93e840a66127e724b442756Eric Anholt 369e68e191ac9d32f2f93e840a66127e724b442756Eric Anholt#include "intel_context.h" 379e68e191ac9d32f2f93e840a66127e724b442756Eric Anholt#include "intel_buffers.h" 38da2816a45e6e3a33246a341fee72e6f893f315d9Chad Versace#include "intel_mipmap_tree.h" 399e68e191ac9d32f2f93e840a66127e724b442756Eric Anholt#include "intel_regions.h" 409e68e191ac9d32f2f93e840a66127e724b442756Eric Anholt#include "intel_pixel.h" 41ee49ac8742c52696cba8cc5ca50459f8a13153a1Kristian Høgsberg#include "intel_fbo.h" 429e68e191ac9d32f2f93e840a66127e724b442756Eric Anholt 439e68e191ac9d32f2f93e840a66127e724b442756Eric Anholt#define FILE_DEBUG_FLAG DEBUG_PIXEL 449e68e191ac9d32f2f93e840a66127e724b442756Eric Anholt 459e68e191ac9d32f2f93e840a66127e724b442756Eric Anholt/** 469e68e191ac9d32f2f93e840a66127e724b442756Eric Anholt * Check if any fragment operations are in effect which might effect 479e68e191ac9d32f2f93e840a66127e724b442756Eric Anholt * glCopyPixels. Differs from intel_check_blit_fragment_ops in that 489e68e191ac9d32f2f93e840a66127e724b442756Eric Anholt * we allow Scissor. 499e68e191ac9d32f2f93e840a66127e724b442756Eric Anholt */ 502e5a1a254ed81b1d3efa6064f48183eefac784d0Kenneth Graunkestatic bool 51f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergintel_check_copypixel_blit_fragment_ops(struct gl_context * ctx) 529e68e191ac9d32f2f93e840a66127e724b442756Eric Anholt{ 539e68e191ac9d32f2f93e840a66127e724b442756Eric Anholt if (ctx->NewState) 549e68e191ac9d32f2f93e840a66127e724b442756Eric Anholt _mesa_update_state(ctx); 559e68e191ac9d32f2f93e840a66127e724b442756Eric Anholt 569e68e191ac9d32f2f93e840a66127e724b442756Eric Anholt /* Could do logicop with the blitter: 579e68e191ac9d32f2f93e840a66127e724b442756Eric Anholt */ 589e68e191ac9d32f2f93e840a66127e724b442756Eric Anholt return !(ctx->_ImageTransferState || 599e68e191ac9d32f2f93e840a66127e724b442756Eric Anholt ctx->Color.AlphaEnabled || 609e68e191ac9d32f2f93e840a66127e724b442756Eric Anholt ctx->Depth.Test || 619e68e191ac9d32f2f93e840a66127e724b442756Eric Anholt ctx->Fog.Enabled || 6291e61f435a71436c209934a0ece165b540aba3e0Brian Paul ctx->Stencil._Enabled || 63fd5511d27fc44096117c47ab503fb5b47f993061Brian Paul !ctx->Color.ColorMask[0][0] || 64fd5511d27fc44096117c47ab503fb5b47f993061Brian Paul !ctx->Color.ColorMask[0][1] || 65fd5511d27fc44096117c47ab503fb5b47f993061Brian Paul !ctx->Color.ColorMask[0][2] || 66fd5511d27fc44096117c47ab503fb5b47f993061Brian Paul !ctx->Color.ColorMask[0][3] || 679e68e191ac9d32f2f93e840a66127e724b442756Eric Anholt ctx->Texture._EnabledUnits || 689e68e191ac9d32f2f93e840a66127e724b442756Eric Anholt ctx->FragmentProgram._Enabled || 699e68e191ac9d32f2f93e840a66127e724b442756Eric Anholt ctx->Color.BlendEnabled); 709e68e191ac9d32f2f93e840a66127e724b442756Eric Anholt} 719e68e191ac9d32f2f93e840a66127e724b442756Eric Anholt 729e68e191ac9d32f2f93e840a66127e724b442756Eric Anholt 739e68e191ac9d32f2f93e840a66127e724b442756Eric Anholt/** 749e68e191ac9d32f2f93e840a66127e724b442756Eric Anholt * CopyPixels with the blitter. Don't support zooming, pixel transfer, etc. 759e68e191ac9d32f2f93e840a66127e724b442756Eric Anholt */ 762e5a1a254ed81b1d3efa6064f48183eefac784d0Kenneth Graunkestatic bool 77f9995b30756140724f41daf963fa06167912be7fKristian Høgsbergdo_blit_copypixels(struct gl_context * ctx, 789e68e191ac9d32f2f93e840a66127e724b442756Eric Anholt GLint srcx, GLint srcy, 799e68e191ac9d32f2f93e840a66127e724b442756Eric Anholt GLsizei width, GLsizei height, 809e68e191ac9d32f2f93e840a66127e724b442756Eric Anholt GLint dstx, GLint dsty, GLenum type) 819e68e191ac9d32f2f93e840a66127e724b442756Eric Anholt{ 829e68e191ac9d32f2f93e840a66127e724b442756Eric Anholt struct intel_context *intel = intel_context(ctx); 83a0625fa28152db08f026dc9856035c0908060154Eric Anholt struct gl_framebuffer *fb = ctx->DrawBuffer; 84a0625fa28152db08f026dc9856035c0908060154Eric Anholt struct gl_framebuffer *read_fb = ctx->ReadBuffer; 853f912e0b3a84ef3703b974a6c29dbe3ec8e817b2Eric Anholt GLint orig_dstx; 863f912e0b3a84ef3703b974a6c29dbe3ec8e817b2Eric Anholt GLint orig_dsty; 873f912e0b3a84ef3703b974a6c29dbe3ec8e817b2Eric Anholt GLint orig_srcx; 883f912e0b3a84ef3703b974a6c29dbe3ec8e817b2Eric Anholt GLint orig_srcy; 892e5a1a254ed81b1d3efa6064f48183eefac784d0Kenneth Graunke bool flip = false; 90df46eb8ec082e020ae7e45d3f584cb1d3dd55653Eric Anholt struct intel_renderbuffer *draw_irb = NULL; 91df46eb8ec082e020ae7e45d3f584cb1d3dd55653Eric Anholt struct intel_renderbuffer *read_irb = NULL; 92924de7dc96f4607cb3d833637b5f69f4b9e2a6d0Brian Paul gl_format read_format, draw_format; 93df46eb8ec082e020ae7e45d3f584cb1d3dd55653Eric Anholt 94df46eb8ec082e020ae7e45d3f584cb1d3dd55653Eric Anholt /* Update draw buffer bounds */ 95df46eb8ec082e020ae7e45d3f584cb1d3dd55653Eric Anholt _mesa_update_state(ctx); 96df46eb8ec082e020ae7e45d3f584cb1d3dd55653Eric Anholt 97df46eb8ec082e020ae7e45d3f584cb1d3dd55653Eric Anholt switch (type) { 98df46eb8ec082e020ae7e45d3f584cb1d3dd55653Eric Anholt case GL_COLOR: 99df46eb8ec082e020ae7e45d3f584cb1d3dd55653Eric Anholt if (fb->_NumColorDrawBuffers != 1) { 100df46eb8ec082e020ae7e45d3f584cb1d3dd55653Eric Anholt fallback_debug("glCopyPixels() fallback: MRT\n"); 1012e5a1a254ed81b1d3efa6064f48183eefac784d0Kenneth Graunke return false; 102df46eb8ec082e020ae7e45d3f584cb1d3dd55653Eric Anholt } 1039e68e191ac9d32f2f93e840a66127e724b442756Eric Anholt 104df46eb8ec082e020ae7e45d3f584cb1d3dd55653Eric Anholt draw_irb = intel_renderbuffer(fb->_ColorDrawBuffers[0]); 105df46eb8ec082e020ae7e45d3f584cb1d3dd55653Eric Anholt read_irb = intel_renderbuffer(read_fb->_ColorReadBuffer); 106df46eb8ec082e020ae7e45d3f584cb1d3dd55653Eric Anholt break; 107df46eb8ec082e020ae7e45d3f584cb1d3dd55653Eric Anholt case GL_DEPTH_STENCIL_EXT: 108df46eb8ec082e020ae7e45d3f584cb1d3dd55653Eric Anholt draw_irb = intel_renderbuffer(fb->Attachment[BUFFER_DEPTH].Renderbuffer); 109df46eb8ec082e020ae7e45d3f584cb1d3dd55653Eric Anholt read_irb = 110df46eb8ec082e020ae7e45d3f584cb1d3dd55653Eric Anholt intel_renderbuffer(read_fb->Attachment[BUFFER_DEPTH].Renderbuffer); 111df46eb8ec082e020ae7e45d3f584cb1d3dd55653Eric Anholt break; 112df46eb8ec082e020ae7e45d3f584cb1d3dd55653Eric Anholt case GL_DEPTH: 113df46eb8ec082e020ae7e45d3f584cb1d3dd55653Eric Anholt fallback_debug("glCopyPixels() fallback: GL_DEPTH\n"); 1142e5a1a254ed81b1d3efa6064f48183eefac784d0Kenneth Graunke return false; 115df46eb8ec082e020ae7e45d3f584cb1d3dd55653Eric Anholt case GL_STENCIL: 116df46eb8ec082e020ae7e45d3f584cb1d3dd55653Eric Anholt fallback_debug("glCopyPixels() fallback: GL_STENCIL\n"); 1172e5a1a254ed81b1d3efa6064f48183eefac784d0Kenneth Graunke return false; 118df46eb8ec082e020ae7e45d3f584cb1d3dd55653Eric Anholt default: 119df46eb8ec082e020ae7e45d3f584cb1d3dd55653Eric Anholt fallback_debug("glCopyPixels(): Unknown type\n"); 1202e5a1a254ed81b1d3efa6064f48183eefac784d0Kenneth Graunke return false; 121bdd7506f10d13018a9c71270eed5d3d295978081Eric Anholt } 122bdd7506f10d13018a9c71270eed5d3d295978081Eric Anholt 123df46eb8ec082e020ae7e45d3f584cb1d3dd55653Eric Anholt if (!draw_irb) { 124df46eb8ec082e020ae7e45d3f584cb1d3dd55653Eric Anholt fallback_debug("glCopyPixels() fallback: missing draw buffer\n"); 1252e5a1a254ed81b1d3efa6064f48183eefac784d0Kenneth Graunke return false; 126df46eb8ec082e020ae7e45d3f584cb1d3dd55653Eric Anholt } 127df46eb8ec082e020ae7e45d3f584cb1d3dd55653Eric Anholt 128df46eb8ec082e020ae7e45d3f584cb1d3dd55653Eric Anholt if (!read_irb) { 129df46eb8ec082e020ae7e45d3f584cb1d3dd55653Eric Anholt fallback_debug("glCopyPixels() fallback: missing read buffer\n"); 1302e5a1a254ed81b1d3efa6064f48183eefac784d0Kenneth Graunke return false; 131df46eb8ec082e020ae7e45d3f584cb1d3dd55653Eric Anholt } 132df46eb8ec082e020ae7e45d3f584cb1d3dd55653Eric Anholt 133924de7dc96f4607cb3d833637b5f69f4b9e2a6d0Brian Paul read_format = intel_rb_format(read_irb); 134924de7dc96f4607cb3d833637b5f69f4b9e2a6d0Brian Paul draw_format = intel_rb_format(draw_irb); 135924de7dc96f4607cb3d833637b5f69f4b9e2a6d0Brian Paul 136924de7dc96f4607cb3d833637b5f69f4b9e2a6d0Brian Paul if (draw_format != read_format && 137924de7dc96f4607cb3d833637b5f69f4b9e2a6d0Brian Paul !(draw_format == MESA_FORMAT_XRGB8888 && 138924de7dc96f4607cb3d833637b5f69f4b9e2a6d0Brian Paul read_format == MESA_FORMAT_ARGB8888)) { 139df46eb8ec082e020ae7e45d3f584cb1d3dd55653Eric Anholt fallback_debug("glCopyPixels() fallback: mismatched formats (%s -> %s\n", 140924de7dc96f4607cb3d833637b5f69f4b9e2a6d0Brian Paul _mesa_get_format_name(read_format), 141924de7dc96f4607cb3d833637b5f69f4b9e2a6d0Brian Paul _mesa_get_format_name(draw_format)); 1422e5a1a254ed81b1d3efa6064f48183eefac784d0Kenneth Graunke return false; 143df46eb8ec082e020ae7e45d3f584cb1d3dd55653Eric Anholt } 144b9752a2bd615d136369af63ed3d45cc10adf21e7Eric Anholt 1459e68e191ac9d32f2f93e840a66127e724b442756Eric Anholt /* Copypixels can be more than a straight copy. Ensure all the 1469e68e191ac9d32f2f93e840a66127e724b442756Eric Anholt * extra operations are disabled: 1479e68e191ac9d32f2f93e840a66127e724b442756Eric Anholt */ 1489e68e191ac9d32f2f93e840a66127e724b442756Eric Anholt if (!intel_check_copypixel_blit_fragment_ops(ctx) || 1499e68e191ac9d32f2f93e840a66127e724b442756Eric Anholt ctx->Pixel.ZoomX != 1.0F || ctx->Pixel.ZoomY != 1.0F) 1502e5a1a254ed81b1d3efa6064f48183eefac784d0Kenneth Graunke return false; 1519e68e191ac9d32f2f93e840a66127e724b442756Eric Anholt 1526422cf387baef75df9e5dbbed5cea4c0f495fe41Kristian Høgsberg intel_prepare_render(intel); 1536422cf387baef75df9e5dbbed5cea4c0f495fe41Kristian Høgsberg 154c4775a27e3aaa2006b98f225387499b79bc609efKristian Høgsberg intel_flush(&intel->ctx); 1559e68e191ac9d32f2f93e840a66127e724b442756Eric Anholt 1563f912e0b3a84ef3703b974a6c29dbe3ec8e817b2Eric Anholt /* Clip to destination buffer. */ 1573f912e0b3a84ef3703b974a6c29dbe3ec8e817b2Eric Anholt orig_dstx = dstx; 1583f912e0b3a84ef3703b974a6c29dbe3ec8e817b2Eric Anholt orig_dsty = dsty; 1593f912e0b3a84ef3703b974a6c29dbe3ec8e817b2Eric Anholt if (!_mesa_clip_to_region(fb->_Xmin, fb->_Ymin, 1603f912e0b3a84ef3703b974a6c29dbe3ec8e817b2Eric Anholt fb->_Xmax, fb->_Ymax, 1613f912e0b3a84ef3703b974a6c29dbe3ec8e817b2Eric Anholt &dstx, &dsty, &width, &height)) 1623f912e0b3a84ef3703b974a6c29dbe3ec8e817b2Eric Anholt goto out; 1633f912e0b3a84ef3703b974a6c29dbe3ec8e817b2Eric Anholt /* Adjust src coords for our post-clipped destination origin */ 1643f912e0b3a84ef3703b974a6c29dbe3ec8e817b2Eric Anholt srcx += dstx - orig_dstx; 1653f912e0b3a84ef3703b974a6c29dbe3ec8e817b2Eric Anholt srcy += dsty - orig_dsty; 1663f912e0b3a84ef3703b974a6c29dbe3ec8e817b2Eric Anholt 1673f912e0b3a84ef3703b974a6c29dbe3ec8e817b2Eric Anholt /* Clip to source buffer. */ 1683f912e0b3a84ef3703b974a6c29dbe3ec8e817b2Eric Anholt orig_srcx = srcx; 1693f912e0b3a84ef3703b974a6c29dbe3ec8e817b2Eric Anholt orig_srcy = srcy; 1703f912e0b3a84ef3703b974a6c29dbe3ec8e817b2Eric Anholt if (!_mesa_clip_to_region(0, 0, 1713f912e0b3a84ef3703b974a6c29dbe3ec8e817b2Eric Anholt read_fb->Width, read_fb->Height, 1723f912e0b3a84ef3703b974a6c29dbe3ec8e817b2Eric Anholt &srcx, &srcy, &width, &height)) 1733f912e0b3a84ef3703b974a6c29dbe3ec8e817b2Eric Anholt goto out; 1743f912e0b3a84ef3703b974a6c29dbe3ec8e817b2Eric Anholt /* Adjust dst coords for our post-clipped source origin */ 1753f912e0b3a84ef3703b974a6c29dbe3ec8e817b2Eric Anholt dstx += srcx - orig_srcx; 1763f912e0b3a84ef3703b974a6c29dbe3ec8e817b2Eric Anholt dsty += srcy - orig_srcy; 1773f912e0b3a84ef3703b974a6c29dbe3ec8e817b2Eric Anholt 178a589da14dee0c2a32e6e529f1a390b01a3ee4001Eric Anholt /* Flip dest Y if it's a window system framebuffer. */ 179c738ea1191cd1b5a0dc60b0e6d05fd918083e961Paul Berry if (_mesa_is_winsys_fbo(fb)) { 180a589da14dee0c2a32e6e529f1a390b01a3ee4001Eric Anholt /* copypixels to a window system framebuffer */ 1813f912e0b3a84ef3703b974a6c29dbe3ec8e817b2Eric Anholt dsty = fb->Height - dsty - height; 182a589da14dee0c2a32e6e529f1a390b01a3ee4001Eric Anholt flip = !flip; 1839e68e191ac9d32f2f93e840a66127e724b442756Eric Anholt } 1849e68e191ac9d32f2f93e840a66127e724b442756Eric Anholt 185a589da14dee0c2a32e6e529f1a390b01a3ee4001Eric Anholt /* Flip source Y if it's a window system framebuffer. */ 186c738ea1191cd1b5a0dc60b0e6d05fd918083e961Paul Berry if (_mesa_is_winsys_fbo(read_fb)) { 187a589da14dee0c2a32e6e529f1a390b01a3ee4001Eric Anholt srcy = read_fb->Height - srcy - height; 188a589da14dee0c2a32e6e529f1a390b01a3ee4001Eric Anholt flip = !flip; 189a589da14dee0c2a32e6e529f1a390b01a3ee4001Eric Anholt } 1903f912e0b3a84ef3703b974a6c29dbe3ec8e817b2Eric Anholt 191df46eb8ec082e020ae7e45d3f584cb1d3dd55653Eric Anholt srcx += read_irb->draw_x; 192df46eb8ec082e020ae7e45d3f584cb1d3dd55653Eric Anholt srcy += read_irb->draw_y; 193df46eb8ec082e020ae7e45d3f584cb1d3dd55653Eric Anholt dstx += draw_irb->draw_x; 194df46eb8ec082e020ae7e45d3f584cb1d3dd55653Eric Anholt dsty += draw_irb->draw_y; 195df46eb8ec082e020ae7e45d3f584cb1d3dd55653Eric Anholt 1963f912e0b3a84ef3703b974a6c29dbe3ec8e817b2Eric Anholt if (!intel_region_copy(intel, 197da2816a45e6e3a33246a341fee72e6f893f315d9Chad Versace draw_irb->mt->region, 0, dstx, dsty, 198da2816a45e6e3a33246a341fee72e6f893f315d9Chad Versace read_irb->mt->region, 0, srcx, srcy, 199a589da14dee0c2a32e6e529f1a390b01a3ee4001Eric Anholt width, height, flip, 2003f912e0b3a84ef3703b974a6c29dbe3ec8e817b2Eric Anholt ctx->Color.ColorLogicOpEnabled ? 2013f912e0b3a84ef3703b974a6c29dbe3ec8e817b2Eric Anholt ctx->Color.LogicOp : GL_COPY)) { 2023f912e0b3a84ef3703b974a6c29dbe3ec8e817b2Eric Anholt DBG("%s: blit failure\n", __FUNCTION__); 2032e5a1a254ed81b1d3efa6064f48183eefac784d0Kenneth Graunke return false; 2043f912e0b3a84ef3703b974a6c29dbe3ec8e817b2Eric Anholt } 2053f912e0b3a84ef3703b974a6c29dbe3ec8e817b2Eric Anholt 2063f912e0b3a84ef3703b974a6c29dbe3ec8e817b2Eric Anholtout: 207a7e4a311e971005f7b23572ff3ca93f6d3c17edfEric Anholt intel_check_front_buffer_rendering(intel); 208a7e4a311e971005f7b23572ff3ca93f6d3c17edfEric Anholt 2099e68e191ac9d32f2f93e840a66127e724b442756Eric Anholt DBG("%s: success\n", __FUNCTION__); 2102e5a1a254ed81b1d3efa6064f48183eefac784d0Kenneth Graunke return true; 2119e68e191ac9d32f2f93e840a66127e724b442756Eric Anholt} 2129e68e191ac9d32f2f93e840a66127e724b442756Eric Anholt 2139e68e191ac9d32f2f93e840a66127e724b442756Eric Anholt 2149e68e191ac9d32f2f93e840a66127e724b442756Eric Anholtvoid 215f9995b30756140724f41daf963fa06167912be7fKristian HøgsbergintelCopyPixels(struct gl_context * ctx, 2169e68e191ac9d32f2f93e840a66127e724b442756Eric Anholt GLint srcx, GLint srcy, 2179e68e191ac9d32f2f93e840a66127e724b442756Eric Anholt GLsizei width, GLsizei height, 2189e68e191ac9d32f2f93e840a66127e724b442756Eric Anholt GLint destx, GLint desty, GLenum type) 2199e68e191ac9d32f2f93e840a66127e724b442756Eric Anholt{ 220bb1540835056cdea5db6f55b19c0c87358f14cd1Eric Anholt DBG("%s\n", __FUNCTION__); 2219e68e191ac9d32f2f93e840a66127e724b442756Eric Anholt 2221df72402d99145425531297eef6772b88ce5225dEric Anholt if (!_mesa_check_conditional_render(ctx)) 2231df72402d99145425531297eef6772b88ce5225dEric Anholt return; 2241df72402d99145425531297eef6772b88ce5225dEric Anholt 2259e68e191ac9d32f2f93e840a66127e724b442756Eric Anholt if (do_blit_copypixels(ctx, srcx, srcy, width, height, destx, desty, type)) 2269e68e191ac9d32f2f93e840a66127e724b442756Eric Anholt return; 2279e68e191ac9d32f2f93e840a66127e724b442756Eric Anholt 22815e6d08670eeaf843ae3d6e557d595da750a5e99Brian Paul /* this will use swrast if needed */ 2294de8e2123ebeb50db252b2bb57fb167058fa4683Brian Paul _mesa_meta_CopyPixels(ctx, srcx, srcy, width, height, destx, desty, type); 2309e68e191ac9d32f2f93e840a66127e724b442756Eric Anholt} 231