i915_surface.c revision c76efb96b405e43e3261d1dc9e8812fdb2cfbac8
101c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell/************************************************************************** 201c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell * 301c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell * Copyright 2003 Tungsten Graphics, Inc., Cedar Park, Texas. 401c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell * All Rights Reserved. 501c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell * 601c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell * Permission is hereby granted, free of charge, to any person obtaining a 701c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell * copy of this software and associated documentation files (the 801c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell * "Software"), to deal in the Software without restriction, including 901c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell * without limitation the rights to use, copy, modify, merge, publish, 1001c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell * distribute, sub license, and/or sell copies of the Software, and to 1101c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell * permit persons to whom the Software is furnished to do so, subject to 1201c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell * the following conditions: 1301c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell * 1401c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell * The above copyright notice and this permission notice (including the 1501c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell * next paragraph) shall be included in all copies or substantial portions 1601c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell * of the Software. 1701c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell * 1801c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 1901c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 2001c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 2101c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR 2201c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 2301c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 2401c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 2501c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell * 2601c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell **************************************************************************/ 2701c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 2801c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell#include "i915_context.h" 2911a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer#include "i915_blit.h" 3001c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell#include "i915_state.h" 3101c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell#include "pipe/p_defines.h" 32b859cdf6f191b4d8b56537c8dc30082a7e2d94b3Michel Dänzer#include "pipe/p_inlines.h" 3340a86b20478024ca7c55400019c536cb5ff631d1Keith Whitwell#include "pipe/p_util.h" 347de874ec2c7b9e3aff7f81b7e30045b45381fbadMichal Krol#include "pipe/p_inlines.h" 35e4f6f0ec02133e9297c3f2db787dee14bf0ae6e1Brian#include "pipe/p_winsys.h" 36263e8f057290961c9dd603ffa69f25a7a253301aBrian#include "pipe/util/p_tile.h" 3701c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 3801c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 39e4f6f0ec02133e9297c3f2db787dee14bf0ae6e1Brian/* 40e4f6f0ec02133e9297c3f2db787dee14bf0ae6e1Brian * XXX note: same as code in sp_surface.c 41e4f6f0ec02133e9297c3f2db787dee14bf0ae6e1Brian */ 42e4f6f0ec02133e9297c3f2db787dee14bf0ae6e1Brianstatic struct pipe_surface * 43e4f6f0ec02133e9297c3f2db787dee14bf0ae6e1Briani915_get_tex_surface(struct pipe_context *pipe, 44753db0d8407147393a7b0622ae3fa28f68d0353dMichel Dänzer struct pipe_texture *pt, 45e4f6f0ec02133e9297c3f2db787dee14bf0ae6e1Brian unsigned face, unsigned level, unsigned zslice) 46e4f6f0ec02133e9297c3f2db787dee14bf0ae6e1Brian{ 47753db0d8407147393a7b0622ae3fa28f68d0353dMichel Dänzer struct i915_texture *tex = (struct i915_texture *)pt; 48e4f6f0ec02133e9297c3f2db787dee14bf0ae6e1Brian struct pipe_surface *ps; 49e4f6f0ec02133e9297c3f2db787dee14bf0ae6e1Brian unsigned offset; /* in bytes */ 507523f490b0166b00e24429c33f8958c3be72ccb5Brian 51753db0d8407147393a7b0622ae3fa28f68d0353dMichel Dänzer offset = tex->level_offset[level]; 5201c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 53753db0d8407147393a7b0622ae3fa28f68d0353dMichel Dänzer if (pt->target == PIPE_TEXTURE_CUBE) { 54753db0d8407147393a7b0622ae3fa28f68d0353dMichel Dänzer offset += tex->image_offset[level][face] * pt->cpp; 55e4f6f0ec02133e9297c3f2db787dee14bf0ae6e1Brian } 56753db0d8407147393a7b0622ae3fa28f68d0353dMichel Dänzer else if (pt->target == PIPE_TEXTURE_3D) { 57753db0d8407147393a7b0622ae3fa28f68d0353dMichel Dänzer offset += tex->image_offset[level][zslice] * pt->cpp; 58e4f6f0ec02133e9297c3f2db787dee14bf0ae6e1Brian } 59e4f6f0ec02133e9297c3f2db787dee14bf0ae6e1Brian else { 60e4f6f0ec02133e9297c3f2db787dee14bf0ae6e1Brian assert(face == 0); 61e4f6f0ec02133e9297c3f2db787dee14bf0ae6e1Brian assert(zslice == 0); 62e4f6f0ec02133e9297c3f2db787dee14bf0ae6e1Brian } 63e4f6f0ec02133e9297c3f2db787dee14bf0ae6e1Brian 6412363674e5aa39b780020339038186b7715bd4b2José Fonseca ps = pipe->winsys->surface_alloc(pipe->winsys); 65e4f6f0ec02133e9297c3f2db787dee14bf0ae6e1Brian if (ps) { 66e4f6f0ec02133e9297c3f2db787dee14bf0ae6e1Brian assert(ps->refcount); 67b859cdf6f191b4d8b56537c8dc30082a7e2d94b3Michel Dänzer pipe->winsys->buffer_reference(pipe->winsys, &ps->buffer, tex->buffer); 6812363674e5aa39b780020339038186b7715bd4b2José Fonseca ps->format = pt->format; 69753db0d8407147393a7b0622ae3fa28f68d0353dMichel Dänzer ps->cpp = pt->cpp; 70753db0d8407147393a7b0622ae3fa28f68d0353dMichel Dänzer ps->width = pt->width[level]; 71753db0d8407147393a7b0622ae3fa28f68d0353dMichel Dänzer ps->height = pt->height[level]; 72753db0d8407147393a7b0622ae3fa28f68d0353dMichel Dänzer ps->pitch = tex->pitch; 73e4f6f0ec02133e9297c3f2db787dee14bf0ae6e1Brian ps->offset = offset; 74e4f6f0ec02133e9297c3f2db787dee14bf0ae6e1Brian } 75e4f6f0ec02133e9297c3f2db787dee14bf0ae6e1Brian return ps; 7601c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell} 7701c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 7801c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell 7911a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzerstatic void 8047b5138d2d6533ac1cd818713fd0678ec3c7aa1bBriancopy_rect(ubyte * dst, 8147b5138d2d6533ac1cd818713fd0678ec3c7aa1bBrian unsigned cpp, 8247b5138d2d6533ac1cd818713fd0678ec3c7aa1bBrian unsigned dst_pitch, 8347b5138d2d6533ac1cd818713fd0678ec3c7aa1bBrian unsigned dst_x, 8447b5138d2d6533ac1cd818713fd0678ec3c7aa1bBrian unsigned dst_y, 8547b5138d2d6533ac1cd818713fd0678ec3c7aa1bBrian unsigned width, 8647b5138d2d6533ac1cd818713fd0678ec3c7aa1bBrian unsigned height, 8747b5138d2d6533ac1cd818713fd0678ec3c7aa1bBrian const ubyte *src, 8847b5138d2d6533ac1cd818713fd0678ec3c7aa1bBrian unsigned src_pitch, 8947b5138d2d6533ac1cd818713fd0678ec3c7aa1bBrian unsigned src_x, 9047b5138d2d6533ac1cd818713fd0678ec3c7aa1bBrian unsigned src_y) 9111a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer{ 9211a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer unsigned i; 9311a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer 9411a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer dst_pitch *= cpp; 9511a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer src_pitch *= cpp; 9611a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer dst += dst_x * cpp; 9711a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer src += src_x * cpp; 9811a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer dst += dst_y * dst_pitch; 9911a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer src += src_y * dst_pitch; 10011a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer width *= cpp; 10111a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer 10211a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer if (width == dst_pitch && width == src_pitch) 10311a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer memcpy(dst, src, height * width); 10411a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer else { 10511a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer for (i = 0; i < height; i++) { 10611a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer memcpy(dst, src, width); 10711a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer dst += dst_pitch; 10811a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer src += src_pitch; 10911a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer } 11011a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer } 11111a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer} 11211a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer 11311a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer 11411a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer/* Upload data to a rectangular sub-region. Lots of choices how to do this: 11511a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer * 11611a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer * - memcpy by span to current destination 11711a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer * - upload data as new buffer and blit 11811a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer * 11911a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer * Currently always memcpy. 12011a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer */ 12111a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzerstatic void 12211a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzeri915_surface_data(struct pipe_context *pipe, 12311a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer struct pipe_surface *dst, 12411a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer unsigned dstx, unsigned dsty, 12511a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer const void *src, unsigned src_pitch, 12611a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer unsigned srcx, unsigned srcy, unsigned width, unsigned height) 12711a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer{ 12847b5138d2d6533ac1cd818713fd0678ec3c7aa1bBrian copy_rect(pipe_surface_map(dst), 12947b5138d2d6533ac1cd818713fd0678ec3c7aa1bBrian dst->cpp, dst->pitch, 13047b5138d2d6533ac1cd818713fd0678ec3c7aa1bBrian dstx, dsty, width, height, src, src_pitch, srcx, srcy); 13111a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer 132b859cdf6f191b4d8b56537c8dc30082a7e2d94b3Michel Dänzer pipe_surface_unmap(dst); 13311a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer} 13411a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer 13511a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer 13611a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer/* Assumes all values are within bounds -- no checking at this level - 13711a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer * do it higher up if required. 13811a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer */ 13911a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzerstatic void 14011a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzeri915_surface_copy(struct pipe_context *pipe, 14111a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer struct pipe_surface *dst, 14211a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer unsigned dstx, unsigned dsty, 14311a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer struct pipe_surface *src, 14411a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer unsigned srcx, unsigned srcy, unsigned width, unsigned height) 14511a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer{ 14611a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer assert( dst != src ); 14711a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer assert( dst->cpp == src->cpp ); 14811a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer 14911a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer if (0) { 15047b5138d2d6533ac1cd818713fd0678ec3c7aa1bBrian copy_rect(pipe_surface_map(dst), 15111a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer dst->cpp, 15211a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer dst->pitch, 15311a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer dstx, dsty, 15411a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer width, height, 155b859cdf6f191b4d8b56537c8dc30082a7e2d94b3Michel Dänzer pipe_surface_map(src), 15611a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer src->pitch, 15711a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer srcx, srcy); 15811a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer 159b859cdf6f191b4d8b56537c8dc30082a7e2d94b3Michel Dänzer pipe_surface_unmap(src); 160b859cdf6f191b4d8b56537c8dc30082a7e2d94b3Michel Dänzer pipe_surface_unmap(dst); 16111a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer } 16211a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer else { 16311a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer i915_copy_blit( i915_context(pipe), 16411a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer dst->cpp, 165b859cdf6f191b4d8b56537c8dc30082a7e2d94b3Michel Dänzer (short) src->pitch, src->buffer, src->offset, 166b859cdf6f191b4d8b56537c8dc30082a7e2d94b3Michel Dänzer (short) dst->pitch, dst->buffer, dst->offset, 16711a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer (short) srcx, (short) srcy, (short) dstx, (short) dsty, (short) width, (short) height ); 16811a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer } 16911a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer} 17011a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer 17111a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer/* Fill a rectangular sub-region. Need better logic about when to 17211a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer * push buffers into AGP - will currently do so whenever possible. 17311a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer */ 174c76efb96b405e43e3261d1dc9e8812fdb2cfbac8Michel Dänzerstatic void * 175c76efb96b405e43e3261d1dc9e8812fdb2cfbac8Michel Dänzerget_pointer(struct pipe_surface *dst, void *dst_map, unsigned x, unsigned y) 17611a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer{ 177c76efb96b405e43e3261d1dc9e8812fdb2cfbac8Michel Dänzer return (char *)dst_map + (y * dst->pitch + x) * dst->cpp; 17811a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer} 17911a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer 18011a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer 18111a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzerstatic void 18211a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzeri915_surface_fill(struct pipe_context *pipe, 18311a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer struct pipe_surface *dst, 18411a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer unsigned dstx, unsigned dsty, 18511a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer unsigned width, unsigned height, unsigned value) 18611a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer{ 18711a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer if (0) { 18811a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer unsigned i, j; 189c76efb96b405e43e3261d1dc9e8812fdb2cfbac8Michel Dänzer void *dst_map = pipe_surface_map(dst); 19011a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer 19111a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer switch (dst->cpp) { 19211a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer case 1: { 193c76efb96b405e43e3261d1dc9e8812fdb2cfbac8Michel Dänzer ubyte *row = get_pointer(dst, dst_map, dstx, dsty); 19411a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer for (i = 0; i < height; i++) { 19511a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer memset(row, value, width); 19611a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer row += dst->pitch; 19711a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer } 19811a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer } 19911a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer break; 20011a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer case 2: { 201c76efb96b405e43e3261d1dc9e8812fdb2cfbac8Michel Dänzer ushort *row = get_pointer(dst, dst_map, dstx, dsty); 20211a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer for (i = 0; i < height; i++) { 20311a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer for (j = 0; j < width; j++) 20411a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer row[j] = (ushort) value; 20511a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer row += dst->pitch; 20611a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer } 20711a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer } 20811a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer break; 20911a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer case 4: { 210c76efb96b405e43e3261d1dc9e8812fdb2cfbac8Michel Dänzer unsigned *row = get_pointer(dst, dst_map, dstx, dsty); 21111a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer for (i = 0; i < height; i++) { 21211a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer for (j = 0; j < width; j++) 21311a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer row[j] = value; 21411a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer row += dst->pitch; 21511a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer } 21611a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer } 21711a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer break; 21811a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer default: 21911a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer assert(0); 22011a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer break; 22111a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer } 222c76efb96b405e43e3261d1dc9e8812fdb2cfbac8Michel Dänzer 223c76efb96b405e43e3261d1dc9e8812fdb2cfbac8Michel Dänzer pipe_surface_unmap( dst ); 22411a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer } 22511a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer else { 22611a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer i915_fill_blit( i915_context(pipe), 22711a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer dst->cpp, 22811a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer (short) dst->pitch, 229b859cdf6f191b4d8b56537c8dc30082a7e2d94b3Michel Dänzer dst->buffer, dst->offset, 23011a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer (short) dstx, (short) dsty, 23111a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer (short) width, (short) height, 23211a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer value ); 23311a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer } 23411a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer} 23511a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer 23611a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer 23701c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwellvoid 23801c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwelli915_init_surface_functions(struct i915_context *i915) 23901c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell{ 240e4f6f0ec02133e9297c3f2db787dee14bf0ae6e1Brian i915->pipe.get_tex_surface = i915_get_tex_surface; 241263e8f057290961c9dd603ffa69f25a7a253301aBrian i915->pipe.get_tile = pipe_get_tile_raw; 242263e8f057290961c9dd603ffa69f25a7a253301aBrian i915->pipe.put_tile = pipe_put_tile_raw; 243263e8f057290961c9dd603ffa69f25a7a253301aBrian i915->pipe.get_tile_rgba = pipe_get_tile_rgba; 244263e8f057290961c9dd603ffa69f25a7a253301aBrian i915->pipe.put_tile_rgba = pipe_put_tile_rgba; 2454416514aa82e59eae559b59e49846931fdf85f56Brian 24611a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer i915->pipe.surface_data = i915_surface_data; 24711a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer i915->pipe.surface_copy = i915_surface_copy; 24811a80160fd60d1eb1541b49128c659526a5d8ac8Michel Dänzer i915->pipe.surface_fill = i915_surface_fill; 24901c35b52a1fccbe4253a96b9c0506ef6c991e44fKeith Whitwell} 250