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