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_TEXTURE_H 273192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#define SVGA_TEXTURE_H 283192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 293192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 303192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#include "pipe/p_compiler.h" 313192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#include "pipe/p_state.h" 3228486880ca3ec39419ccee0cb1a3bedc9ef7117cJosé Fonseca#include "util/u_inlines.h" 33287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell#include "util/u_transfer.h" 34f1ce37f74aff4854071fe5740b055718b2c0c789Keith Whitwell#include "svga_screen_cache.h" 353192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 363192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantzstruct pipe_context; 373192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantzstruct pipe_screen; 383192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantzstruct svga_context; 393192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantzstruct svga_winsys_surface; 403192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantzenum SVGA3dSurfaceFormat; 413192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 423192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 432bb4d75f28d1b693ebef3b4fb9188db304f46234José Fonseca#define SVGA_MAX_TEXTURE_LEVELS 16 443192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 453192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 46287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwellextern struct u_resource_vtbl svga_texture_vtbl; 473192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 483192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 493192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantzstruct svga_texture 503192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz{ 51287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell struct u_resource b; 523192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 53156585c12ea4ffc6ada703d68c80ed49137da59cBrian Paul boolean defined[6][SVGA_MAX_TEXTURE_LEVELS]; 543192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 553192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz struct svga_sampler_view *cached_view; 563192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 573192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz unsigned view_age[SVGA_MAX_TEXTURE_LEVELS]; 583192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz unsigned age; 593192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 603192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz boolean views_modified; 61f1ce37f74aff4854071fe5740b055718b2c0c789Keith Whitwell 62f1ce37f74aff4854071fe5740b055718b2c0c789Keith Whitwell /** 63f1ce37f74aff4854071fe5740b055718b2c0c789Keith Whitwell * Creation key for the host surface handle. 64f1ce37f74aff4854071fe5740b055718b2c0c789Keith Whitwell * 65f1ce37f74aff4854071fe5740b055718b2c0c789Keith Whitwell * This structure describes all the host surface characteristics so that it 66f1ce37f74aff4854071fe5740b055718b2c0c789Keith Whitwell * can be looked up in cache, since creating a host surface is often a slow 67f1ce37f74aff4854071fe5740b055718b2c0c789Keith Whitwell * operation. 68f1ce37f74aff4854071fe5740b055718b2c0c789Keith Whitwell */ 69f1ce37f74aff4854071fe5740b055718b2c0c789Keith Whitwell struct svga_host_surface_cache_key key; 7016876b8328059446b6fa0951f7848e5d500244abJosé Fonseca 7116876b8328059446b6fa0951f7848e5d500244abJosé Fonseca /** 7216876b8328059446b6fa0951f7848e5d500244abJosé Fonseca * Handle for the host side surface. 7316876b8328059446b6fa0951f7848e5d500244abJosé Fonseca * 7416876b8328059446b6fa0951f7848e5d500244abJosé Fonseca * This handle is owned by this texture. Views should hold on to a reference 7516876b8328059446b6fa0951f7848e5d500244abJosé Fonseca * to this texture and never destroy this handle directly. 7616876b8328059446b6fa0951f7848e5d500244abJosé Fonseca */ 77f1ce37f74aff4854071fe5740b055718b2c0c789Keith Whitwell struct svga_winsys_surface *handle; 783192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz}; 793192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 803192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 813192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 82287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell/* Note this is only used for texture (not buffer) transfers: 83287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell */ 843192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantzstruct svga_transfer 853192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz{ 863192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz struct pipe_transfer base; 873192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 884c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger unsigned face; 894c7001462607e6e99e474d6271dd481d3f8f201cRoland Scheidegger 903192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz struct svga_winsys_buffer *hwbuf; 913192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 923192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz /* Height of the hardware buffer in pixel blocks */ 933192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz unsigned hw_nblocksy; 943192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 953192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz /* Temporary malloc buffer when we can't allocate a hardware buffer 963192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz * big enough */ 973192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz void *swbuf; 983192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz}; 993192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 1003192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 101287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwellstatic INLINE struct svga_texture *svga_texture( struct pipe_resource *resource ) 1023192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz{ 103287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell struct svga_texture *tex = (struct svga_texture *)resource; 104287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell assert(tex == NULL || tex->b.vtbl == &svga_texture_vtbl); 105287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell return tex; 1063192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz} 1073192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 1083192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 1093192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantzstatic INLINE struct svga_transfer * 1103192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantzsvga_transfer(struct pipe_transfer *transfer) 1113192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz{ 1123192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz assert(transfer); 1133192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz return (struct svga_transfer *)transfer; 1143192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz} 1153192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 1163192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 1173192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 118287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwellstruct pipe_resource * 119287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwellsvga_texture_create(struct pipe_screen *screen, 120287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell const struct pipe_resource *template); 1213192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 122287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwellstruct pipe_resource * 123287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwellsvga_texture_from_handle(struct pipe_screen * screen, 124287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell const struct pipe_resource *template, 125287c94ea4987033f9c99a2f91c5750c9083504caKeith Whitwell struct winsys_handle *whandle); 1263192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 1273192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 128b43c182f19c6291c88420fa12714f952c2b461fbKeith Whitwell 1293192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz 1303192633d4abe262d413e41feb871fe8deed409d8Jakob Bornecrantz#endif /* SVGA_TEXTURE_H */ 131