nv50_surface.c revision 287c94ea4987033f9c99a2f91c5750c9083504ca
1857a3294a959015bf893241199f7fd7f7882a6abBen Skeggs/* 2857a3294a959015bf893241199f7fd7f7882a6abBen Skeggs * Copyright 2008 Ben Skeggs 3857a3294a959015bf893241199f7fd7f7882a6abBen Skeggs * 447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs * Permission is hereby granted, free of charge, to any person obtaining a 5857a3294a959015bf893241199f7fd7f7882a6abBen Skeggs * copy of this software and associated documentation files (the "Software"), 6857a3294a959015bf893241199f7fd7f7882a6abBen Skeggs * to deal in the Software without restriction, including without limitation 7857a3294a959015bf893241199f7fd7f7882a6abBen Skeggs * the rights to use, copy, modify, merge, publish, distribute, sublicense, 8857a3294a959015bf893241199f7fd7f7882a6abBen Skeggs * and/or sell copies of the Software, and to permit persons to whom the 9857a3294a959015bf893241199f7fd7f7882a6abBen Skeggs * Software is furnished to do so, subject to the following conditions: 10857a3294a959015bf893241199f7fd7f7882a6abBen Skeggs * 11857a3294a959015bf893241199f7fd7f7882a6abBen Skeggs * The above copyright notice and this permission notice shall be included in 12857a3294a959015bf893241199f7fd7f7882a6abBen Skeggs * all copies or substantial portions of the Software. 13857a3294a959015bf893241199f7fd7f7882a6abBen Skeggs * 14857a3294a959015bf893241199f7fd7f7882a6abBen Skeggs * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15857a3294a959015bf893241199f7fd7f7882a6abBen Skeggs * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16857a3294a959015bf893241199f7fd7f7882a6abBen Skeggs * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 17857a3294a959015bf893241199f7fd7f7882a6abBen Skeggs * THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 18857a3294a959015bf893241199f7fd7f7882a6abBen Skeggs * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF 19857a3294a959015bf893241199f7fd7f7882a6abBen Skeggs * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 20857a3294a959015bf893241199f7fd7f7882a6abBen Skeggs * SOFTWARE. 21857a3294a959015bf893241199f7fd7f7882a6abBen Skeggs */ 2247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 2313393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs#define __NOUVEAU_PUSH_H__ 2413393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs#include <stdint.h> 2513393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs#include "nouveau/nouveau_pushbuf.h" 2647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs#include "nv50_context.h" 27287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell#include "nv50_resource.h" 2847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs#include "pipe/p_defines.h" 2928486880ca3ec39419ccee0cb1a3bedc9ef7117cJosé Fonseca#include "util/u_inlines.h" 30f302fca5eb63e4bca8af5b35c585451486143e6aBen Skeggs 31f302fca5eb63e4bca8af5b35c585451486143e6aBen Skeggs#include "util/u_tile.h" 32e548babb1fc9230054674deb5e332f55319e5b91Christoph Bumiller#include "util/u_format.h" 3347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 3413393736dbab1087589f8dd788bc412d16b431d1Ben Skeggsstatic INLINE int 3513393736dbab1087589f8dd788bc412d16b431d1Ben Skeggsnv50_format(enum pipe_format format) 3613393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs{ 3713393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs switch (format) { 38c9f1db0a03b6d89f8b1113785aa961e6c9a398efJosé Fonseca case PIPE_FORMAT_B8G8R8A8_UNORM: 39987c59c486500780a9315d2a850e6121319f4e93Christoph Bumiller return NV50_2D_DST_FORMAT_A8R8G8B8_UNORM; 40c9f1db0a03b6d89f8b1113785aa961e6c9a398efJosé Fonseca case PIPE_FORMAT_B8G8R8X8_UNORM: 41987c59c486500780a9315d2a850e6121319f4e93Christoph Bumiller return NV50_2D_DST_FORMAT_X8R8G8B8_UNORM; 42e548babb1fc9230054674deb5e332f55319e5b91Christoph Bumiller case PIPE_FORMAT_B8G8R8A8_SRGB: 43e548babb1fc9230054674deb5e332f55319e5b91Christoph Bumiller return NV50_2D_DST_FORMAT_A8R8G8B8_SRGB; 44e548babb1fc9230054674deb5e332f55319e5b91Christoph Bumiller case PIPE_FORMAT_B8G8R8X8_SRGB: 45e548babb1fc9230054674deb5e332f55319e5b91Christoph Bumiller return NV50_2D_DST_FORMAT_X8R8G8B8_SRGB; 46c9f1db0a03b6d89f8b1113785aa961e6c9a398efJosé Fonseca case PIPE_FORMAT_B5G6R5_UNORM: 47987c59c486500780a9315d2a850e6121319f4e93Christoph Bumiller return NV50_2D_DST_FORMAT_R5G6B5_UNORM; 48e548babb1fc9230054674deb5e332f55319e5b91Christoph Bumiller case PIPE_FORMAT_B5G5R5A1_UNORM: 49e548babb1fc9230054674deb5e332f55319e5b91Christoph Bumiller return NV50_2D_DST_FORMAT_A1R5G5B5_UNORM; 5013393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs case PIPE_FORMAT_A8_UNORM: 51e548babb1fc9230054674deb5e332f55319e5b91Christoph Bumiller case PIPE_FORMAT_I8_UNORM: 52e548babb1fc9230054674deb5e332f55319e5b91Christoph Bumiller case PIPE_FORMAT_L8_UNORM: 53987c59c486500780a9315d2a850e6121319f4e93Christoph Bumiller return NV50_2D_DST_FORMAT_R8_UNORM; 54e548babb1fc9230054674deb5e332f55319e5b91Christoph Bumiller case PIPE_FORMAT_R32G32B32A32_FLOAT: 55e548babb1fc9230054674deb5e332f55319e5b91Christoph Bumiller return NV50_2D_DST_FORMAT_R32G32B32A32_FLOAT; 56e548babb1fc9230054674deb5e332f55319e5b91Christoph Bumiller case PIPE_FORMAT_R32G32B32_FLOAT: 57e548babb1fc9230054674deb5e332f55319e5b91Christoph Bumiller return NV50_2D_DST_FORMAT_R32G32B32X32_FLOAT; 58e548babb1fc9230054674deb5e332f55319e5b91Christoph Bumiller case PIPE_FORMAT_Z32_FLOAT: 59e548babb1fc9230054674deb5e332f55319e5b91Christoph Bumiller return NV50_2D_DST_FORMAT_R32_FLOAT; 60e548babb1fc9230054674deb5e332f55319e5b91Christoph Bumiller 61e548babb1fc9230054674deb5e332f55319e5b91Christoph Bumiller /* only because we require src format == dst format: */ 62e548babb1fc9230054674deb5e332f55319e5b91Christoph Bumiller case PIPE_FORMAT_R16G16_SNORM: 63e548babb1fc9230054674deb5e332f55319e5b91Christoph Bumiller case PIPE_FORMAT_R16G16_UNORM: 646fb364a1717858d8201b2caf234076ce5d4832acRoland Scheidegger case PIPE_FORMAT_S8_USCALED_Z24_UNORM: 656fb364a1717858d8201b2caf234076ce5d4832acRoland Scheidegger case PIPE_FORMAT_Z24_UNORM_S8_USCALED: 66e548babb1fc9230054674deb5e332f55319e5b91Christoph Bumiller return NV50_2D_DST_FORMAT_A8R8G8B8_UNORM; 67e548babb1fc9230054674deb5e332f55319e5b91Christoph Bumiller case PIPE_FORMAT_L8A8_UNORM: 68e548babb1fc9230054674deb5e332f55319e5b91Christoph Bumiller case PIPE_FORMAT_B4G4R4A4_UNORM: 69e548babb1fc9230054674deb5e332f55319e5b91Christoph Bumiller return NV50_2D_DST_FORMAT_R16_UNORM; 70e548babb1fc9230054674deb5e332f55319e5b91Christoph Bumiller 7113393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs default: 7213393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs return -1; 7313393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs } 7413393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs} 7513393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs 7613393736dbab1087589f8dd788bc412d16b431d1Ben Skeggsstatic int 7713393736dbab1087589f8dd788bc412d16b431d1Ben Skeggsnv50_surface_set(struct nv50_screen *screen, struct pipe_surface *ps, int dst) 7813393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs{ 7963a3a3762c8e1a67666d36b35fdb0ada8e4b7d08Ben Skeggs struct nv50_miptree *mt = nv50_miptree(ps->texture); 8080e9e1ee8172d1e5a81d702681897dddd9d815f1Ben Skeggs struct nouveau_channel *chan = screen->eng2d->channel; 8113393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs struct nouveau_grobj *eng2d = screen->eng2d; 8202f32454487f2caba00931590254260d871ae795Ben Skeggs struct nouveau_bo *bo = nv50_miptree(ps->texture)->base.bo; 8313393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs int format, mthd = dst ? NV50_2D_DST_FORMAT : NV50_2D_SRC_FORMAT; 8413393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs int flags = NOUVEAU_BO_VRAM | (dst ? NOUVEAU_BO_WR : NOUVEAU_BO_RD); 85534f1e8f022ea7408c2ad49013e8f2446aa16364Ben Skeggs 8613393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs format = nv50_format(ps->format); 87e548babb1fc9230054674deb5e332f55319e5b91Christoph Bumiller if (format < 0) { 88e548babb1fc9230054674deb5e332f55319e5b91Christoph Bumiller NOUVEAU_ERR("invalid/unsupported surface format: %s\n", 89e548babb1fc9230054674deb5e332f55319e5b91Christoph Bumiller util_format_name(ps->format)); 9013393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs return 1; 91e548babb1fc9230054674deb5e332f55319e5b91Christoph Bumiller } 9218882f4d30afcc849dca33ff93dbcd5ca45664b8Marcin Kościelnicki 9340ed44991851a526f0e2cafd5dab6149cb7a3342Ben Skeggs if (!bo->tile_flags) { 9441b52aa3362665e08bdc2f75cc9bfdc4debc6eb0Maarten Maathuis MARK_RING (chan, 9, 2); /* flush on lack of space or relocs */ 9513393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs BEGIN_RING(chan, eng2d, mthd, 2); 9613393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs OUT_RING (chan, format); 9713393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs OUT_RING (chan, 1); 9813393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs BEGIN_RING(chan, eng2d, mthd + 0x14, 5); 9918882f4d30afcc849dca33ff93dbcd5ca45664b8Marcin Kościelnicki OUT_RING (chan, mt->level[ps->level].pitch); 10013393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs OUT_RING (chan, ps->width); 10113393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs OUT_RING (chan, ps->height); 10213393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs OUT_RELOCh(chan, bo, ps->offset, flags); 10313393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs OUT_RELOCl(chan, bo, ps->offset, flags); 10413393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs } else { 10541b52aa3362665e08bdc2f75cc9bfdc4debc6eb0Maarten Maathuis MARK_RING (chan, 11, 2); /* flush on lack of space or relocs */ 10613393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs BEGIN_RING(chan, eng2d, mthd, 5); 10713393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs OUT_RING (chan, format); 10813393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs OUT_RING (chan, 0); 10918882f4d30afcc849dca33ff93dbcd5ca45664b8Marcin Kościelnicki OUT_RING (chan, mt->level[ps->level].tile_mode << 4); 11013393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs OUT_RING (chan, 1); 11113393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs OUT_RING (chan, 0); 11213393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs BEGIN_RING(chan, eng2d, mthd + 0x18, 4); 11313393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs OUT_RING (chan, ps->width); 11413393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs OUT_RING (chan, ps->height); 11513393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs OUT_RELOCh(chan, bo, ps->offset, flags); 11613393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs OUT_RELOCl(chan, bo, ps->offset, flags); 11713393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs } 11813393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs 11913393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs#if 0 12013393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs if (dst) { 12113393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs BEGIN_RING(chan, eng2d, NV50_2D_CLIP_X, 4); 12213393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs OUT_RING (chan, 0); 12313393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs OUT_RING (chan, 0); 12413393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs OUT_RING (chan, surf->width); 12513393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs OUT_RING (chan, surf->height); 12613393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs } 12713393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs#endif 12813393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs 12913393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs return 0; 13013393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs} 13113393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs 13232cd1a0345eaf1f4da8a60a4ac2145ff51383d59Younes Mantonint 13313393736dbab1087589f8dd788bc412d16b431d1Ben Skeggsnv50_surface_do_copy(struct nv50_screen *screen, struct pipe_surface *dst, 13413393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs int dx, int dy, struct pipe_surface *src, int sx, int sy, 13513393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs int w, int h) 13613393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs{ 13780e9e1ee8172d1e5a81d702681897dddd9d815f1Ben Skeggs struct nouveau_channel *chan = screen->eng2d->channel; 13813393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs struct nouveau_grobj *eng2d = screen->eng2d; 13913393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs int ret; 14013393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs 14113393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs WAIT_RING (chan, 32); 14213393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs 14313393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs ret = nv50_surface_set(screen, dst, 1); 14413393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs if (ret) 14513393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs return ret; 14613393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs 14713393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs ret = nv50_surface_set(screen, src, 0); 14813393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs if (ret) 14913393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs return ret; 15013393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs 15113393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs BEGIN_RING(chan, eng2d, 0x088c, 1); 15213393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs OUT_RING (chan, 0); 15313393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs BEGIN_RING(chan, eng2d, NV50_2D_BLIT_DST_X, 4); 15413393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs OUT_RING (chan, dx); 15513393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs OUT_RING (chan, dy); 15613393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs OUT_RING (chan, w); 15713393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs OUT_RING (chan, h); 15813393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs BEGIN_RING(chan, eng2d, 0x08c0, 4); 15913393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs OUT_RING (chan, 0); 16013393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs OUT_RING (chan, 1); 16113393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs OUT_RING (chan, 0); 16213393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs OUT_RING (chan, 1); 16313393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs BEGIN_RING(chan, eng2d, 0x08d0, 4); 16413393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs OUT_RING (chan, 0); 16513393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs OUT_RING (chan, sx); 16613393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs OUT_RING (chan, 0); 16713393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs OUT_RING (chan, sy); 16813393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs 16913393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs return 0; 17013393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs} 17113393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs 172b8965bee404cb36ccd97ac089fbd3ffc63268080Ben Skeggsstatic void 173f500f3a72c6be61ff9b8e1166f734e408d00adedJakob Bornecrantznv50_surface_copy(struct pipe_context *pipe, 17426add9288c88108e3485ffc57c51ea9bdc0ee719Ben Skeggs struct pipe_surface *dest, unsigned destx, unsigned desty, 17526add9288c88108e3485ffc57c51ea9bdc0ee719Ben Skeggs struct pipe_surface *src, unsigned srcx, unsigned srcy, 17626add9288c88108e3485ffc57c51ea9bdc0ee719Ben Skeggs unsigned width, unsigned height) 177b8965bee404cb36ccd97ac089fbd3ffc63268080Ben Skeggs{ 178caf40d5d145185d6a4c3ce8ff7c30ec93c040abdMaarten Maathuis struct nv50_context *nv50 = nv50_context(pipe); 17913393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs struct nv50_screen *screen = nv50->screen; 18013393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs 18113393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs assert(src->format == dest->format); 182b8965bee404cb36ccd97ac089fbd3ffc63268080Ben Skeggs 183f500f3a72c6be61ff9b8e1166f734e408d00adedJakob Bornecrantz nv50_surface_do_copy(screen, dest, destx, desty, src, srcx, 18413393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs srcy, width, height); 18547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 18647b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 187b8965bee404cb36ccd97ac089fbd3ffc63268080Ben Skeggsstatic void 188b8965bee404cb36ccd97ac089fbd3ffc63268080Ben Skeggsnv50_surface_fill(struct pipe_context *pipe, struct pipe_surface *dest, 189b8965bee404cb36ccd97ac089fbd3ffc63268080Ben Skeggs unsigned destx, unsigned desty, unsigned width, 190b8965bee404cb36ccd97ac089fbd3ffc63268080Ben Skeggs unsigned height, unsigned value) 191b8965bee404cb36ccd97ac089fbd3ffc63268080Ben Skeggs{ 192caf40d5d145185d6a4c3ce8ff7c30ec93c040abdMaarten Maathuis struct nv50_context *nv50 = nv50_context(pipe); 19313393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs struct nv50_screen *screen = nv50->screen; 19480e9e1ee8172d1e5a81d702681897dddd9d815f1Ben Skeggs struct nouveau_channel *chan = screen->eng2d->channel; 19513393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs struct nouveau_grobj *eng2d = screen->eng2d; 19613393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs int format, ret; 19713393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs 19813393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs format = nv50_format(dest->format); 19913393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs if (format < 0) 20013393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs return; 20113393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs 20213393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs WAIT_RING (chan, 32); 20313393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs 20413393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs ret = nv50_surface_set(screen, dest, 1); 20513393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs if (ret) 20613393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs return; 207b8965bee404cb36ccd97ac089fbd3ffc63268080Ben Skeggs 208c84cc09d41a83caa96eca84c73284024d8d63024Marcin Kościelnicki BEGIN_RING(chan, eng2d, NV50_2D_DRAW_SHAPE, 3); 209c84cc09d41a83caa96eca84c73284024d8d63024Marcin Kościelnicki OUT_RING (chan, NV50_2D_DRAW_SHAPE_RECTANGLES); 21013393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs OUT_RING (chan, format); 21113393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs OUT_RING (chan, value); 212c84cc09d41a83caa96eca84c73284024d8d63024Marcin Kościelnicki BEGIN_RING(chan, eng2d, NV50_2D_DRAW_POINT32_X(0), 4); 21313393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs OUT_RING (chan, destx); 21413393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs OUT_RING (chan, desty); 21513393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs OUT_RING (chan, width); 21613393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs OUT_RING (chan, height); 217b8965bee404cb36ccd97ac089fbd3ffc63268080Ben Skeggs} 21847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 21947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsvoid 22047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_init_surface_functions(struct nv50_context *nv50) 22147b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 22265ad8176ca91b5ed2a01b1b3ee145cfdce369419Ben Skeggs nv50->pipe.surface_copy = nv50_surface_copy; 22365ad8176ca91b5ed2a01b1b3ee145cfdce369419Ben Skeggs nv50->pipe.surface_fill = nv50_surface_fill; 22447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 22565ad8176ca91b5ed2a01b1b3ee145cfdce369419Ben Skeggs 22665ad8176ca91b5ed2a01b1b3ee145cfdce369419Ben Skeggs 227