1f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/************************************************************************** 2f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 3f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Copyright © 2009 Jakob Bornecrantz 4f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 5f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Permission is hereby granted, free of charge, to any person obtaining a 6f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * copy of this software and associated documentation files (the "Software"), 7f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * to deal in the Software without restriction, including without limitation 8f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * the rights to use, copy, modify, merge, publish, distribute, sublicense, 9f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * and/or sell copies of the Software, and to permit persons to whom the 10f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Software is furnished to do so, subject to the following conditions: 11f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 12f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * The above copyright notice and this permission notice (including the next 13f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * paragraph) shall be included in all copies or substantial portions of the 14f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Software. 15f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 16f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 19f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 21f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 22f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * DEALINGS IN THE SOFTWARE. 23f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 24f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org **************************************************************************/ 25f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 26f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#ifndef I915_WINSYS_H 27f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define I915_WINSYS_H 28f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 29f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "pipe/p_compiler.h" 30f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 31f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct i915_winsys; 32f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct i915_winsys_buffer; 33f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct i915_winsys_batchbuffer; 34f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_resource; 35f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct pipe_fence_handle; 36f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct winsys_handle; 37f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 38f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgenum i915_winsys_buffer_usage 39f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 40f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* use on textures */ 41f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org I915_USAGE_RENDER = 0x01, 42f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org I915_USAGE_SAMPLER = 0x02, 43f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org I915_USAGE_2D_TARGET = 0x04, 44f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org I915_USAGE_2D_SOURCE = 0x08, 45f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* use on vertex */ 46f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org I915_USAGE_VERTEX = 0x10 47f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 48f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 49f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgenum i915_winsys_buffer_type 50f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 51f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org I915_NEW_TEXTURE, 52f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org I915_NEW_SCANOUT, /**< a texture used for scanning out from */ 53f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org I915_NEW_VERTEX 54f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 55f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 56f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* These need to be in sync with the definitions of libdrm-intel! */ 57f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgenum i915_winsys_buffer_tile 58f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 59f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org I915_TILE_NONE, 60f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org I915_TILE_X, 61f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org I915_TILE_Y 62f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 63f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 64f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct i915_winsys_batchbuffer { 65f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 66f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct i915_winsys *iws; 67f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 68f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 69f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Values exported to speed up the writing the batchbuffer, 70f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * instead of having to go trough a accesor function for 71f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * each dword written. 72f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 73f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*{@*/ 74f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint8_t *map; 75f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint8_t *ptr; 76f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org size_t size; 77f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 78f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org size_t relocs; 79f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*@}*/ 80f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 81f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 82f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct i915_winsys { 83f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 84f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned pci_id; /**< PCI ID for the device */ 85f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 86f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 87f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Batchbuffer functions. 88f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 89f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*@{*/ 90f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 91f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Create a new batchbuffer. 92f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 93f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct i915_winsys_batchbuffer * 94f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (*batchbuffer_create)(struct i915_winsys *iws); 95f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 96f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 97f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Validate buffers for usage in this batchbuffer. 98f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Does space-checking and asorted other book-keeping. 99f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * @batch 101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * @buffers array to buffers to validate 102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * @num_of_buffers size of the passed array 103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org boolean (*validate_buffers)(struct i915_winsys_batchbuffer *batch, 105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct i915_winsys_buffer **buffers, 106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int num_of_buffers); 107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Emit a relocation to a buffer. 110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Target position in batchbuffer is the same as ptr. 111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * @batch 113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * @reloc buffer address to be inserted into target. 114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * @usage how is the hardware going to use the buffer. 115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * @offset add this to the reloc buffers address 116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * @target buffer where to write the address, null for batchbuffer. 117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * @fenced relocation needs a fence. 118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int (*batchbuffer_reloc)(struct i915_winsys_batchbuffer *batch, 120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct i915_winsys_buffer *reloc, 121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org enum i915_winsys_buffer_usage usage, 122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned offset, boolean fenced); 123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 124f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 125f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Flush a bufferbatch. 126f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 127f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void (*batchbuffer_flush)(struct i915_winsys_batchbuffer *batch, 128f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_fence_handle **fence); 129f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 130f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 131f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Destroy a batchbuffer. 132f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 133f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void (*batchbuffer_destroy)(struct i915_winsys_batchbuffer *batch); 134f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*@}*/ 135f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 136f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 137f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 138f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Buffer functions. 139f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 140f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*@{*/ 141f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 142f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Create a buffer. 143f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 144f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct i915_winsys_buffer * 145f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (*buffer_create)(struct i915_winsys *iws, 146f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned size, 147f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org enum i915_winsys_buffer_type type); 148f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 149f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 150f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Create a tiled buffer. 151f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 152f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * *stride, height are in bytes. The winsys tries to allocate the buffer with 153f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * the tiling mode provide in *tiling. If tiling is no possible, *tiling will 154f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * be set to I915_TILE_NONE. The calculated stride (incorporateing hw/kernel 155f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * requirements) is always returned in *stride. 156f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 157f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct i915_winsys_buffer * 158f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (*buffer_create_tiled)(struct i915_winsys *iws, 159f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned *stride, unsigned height, 160f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org enum i915_winsys_buffer_tile *tiling, 161f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org enum i915_winsys_buffer_type type); 162f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 163f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 164f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Creates a buffer from a handle. 165f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Used to implement pipe_screen::resource_from_handle. 166f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Also provides the stride information needed for the 167f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * texture via the stride argument. 168f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 169f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct i915_winsys_buffer * 170f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (*buffer_from_handle)(struct i915_winsys *iws, 171f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct winsys_handle *whandle, 172f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org enum i915_winsys_buffer_tile *tiling, 173f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned *stride); 174f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 175f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 176f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Used to implement pipe_screen::resource_get_handle. 177f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * The winsys might need the stride information. 178f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 179f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org boolean (*buffer_get_handle)(struct i915_winsys *iws, 180f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct i915_winsys_buffer *buffer, 181f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct winsys_handle *whandle, 182f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned stride); 183f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 184f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 185f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Map a buffer. 186f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 187f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void *(*buffer_map)(struct i915_winsys *iws, 188f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct i915_winsys_buffer *buffer, 189f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org boolean write); 190f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 191f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 192f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Unmap a buffer. 193f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 194f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void (*buffer_unmap)(struct i915_winsys *iws, 195f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct i915_winsys_buffer *buffer); 196f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 197f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 198f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Write to a buffer. 199f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 200f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Arguments follows pipe_buffer_write. 201f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 202f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int (*buffer_write)(struct i915_winsys *iws, 203f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct i915_winsys_buffer *dst, 204f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org size_t offset, 205f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org size_t size, 206f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const void *data); 207f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 208f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void (*buffer_destroy)(struct i915_winsys *iws, 209f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct i915_winsys_buffer *buffer); 210f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 211f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 212f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Check if a buffer is busy. 213f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 214f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org boolean (*buffer_is_busy)(struct i915_winsys *iws, 215f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct i915_winsys_buffer *buffer); 216f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*@}*/ 217f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 218f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 219f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 220f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Fence functions. 221f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 222f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*@{*/ 223f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 224f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Reference fence and set ptr to fence. 225f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 226f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void (*fence_reference)(struct i915_winsys *iws, 227f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_fence_handle **ptr, 228f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_fence_handle *fence); 229f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 230f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 231f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Check if a fence has finished. 232f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 233f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int (*fence_signalled)(struct i915_winsys *iws, 234f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_fence_handle *fence); 235f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 236f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 237f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Wait on a fence to finish. 238f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 239f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int (*fence_finish)(struct i915_winsys *iws, 240f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_fence_handle *fence); 241f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /*@}*/ 242f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 243f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 244f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /** 245f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Destroy the winsys. 246f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 247f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org void (*destroy)(struct i915_winsys *iws); 248f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 249f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 250f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 251