pipe_winsys Struct Reference

Gallium3D drivers are (meant to be!) independent of both GL and the window system. More...

Collaboration diagram for pipe_winsys:

Collaboration graph
[legend]

Data Fields

void(* destroy )(struct pipe_winsys *ws)
const char *(* get_name )(struct pipe_winsys *ws)
 Returns name of this winsys interface.
void(* flush_frontbuffer )(struct pipe_winsys *ws, struct pipe_surface *surf, void *context_private)
 Do any special operations to ensure frontbuffer contents are displayed, eg copy fake frontbuffer.
struct pipe_surface *(* surface_alloc )(struct pipe_winsys *ws)
 allocate a new surface (no context dependency)
int(* surface_alloc_storage )(struct pipe_winsys *ws, struct pipe_surface *surf, unsigned width, unsigned height, enum pipe_format format, unsigned flags, unsigned tex_usage)
 Allocate storage for a pipe_surface.
void(* surface_release )(struct pipe_winsys *ws, struct pipe_surface **s)
struct pipe_buffer *(* buffer_create )(struct pipe_winsys *ws, unsigned alignment, unsigned usage, unsigned size)
 Buffer management.
struct pipe_buffer *(* user_buffer_create )(struct pipe_winsys *ws, void *ptr, unsigned bytes)
 Create a buffer that wraps user-space data.
void *(* buffer_map )(struct pipe_winsys *ws, struct pipe_buffer *buf, unsigned usage)
 Map the entire data store of a buffer object into the client's address.
void(* buffer_unmap )(struct pipe_winsys *ws, struct pipe_buffer *buf)
void(* buffer_destroy )(struct pipe_winsys *ws, struct pipe_buffer *buf)
void(* fence_reference )(struct pipe_winsys *ws, struct pipe_fence_handle **ptr, struct pipe_fence_handle *fence)
 Set ptr = fence, with reference counting.
int(* fence_signalled )(struct pipe_winsys *ws, struct pipe_fence_handle *fence, unsigned flag)
 Checks whether the fence has been signalled.
int(* fence_finish )(struct pipe_winsys *ws, struct pipe_fence_handle *fence, unsigned flag)
 Wait for the fence to finish.

Detailed Description

Gallium3D drivers are (meant to be!) independent of both GL and the window system.

The window system provides a buffer manager and a set of additional hooks for things like command buffer submission, etc.

There clearly has to be some agreement between the window system driver and the hardware driver about the format of command buffers, etc.

Definition at line 63 of file p_winsys.h.


Field Documentation

void(* pipe_winsys::destroy)(struct pipe_winsys *ws)

const char*(* pipe_winsys::get_name)(struct pipe_winsys *ws)

Returns name of this winsys interface.

void(* pipe_winsys::flush_frontbuffer)(struct pipe_winsys *ws, struct pipe_surface *surf, void *context_private)

Do any special operations to ensure frontbuffer contents are displayed, eg copy fake frontbuffer.

struct pipe_surface*(* pipe_winsys::surface_alloc)(struct pipe_winsys *ws) [read]

allocate a new surface (no context dependency)

int(* pipe_winsys::surface_alloc_storage)(struct pipe_winsys *ws, struct pipe_surface *surf, unsigned width, unsigned height, enum pipe_format format, unsigned flags, unsigned tex_usage)

Allocate storage for a pipe_surface.

Parameters:
flags XXX unused, remove someday
Returns:
0 if succeeds.

void(* pipe_winsys::surface_release)(struct pipe_winsys *ws, struct pipe_surface **s)

struct pipe_buffer*(* pipe_winsys::buffer_create)(struct pipe_winsys *ws, unsigned alignment, unsigned usage, unsigned size) [read]

Buffer management.

Buffer attributes are mostly fixed over its lifetime.

Remember that gallium gets to choose the interface it needs, and the window systems must then implement that interface (rather than the other way around...).

usage is a bitmask of PIPE_BUFFER_USAGE_PIXEL/VERTEX/INDEX/CONSTANT. This usage argument is only an optimization hint, not a guarantee, therefore proper behavior must be observed in all circumstances.

alignment indicates the client's alignment requirements, eg for SSE instructions.

struct pipe_buffer*(* pipe_winsys::user_buffer_create)(struct pipe_winsys *ws, void *ptr, unsigned bytes) [read]

Create a buffer that wraps user-space data.

Effectively this schedules a delayed call to buffer_create followed by an upload of the data at *some point in the future*, or perhaps never. Basically the allocate/upload is delayed until the buffer is actually passed to hardware.

The intention is to provide a quick way to turn regular data into a buffer, and secondly to avoid a copy operation if that data subsequently turns out to be only accessed by the CPU.

Common example is OpenGL vertex buffers that are subsequently processed either by software TNL in the driver or by passing to hardware.

XXX: What happens if the delayed call to buffer_create() fails?

Note that ptr may be accessed at any time upto the time when the buffer is destroyed, so the data must not be freed before then.

void*(* pipe_winsys::buffer_map)(struct pipe_winsys *ws, struct pipe_buffer *buf, unsigned usage)

Map the entire data store of a buffer object into the client's address.

flags is bitmask of PIPE_BUFFER_USAGE_CPU_READ/WRITE flags.

void(* pipe_winsys::buffer_unmap)(struct pipe_winsys *ws, struct pipe_buffer *buf)

void(* pipe_winsys::buffer_destroy)(struct pipe_winsys *ws, struct pipe_buffer *buf)

void(* pipe_winsys::fence_reference)(struct pipe_winsys *ws, struct pipe_fence_handle **ptr, struct pipe_fence_handle *fence)

Set ptr = fence, with reference counting.

int(* pipe_winsys::fence_signalled)(struct pipe_winsys *ws, struct pipe_fence_handle *fence, unsigned flag)

Checks whether the fence has been signalled.

Parameters:
flags driver-specific meaning
Returns:
zero on success.

int(* pipe_winsys::fence_finish)(struct pipe_winsys *ws, struct pipe_fence_handle *fence, unsigned flag)

Wait for the fence to finish.

Parameters:
flags driver-specific meaning
Returns:
zero on success.


The documentation for this struct was generated from the following file:
Generated on Tue Sep 29 06:26:04 2009 for Gallium3D by  doxygen 1.5.4