13192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz/********************************************************** 23192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Copyright 2008-2009 VMware, Inc. All rights reserved. 33192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 43192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Permission is hereby granted, free of charge, to any person 53192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * obtaining a copy of this software and associated documentation 63192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * files (the "Software"), to deal in the Software without 73192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * restriction, including without limitation the rights to use, copy, 83192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * modify, merge, publish, distribute, sublicense, and/or sell copies 93192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * of the Software, and to permit persons to whom the Software is 103192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * furnished to do so, subject to the following conditions: 113192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 123192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * The above copyright notice and this permission notice shall be 133192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * included in all copies or substantial portions of the Software. 143192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 153192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 163192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 173192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 183192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 193192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 203192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 213192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 223192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * SOFTWARE. 233192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 243192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz **********************************************************/ 253192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 263192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#ifndef SVGA_BUFFER_H 273192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#define SVGA_BUFFER_H 283192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 293192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 303192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#include "pipe/p_compiler.h" 313192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#include "pipe/p_state.h" 32287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell#include "util/u_transfer.h" 333192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 343192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#include "util/u_double_list.h" 353192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 363192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#include "svga_screen_cache.h" 373192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 383192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 393192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz/** 403192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Maximum number of discontiguous ranges 413192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz */ 423192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#define SVGA_BUFFER_MAX_RANGES 32 433192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 443192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 453192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantzstruct svga_context; 463192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantzstruct svga_winsys_buffer; 473192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantzstruct svga_winsys_surface; 483192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 493192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 50287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwellextern struct u_resource_vtbl svga_buffer_vtbl; 51287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell 523192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantzstruct svga_buffer_range 533192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz{ 543192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz unsigned start; 553192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz unsigned end; 563192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz}; 573192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 583192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 593192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz/** 603192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * SVGA pipe buffer. 613192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz */ 623192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantzstruct svga_buffer 633192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz{ 64287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell struct u_resource b; 653192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 663192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz /** 673192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Regular (non DMA'able) memory. 683192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 693192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Used for user buffers or for buffers which we know before hand that can 703192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * never be used by the virtual hardware directly, such as constant buffers. 713192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz */ 723192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz void *swbuf; 733192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 743192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz /** 753192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Whether swbuf was created by the user or not. 763192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz */ 773192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz boolean user; 783192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 793192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz /** 803192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Creation key for the host surface handle. 813192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 823192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * This structure describes all the host surface characteristics so that it 833192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * can be looked up in cache, since creating a host surface is often a slow 843192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * operation. 853192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz */ 863192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz struct svga_host_surface_cache_key key; 873192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 883192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz /** 893192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Host surface handle. 903192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * 913192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * This is a platform independent abstraction for host SID. We create when 9274651f5738032466fceede8b8f0c3ce29a770551José Fonseca * trying to bind. 9374651f5738032466fceede8b8f0c3ce29a770551José Fonseca * 9474651f5738032466fceede8b8f0c3ce29a770551José Fonseca * Only set for non-user buffers. 953192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz */ 963192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz struct svga_winsys_surface *handle; 97cf861335a44376609258a2ec399c215e35f9f075José Fonseca 98cf861335a44376609258a2ec399c215e35f9f075José Fonseca /** 99cf861335a44376609258a2ec399c215e35f9f075José Fonseca * Information about ongoing and past map operations. 100cf861335a44376609258a2ec399c215e35f9f075José Fonseca */ 1013192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz struct { 102cf861335a44376609258a2ec399c215e35f9f075José Fonseca /** 103cf861335a44376609258a2ec399c215e35f9f075José Fonseca * Number of concurrent mappings. 104cf861335a44376609258a2ec399c215e35f9f075José Fonseca */ 1053192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz unsigned count; 106cf861335a44376609258a2ec399c215e35f9f075José Fonseca 107cf861335a44376609258a2ec399c215e35f9f075José Fonseca /** 108cf861335a44376609258a2ec399c215e35f9f075José Fonseca * Dirty ranges. 109cf861335a44376609258a2ec399c215e35f9f075José Fonseca * 110cf861335a44376609258a2ec399c215e35f9f075José Fonseca * Ranges that were touched by the application and need to be uploaded to 111cf861335a44376609258a2ec399c215e35f9f075José Fonseca * the host. 112cf861335a44376609258a2ec399c215e35f9f075José Fonseca * 113cf861335a44376609258a2ec399c215e35f9f075José Fonseca * This information will be copied into dma.boxes, when emiting the 114cf861335a44376609258a2ec399c215e35f9f075José Fonseca * SVGA3dCmdSurfaceDMA command. 115cf861335a44376609258a2ec399c215e35f9f075José Fonseca */ 116cf861335a44376609258a2ec399c215e35f9f075José Fonseca struct svga_buffer_range ranges[SVGA_BUFFER_MAX_RANGES]; 117cf861335a44376609258a2ec399c215e35f9f075José Fonseca unsigned num_ranges; 1183192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz } map; 119cf861335a44376609258a2ec399c215e35f9f075José Fonseca 120cf861335a44376609258a2ec399c215e35f9f075José Fonseca /** 121b330928549b39e97e16aee636c335865504ffab9José Fonseca * Information about uploaded version of user buffers. 122b330928549b39e97e16aee636c335865504ffab9José Fonseca */ 123b330928549b39e97e16aee636c335865504ffab9José Fonseca struct { 124287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell struct pipe_resource *buffer; 125b330928549b39e97e16aee636c335865504ffab9José Fonseca 126b330928549b39e97e16aee636c335865504ffab9José Fonseca /** 127b330928549b39e97e16aee636c335865504ffab9José Fonseca * We combine multiple user buffers into the same hardware buffer. This 128b330928549b39e97e16aee636c335865504ffab9José Fonseca * is the relative offset within that buffer. 129b330928549b39e97e16aee636c335865504ffab9José Fonseca */ 130b330928549b39e97e16aee636c335865504ffab9José Fonseca unsigned offset; 131b330928549b39e97e16aee636c335865504ffab9José Fonseca 132542194251c36e88601cb20b96a4094da5d0ae675Thomas Hellstrom /** 133542194251c36e88601cb20b96a4094da5d0ae675Thomas Hellstrom * Range of user buffer that is uploaded in @buffer at @offset. 134542194251c36e88601cb20b96a4094da5d0ae675Thomas Hellstrom */ 135542194251c36e88601cb20b96a4094da5d0ae675Thomas Hellstrom unsigned start; 136542194251c36e88601cb20b96a4094da5d0ae675Thomas Hellstrom unsigned end; 137542194251c36e88601cb20b96a4094da5d0ae675Thomas Hellstrom } uploaded; 1382b301df4aa00cbf4f88c716bda292d0c7126ff95Thomas Hellstrom 1392b301df4aa00cbf4f88c716bda292d0c7126ff95Thomas Hellstrom /** 140cf861335a44376609258a2ec399c215e35f9f075José Fonseca * DMA'ble memory. 141cf861335a44376609258a2ec399c215e35f9f075José Fonseca * 142cf861335a44376609258a2ec399c215e35f9f075José Fonseca * A piece of GMR memory, with the same size of the buffer. It is created 143cf861335a44376609258a2ec399c215e35f9f075José Fonseca * when mapping the buffer, and will be used to upload vertex data to the 144cf861335a44376609258a2ec399c215e35f9f075José Fonseca * host. 14574651f5738032466fceede8b8f0c3ce29a770551José Fonseca * 14674651f5738032466fceede8b8f0c3ce29a770551José Fonseca * Only set for non-user buffers. 147cf861335a44376609258a2ec399c215e35f9f075José Fonseca */ 148cf861335a44376609258a2ec399c215e35f9f075José Fonseca struct svga_winsys_buffer *hwbuf; 149cf861335a44376609258a2ec399c215e35f9f075José Fonseca 150cf861335a44376609258a2ec399c215e35f9f075José Fonseca /** 151cf861335a44376609258a2ec399c215e35f9f075José Fonseca * Information about pending DMA uploads. 152cf861335a44376609258a2ec399c215e35f9f075José Fonseca * 153cf861335a44376609258a2ec399c215e35f9f075José Fonseca */ 154cf861335a44376609258a2ec399c215e35f9f075José Fonseca struct { 155cf861335a44376609258a2ec399c215e35f9f075José Fonseca /** 156cf861335a44376609258a2ec399c215e35f9f075José Fonseca * Whether this buffer has an unfinished DMA upload command. 157cf861335a44376609258a2ec399c215e35f9f075José Fonseca * 158cf861335a44376609258a2ec399c215e35f9f075José Fonseca * If not set then the rest of the information is null. 159cf861335a44376609258a2ec399c215e35f9f075José Fonseca */ 160cf861335a44376609258a2ec399c215e35f9f075José Fonseca boolean pending; 161cf861335a44376609258a2ec399c215e35f9f075José Fonseca 162cf861335a44376609258a2ec399c215e35f9f075José Fonseca SVGA3dSurfaceDMAFlags flags; 163cf861335a44376609258a2ec399c215e35f9f075José Fonseca 164cf861335a44376609258a2ec399c215e35f9f075José Fonseca /** 165cf861335a44376609258a2ec399c215e35f9f075José Fonseca * Pointer to the DMA copy box *inside* the command buffer. 166cf861335a44376609258a2ec399c215e35f9f075José Fonseca */ 167cf861335a44376609258a2ec399c215e35f9f075José Fonseca SVGA3dCopyBox *boxes; 168cf861335a44376609258a2ec399c215e35f9f075José Fonseca 169cf861335a44376609258a2ec399c215e35f9f075José Fonseca /** 170cf861335a44376609258a2ec399c215e35f9f075José Fonseca * Context that has the pending DMA to this buffer. 171cf861335a44376609258a2ec399c215e35f9f075José Fonseca */ 172cf861335a44376609258a2ec399c215e35f9f075José Fonseca struct svga_context *svga; 173cf861335a44376609258a2ec399c215e35f9f075José Fonseca } dma; 174cf861335a44376609258a2ec399c215e35f9f075José Fonseca 175cf861335a44376609258a2ec399c215e35f9f075José Fonseca /** 176cf861335a44376609258a2ec399c215e35f9f075José Fonseca * Linked list head, used to gather all buffers with pending dma uploads on 177cf861335a44376609258a2ec399c215e35f9f075José Fonseca * a context. It is only valid if the dma.pending is set above. 178cf861335a44376609258a2ec399c215e35f9f075José Fonseca */ 1793192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz struct list_head head; 1803192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz}; 1813192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 1823192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 1833192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantzstatic INLINE struct svga_buffer * 184287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwellsvga_buffer(struct pipe_resource *buffer) 1853192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz{ 1863192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz if (buffer) { 187287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell assert(((struct svga_buffer *)buffer)->b.vtbl == &svga_buffer_vtbl); 1883192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz return (struct svga_buffer *)buffer; 1893192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz } 1903192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz return NULL; 1913192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz} 1923192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 1933192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 1943192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz/** 1953192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * Returns TRUE for user buffers. We may 1963192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * decide to use an alternate upload path for these buffers. 1973192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz */ 1983192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantzstatic INLINE boolean 199287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwellsvga_buffer_is_user_buffer( struct pipe_resource *buffer ) 2003192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz{ 201bd00fb2c060d3d90be670a2f0bbd6f9c9fd2b4aeJosé Fonseca if (buffer) { 202bd00fb2c060d3d90be670a2f0bbd6f9c9fd2b4aeJosé Fonseca return svga_buffer(buffer)->user; 203bd00fb2c060d3d90be670a2f0bbd6f9c9fd2b4aeJosé Fonseca } else { 204bd00fb2c060d3d90be670a2f0bbd6f9c9fd2b4aeJosé Fonseca return FALSE; 205bd00fb2c060d3d90be670a2f0bbd6f9c9fd2b4aeJosé Fonseca } 2063192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz} 2073192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 2083192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 209287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell 210287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell 211287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwellstruct pipe_resource * 212287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwellsvga_user_buffer_create(struct pipe_screen *screen, 213287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell void *ptr, 214287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell unsigned bytes, 215287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell unsigned usage); 216287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell 217287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwellstruct pipe_resource * 218287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwellsvga_buffer_create(struct pipe_screen *screen, 219287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell const struct pipe_resource *template); 220287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell 2213192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 2222452921e5adb56a3d99e52fb2b963fcd2a0b75e9José Fonseca 2232452921e5adb56a3d99e52fb2b963fcd2a0b75e9José Fonseca/** 2242452921e5adb56a3d99e52fb2b963fcd2a0b75e9José Fonseca * Get the host surface handle for this buffer. 2252452921e5adb56a3d99e52fb2b963fcd2a0b75e9José Fonseca * 2262452921e5adb56a3d99e52fb2b963fcd2a0b75e9José Fonseca * This will ensure the host surface is updated, issuing DMAs as needed. 2272452921e5adb56a3d99e52fb2b963fcd2a0b75e9José Fonseca * 2282452921e5adb56a3d99e52fb2b963fcd2a0b75e9José Fonseca * NOTE: This may insert new commands in the context, so it *must* be called 2292452921e5adb56a3d99e52fb2b963fcd2a0b75e9José Fonseca * before reserving command buffer space. And, in order to insert commands 2302452921e5adb56a3d99e52fb2b963fcd2a0b75e9José Fonseca * it may need to call svga_context_flush(). 2312452921e5adb56a3d99e52fb2b963fcd2a0b75e9José Fonseca */ 2323192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantzstruct svga_winsys_surface * 2333192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantzsvga_buffer_handle(struct svga_context *svga, 234287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell struct pipe_resource *buf); 2353192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 2363192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantzvoid 2373192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantzsvga_context_flush_buffers(struct svga_context *svga); 2383192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 2393192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantzstruct svga_winsys_buffer * 240b84590994c4261d85485357263146d5e3d8827ebJosé Fonsecasvga_winsys_buffer_create(struct svga_context *svga, 2413192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz unsigned alignment, 2423192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz unsigned usage, 2433192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz unsigned size); 2443192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 2453192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#endif /* SVGA_BUFFER_H */ 246