1 /**************************************************************************
3 * Copyright © 2009 Jakob Bornecrantz
5 * Permission is hereby granted, free of charge, to any person obtaining a
6 * copy of this software and associated documentation files (the "Software"),
7 * to deal in the Software without restriction, including without limitation
8 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
9 * and/or sell copies of the Software, and to permit persons to whom the
10 * Software is furnished to do so, subject to the following conditions:
12 * The above copyright notice and this permission notice (including the next
13 * paragraph) shall be included in all copies or substantial portions of the
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22 * DEALINGS IN THE SOFTWARE.
24 **************************************************************************/
29 #include "pipe/p_compiler.h"
32 struct pipe_fence_handle
;
34 /* This currently just wraps dri_bo:
36 struct brw_winsys_buffer
{
37 struct brw_winsys_screen
*sws
;
43 enum brw_buffer_usage
{
44 I915_GEM_DOMAIN_RENDER
,
45 I915_GEM_DOMAIN_SAMPLER
,
46 I915_GEM_DOMAIN_VERTEX
,
47 I915_GEM_DOMAIN_INSTRUCTION
,
50 /* XXX: migrate from domains to explicit usage cases, eg below:
54 BRW_USAGE_RENDER
= 0x01,
55 BRW_USAGE_SAMPLER
= 0x02,
56 BRW_USAGE_2D_TARGET
= 0x04,
57 BRW_USAGE_2D_SOURCE
= 0x08,
59 BRW_USAGE_VERTEX
= 0x10,
64 BRW_BUFFER_TYPE_TEXTURE
,
65 BRW_BUFFER_TYPE_SCANOUT
, /**< a texture used for scanning out from */
66 BRW_BUFFER_TYPE_VERTEX
,
67 BRW_BUFFER_TYPE_CURBE
,
68 BRW_BUFFER_TYPE_QUERY
,
69 BRW_BUFFER_TYPE_SHADER_CONSTANTS
,
70 BRW_BUFFER_TYPE_WM_SCRATCH
,
71 BRW_BUFFER_TYPE_BATCH
,
72 BRW_BUFFER_TYPE_STATE_CACHE
,
75 struct brw_winsys_screen
{
86 struct brw_winsys_buffer
*(*bo_alloc
)( struct brw_winsys_screen
*sws
,
87 enum brw_buffer_type type
,
91 /* Reference and unreference buffers:
93 void (*bo_reference
)( struct brw_winsys_buffer
*buffer
);
94 void (*bo_unreference
)( struct brw_winsys_buffer
*buffer
);
96 /* XXX: parameter names!!
98 int (*bo_emit_reloc
)( struct brw_winsys_buffer
*buffer
,
103 struct brw_winsys_buffer
*b2
);
105 int (*bo_exec
)( struct brw_winsys_buffer
*buffer
,
111 void (*bo_subdata
)(struct brw_winsys_buffer
*buffer
,
116 boolean (*bo_is_busy
)(struct brw_winsys_buffer
*buffer
);
117 boolean (*bo_references
)(struct brw_winsys_buffer
*a
,
118 struct brw_winsys_buffer
*b
);
120 /* XXX: couldn't this be handled by returning true/false on
123 boolean (*check_aperture_space
)( struct brw_winsys_screen
*iws
,
124 struct brw_winsys_buffer
**buffers
,
130 void *(*bo_map
)(struct brw_winsys_buffer
*buffer
,
136 void (*bo_unmap
)(struct brw_winsys_buffer
*buffer
);
143 * Destroy the winsys.
145 void (*destroy
)(struct brw_winsys
*iws
);
150 * Create brw pipe_screen.
152 struct pipe_screen
*brw_create_screen(struct brw_winsys
*iws
, unsigned pci_id
);
155 * Create a brw pipe_context.
157 struct pipe_context
*brw_create_context(struct pipe_screen
*screen
);
160 * Get the brw_winsys buffer backing the texture.
165 boolean
brw_get_texture_buffer_brw(struct pipe_texture
*texture
,
166 struct brw_winsys_buffer
**buffer
,
170 * Wrap a brw_winsys buffer with a texture blanket.
174 struct pipe_texture
* brw_texture_blanket_ws(struct pipe_screen
*screen
,
175 const struct pipe_texture
*tmplt
,
176 const unsigned *stride
,
177 struct brw_winsys_buffer
*buffer
);