nv50_surface.c revision e548babb1fc9230054674deb5e332f55319e5b91
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" 2747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs#include "pipe/p_defines.h" 2828486880ca3ec39419ccee0cb1a3bedc9ef7117cJosé Fonseca#include "util/u_inlines.h" 29f302fca5eb63e4bca8af5b35c585451486143e6aBen Skeggs 30f302fca5eb63e4bca8af5b35c585451486143e6aBen Skeggs#include "util/u_tile.h" 31e548babb1fc9230054674deb5e332f55319e5b91Christoph Bumiller#include "util/u_format.h" 3247b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 3313393736dbab1087589f8dd788bc412d16b431d1Ben Skeggsstatic INLINE int 3413393736dbab1087589f8dd788bc412d16b431d1Ben Skeggsnv50_format(enum pipe_format format) 3513393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs{ 3613393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs switch (format) { 37c9f1db0a03b6d89f8b1113785aa961e6c9a398efJosé Fonseca case PIPE_FORMAT_B8G8R8A8_UNORM: 38987c59c486500780a9315d2a850e6121319f4e93Christoph Bumiller return NV50_2D_DST_FORMAT_A8R8G8B8_UNORM; 39c9f1db0a03b6d89f8b1113785aa961e6c9a398efJosé Fonseca case PIPE_FORMAT_B8G8R8X8_UNORM: 40987c59c486500780a9315d2a850e6121319f4e93Christoph Bumiller return NV50_2D_DST_FORMAT_X8R8G8B8_UNORM; 41e548babb1fc9230054674deb5e332f55319e5b91Christoph Bumiller case PIPE_FORMAT_B8G8R8A8_SRGB: 42e548babb1fc9230054674deb5e332f55319e5b91Christoph Bumiller return NV50_2D_DST_FORMAT_A8R8G8B8_SRGB; 43e548babb1fc9230054674deb5e332f55319e5b91Christoph Bumiller case PIPE_FORMAT_B8G8R8X8_SRGB: 44e548babb1fc9230054674deb5e332f55319e5b91Christoph Bumiller return NV50_2D_DST_FORMAT_X8R8G8B8_SRGB; 45c9f1db0a03b6d89f8b1113785aa961e6c9a398efJosé Fonseca case PIPE_FORMAT_B5G6R5_UNORM: 46987c59c486500780a9315d2a850e6121319f4e93Christoph Bumiller return NV50_2D_DST_FORMAT_R5G6B5_UNORM; 47e548babb1fc9230054674deb5e332f55319e5b91Christoph Bumiller case PIPE_FORMAT_B5G5R5A1_UNORM: 48e548babb1fc9230054674deb5e332f55319e5b91Christoph Bumiller return NV50_2D_DST_FORMAT_A1R5G5B5_UNORM; 4913393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs case PIPE_FORMAT_A8_UNORM: 50e548babb1fc9230054674deb5e332f55319e5b91Christoph Bumiller case PIPE_FORMAT_I8_UNORM: 51e548babb1fc9230054674deb5e332f55319e5b91Christoph Bumiller case PIPE_FORMAT_L8_UNORM: 52987c59c486500780a9315d2a850e6121319f4e93Christoph Bumiller return NV50_2D_DST_FORMAT_R8_UNORM; 53e548babb1fc9230054674deb5e332f55319e5b91Christoph Bumiller case PIPE_FORMAT_R32G32B32A32_FLOAT: 54e548babb1fc9230054674deb5e332f55319e5b91Christoph Bumiller return NV50_2D_DST_FORMAT_R32G32B32A32_FLOAT; 55e548babb1fc9230054674deb5e332f55319e5b91Christoph Bumiller case PIPE_FORMAT_R32G32B32_FLOAT: 56e548babb1fc9230054674deb5e332f55319e5b91Christoph Bumiller return NV50_2D_DST_FORMAT_R32G32B32X32_FLOAT; 57e548babb1fc9230054674deb5e332f55319e5b91Christoph Bumiller case PIPE_FORMAT_Z32_FLOAT: 58e548babb1fc9230054674deb5e332f55319e5b91Christoph Bumiller return NV50_2D_DST_FORMAT_R32_FLOAT; 59e548babb1fc9230054674deb5e332f55319e5b91Christoph Bumiller 60e548babb1fc9230054674deb5e332f55319e5b91Christoph Bumiller /* only because we require src format == dst format: */ 61e548babb1fc9230054674deb5e332f55319e5b91Christoph Bumiller case PIPE_FORMAT_R16G16_SNORM: 62e548babb1fc9230054674deb5e332f55319e5b91Christoph Bumiller case PIPE_FORMAT_R16G16_UNORM: 63e548babb1fc9230054674deb5e332f55319e5b91Christoph Bumiller case PIPE_FORMAT_S8Z24_UNORM: 64e548babb1fc9230054674deb5e332f55319e5b91Christoph Bumiller case PIPE_FORMAT_Z24S8_UNORM: 65e548babb1fc9230054674deb5e332f55319e5b91Christoph Bumiller return NV50_2D_DST_FORMAT_A8R8G8B8_UNORM; 66e548babb1fc9230054674deb5e332f55319e5b91Christoph Bumiller case PIPE_FORMAT_L8A8_UNORM: 67e548babb1fc9230054674deb5e332f55319e5b91Christoph Bumiller case PIPE_FORMAT_B4G4R4A4_UNORM: 68e548babb1fc9230054674deb5e332f55319e5b91Christoph Bumiller return NV50_2D_DST_FORMAT_R16_UNORM; 69e548babb1fc9230054674deb5e332f55319e5b91Christoph Bumiller 7013393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs default: 7113393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs return -1; 7213393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs } 7313393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs} 7413393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs 7513393736dbab1087589f8dd788bc412d16b431d1Ben Skeggsstatic int 7613393736dbab1087589f8dd788bc412d16b431d1Ben Skeggsnv50_surface_set(struct nv50_screen *screen, struct pipe_surface *ps, int dst) 7713393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs{ 7863a3a3762c8e1a67666d36b35fdb0ada8e4b7d08Ben Skeggs struct nv50_miptree *mt = nv50_miptree(ps->texture); 7980e9e1ee8172d1e5a81d702681897dddd9d815f1Ben Skeggs struct nouveau_channel *chan = screen->eng2d->channel; 8013393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs struct nouveau_grobj *eng2d = screen->eng2d; 8102f32454487f2caba00931590254260d871ae795Ben Skeggs struct nouveau_bo *bo = nv50_miptree(ps->texture)->base.bo; 8213393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs int format, mthd = dst ? NV50_2D_DST_FORMAT : NV50_2D_SRC_FORMAT; 8313393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs int flags = NOUVEAU_BO_VRAM | (dst ? NOUVEAU_BO_WR : NOUVEAU_BO_RD); 84534f1e8f022ea7408c2ad49013e8f2446aa16364Ben Skeggs 8513393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs format = nv50_format(ps->format); 86e548babb1fc9230054674deb5e332f55319e5b91Christoph Bumiller if (format < 0) { 87e548babb1fc9230054674deb5e332f55319e5b91Christoph Bumiller NOUVEAU_ERR("invalid/unsupported surface format: %s\n", 88e548babb1fc9230054674deb5e332f55319e5b91Christoph Bumiller util_format_name(ps->format)); 8913393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs return 1; 90e548babb1fc9230054674deb5e332f55319e5b91Christoph Bumiller } 9118882f4d30afcc849dca33ff93dbcd5ca45664b8Marcin Kościelnicki 9240ed44991851a526f0e2cafd5dab6149cb7a3342Ben Skeggs if (!bo->tile_flags) { 9341b52aa3362665e08bdc2f75cc9bfdc4debc6eb0Maarten Maathuis MARK_RING (chan, 9, 2); /* flush on lack of space or relocs */ 9413393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs BEGIN_RING(chan, eng2d, mthd, 2); 9513393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs OUT_RING (chan, format); 9613393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs OUT_RING (chan, 1); 9713393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs BEGIN_RING(chan, eng2d, mthd + 0x14, 5); 9818882f4d30afcc849dca33ff93dbcd5ca45664b8Marcin Kościelnicki OUT_RING (chan, mt->level[ps->level].pitch); 9913393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs OUT_RING (chan, ps->width); 10013393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs OUT_RING (chan, ps->height); 10113393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs OUT_RELOCh(chan, bo, ps->offset, flags); 10213393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs OUT_RELOCl(chan, bo, ps->offset, flags); 10313393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs } else { 10441b52aa3362665e08bdc2f75cc9bfdc4debc6eb0Maarten Maathuis MARK_RING (chan, 11, 2); /* flush on lack of space or relocs */ 10513393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs BEGIN_RING(chan, eng2d, mthd, 5); 10613393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs OUT_RING (chan, format); 10713393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs OUT_RING (chan, 0); 10818882f4d30afcc849dca33ff93dbcd5ca45664b8Marcin Kościelnicki OUT_RING (chan, mt->level[ps->level].tile_mode << 4); 10913393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs OUT_RING (chan, 1); 11013393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs OUT_RING (chan, 0); 11113393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs BEGIN_RING(chan, eng2d, mthd + 0x18, 4); 11213393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs OUT_RING (chan, ps->width); 11313393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs OUT_RING (chan, ps->height); 11413393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs OUT_RELOCh(chan, bo, ps->offset, flags); 11513393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs OUT_RELOCl(chan, bo, ps->offset, flags); 11613393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs } 11713393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs 11813393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs#if 0 11913393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs if (dst) { 12013393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs BEGIN_RING(chan, eng2d, NV50_2D_CLIP_X, 4); 12113393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs OUT_RING (chan, 0); 12213393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs OUT_RING (chan, 0); 12313393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs OUT_RING (chan, surf->width); 12413393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs OUT_RING (chan, surf->height); 12513393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs } 12613393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs#endif 12713393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs 12813393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs return 0; 12913393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs} 13013393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs 13132cd1a0345eaf1f4da8a60a4ac2145ff51383d59Younes Mantonint 13213393736dbab1087589f8dd788bc412d16b431d1Ben Skeggsnv50_surface_do_copy(struct nv50_screen *screen, struct pipe_surface *dst, 13313393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs int dx, int dy, struct pipe_surface *src, int sx, int sy, 13413393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs int w, int h) 13513393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs{ 13680e9e1ee8172d1e5a81d702681897dddd9d815f1Ben Skeggs struct nouveau_channel *chan = screen->eng2d->channel; 13713393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs struct nouveau_grobj *eng2d = screen->eng2d; 13813393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs int ret; 13913393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs 14013393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs WAIT_RING (chan, 32); 14113393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs 14213393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs ret = nv50_surface_set(screen, dst, 1); 14313393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs if (ret) 14413393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs return ret; 14513393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs 14613393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs ret = nv50_surface_set(screen, src, 0); 14713393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs if (ret) 14813393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs return ret; 14913393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs 15013393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs BEGIN_RING(chan, eng2d, 0x088c, 1); 15113393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs OUT_RING (chan, 0); 15213393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs BEGIN_RING(chan, eng2d, NV50_2D_BLIT_DST_X, 4); 15313393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs OUT_RING (chan, dx); 15413393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs OUT_RING (chan, dy); 15513393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs OUT_RING (chan, w); 15613393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs OUT_RING (chan, h); 15713393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs BEGIN_RING(chan, eng2d, 0x08c0, 4); 15813393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs OUT_RING (chan, 0); 15913393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs OUT_RING (chan, 1); 16013393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs OUT_RING (chan, 0); 16113393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs OUT_RING (chan, 1); 16213393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs BEGIN_RING(chan, eng2d, 0x08d0, 4); 16313393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs OUT_RING (chan, 0); 16413393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs OUT_RING (chan, sx); 16513393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs OUT_RING (chan, 0); 16613393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs OUT_RING (chan, sy); 16713393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs 16813393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs return 0; 16913393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs} 17013393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs 171b8965bee404cb36ccd97ac089fbd3ffc63268080Ben Skeggsstatic void 172f500f3a72c6be61ff9b8e1166f734e408d00adedJakob Bornecrantznv50_surface_copy(struct pipe_context *pipe, 17326add9288c88108e3485ffc57c51ea9bdc0ee719Ben Skeggs struct pipe_surface *dest, unsigned destx, unsigned desty, 17426add9288c88108e3485ffc57c51ea9bdc0ee719Ben Skeggs struct pipe_surface *src, unsigned srcx, unsigned srcy, 17526add9288c88108e3485ffc57c51ea9bdc0ee719Ben Skeggs unsigned width, unsigned height) 176b8965bee404cb36ccd97ac089fbd3ffc63268080Ben Skeggs{ 177caf40d5d145185d6a4c3ce8ff7c30ec93c040abdMaarten Maathuis struct nv50_context *nv50 = nv50_context(pipe); 17813393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs struct nv50_screen *screen = nv50->screen; 17913393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs 18013393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs assert(src->format == dest->format); 181b8965bee404cb36ccd97ac089fbd3ffc63268080Ben Skeggs 182f500f3a72c6be61ff9b8e1166f734e408d00adedJakob Bornecrantz nv50_surface_do_copy(screen, dest, destx, desty, src, srcx, 18313393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs srcy, width, height); 18447b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 18547b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 186b8965bee404cb36ccd97ac089fbd3ffc63268080Ben Skeggsstatic void 187b8965bee404cb36ccd97ac089fbd3ffc63268080Ben Skeggsnv50_surface_fill(struct pipe_context *pipe, struct pipe_surface *dest, 188b8965bee404cb36ccd97ac089fbd3ffc63268080Ben Skeggs unsigned destx, unsigned desty, unsigned width, 189b8965bee404cb36ccd97ac089fbd3ffc63268080Ben Skeggs unsigned height, unsigned value) 190b8965bee404cb36ccd97ac089fbd3ffc63268080Ben Skeggs{ 191caf40d5d145185d6a4c3ce8ff7c30ec93c040abdMaarten Maathuis struct nv50_context *nv50 = nv50_context(pipe); 19213393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs struct nv50_screen *screen = nv50->screen; 19380e9e1ee8172d1e5a81d702681897dddd9d815f1Ben Skeggs struct nouveau_channel *chan = screen->eng2d->channel; 19413393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs struct nouveau_grobj *eng2d = screen->eng2d; 19513393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs int format, ret; 19613393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs 19713393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs format = nv50_format(dest->format); 19813393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs if (format < 0) 19913393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs return; 20013393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs 20113393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs WAIT_RING (chan, 32); 20213393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs 20313393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs ret = nv50_surface_set(screen, dest, 1); 20413393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs if (ret) 20513393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs return; 206b8965bee404cb36ccd97ac089fbd3ffc63268080Ben Skeggs 207c84cc09d41a83caa96eca84c73284024d8d63024Marcin Kościelnicki BEGIN_RING(chan, eng2d, NV50_2D_DRAW_SHAPE, 3); 208c84cc09d41a83caa96eca84c73284024d8d63024Marcin Kościelnicki OUT_RING (chan, NV50_2D_DRAW_SHAPE_RECTANGLES); 20913393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs OUT_RING (chan, format); 21013393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs OUT_RING (chan, value); 211c84cc09d41a83caa96eca84c73284024d8d63024Marcin Kościelnicki BEGIN_RING(chan, eng2d, NV50_2D_DRAW_POINT32_X(0), 4); 21213393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs OUT_RING (chan, destx); 21313393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs OUT_RING (chan, desty); 21413393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs OUT_RING (chan, width); 21513393736dbab1087589f8dd788bc412d16b431d1Ben Skeggs OUT_RING (chan, height); 216b8965bee404cb36ccd97ac089fbd3ffc63268080Ben Skeggs} 21747b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs 21847b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsvoid 21947b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggsnv50_init_surface_functions(struct nv50_context *nv50) 22047b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs{ 22165ad8176ca91b5ed2a01b1b3ee145cfdce369419Ben Skeggs nv50->pipe.surface_copy = nv50_surface_copy; 22265ad8176ca91b5ed2a01b1b3ee145cfdce369419Ben Skeggs nv50->pipe.surface_fill = nv50_surface_fill; 22347b418b8fa5fd242e9021503d6ec329ac3d56fb0Ben Skeggs} 22465ad8176ca91b5ed2a01b1b3ee145cfdce369419Ben Skeggs 22565ad8176ca91b5ed2a01b1b3ee145cfdce369419Ben Skeggs 226