i915g/winsys: buffer validation support
v2: Add the batch bo to the libdrm validation lost, for otherwise libdrm won't take previously used buffers into account. Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
This commit is contained in:
parent
e20c3255e2
commit
3c59b3eb4b
|
@ -94,6 +94,18 @@ struct i915_winsys {
|
||||||
struct i915_winsys_batchbuffer *
|
struct i915_winsys_batchbuffer *
|
||||||
(*batchbuffer_create)(struct i915_winsys *iws);
|
(*batchbuffer_create)(struct i915_winsys *iws);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Validate buffers for usage in this batchbuffer.
|
||||||
|
* Does space-checking and asorted other book-keeping.
|
||||||
|
*
|
||||||
|
* @batch
|
||||||
|
* @buffers array to buffers to validate
|
||||||
|
* @num_of_buffers size of the passed array
|
||||||
|
*/
|
||||||
|
boolean (*validate_buffers)(struct i915_winsys_batchbuffer *batch,
|
||||||
|
struct i915_winsys_buffer **buffers,
|
||||||
|
int num_of_buffers);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Emit a relocation to a buffer.
|
* Emit a relocation to a buffer.
|
||||||
* Target position in batchbuffer is the same as ptr.
|
* Target position in batchbuffer is the same as ptr.
|
||||||
|
|
|
@ -72,6 +72,26 @@ i915_drm_batchbuffer_create(struct i915_winsys *iws)
|
||||||
return &batch->base;
|
return &batch->base;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static boolean
|
||||||
|
i915_drm_batchbuffer_validate_buffers(struct i915_winsys_batchbuffer *batch,
|
||||||
|
struct i915_winsys_buffer **buffer,
|
||||||
|
int num_of_buffers)
|
||||||
|
{
|
||||||
|
struct i915_drm_batchbuffer *drm_batch = i915_drm_batchbuffer(batch);
|
||||||
|
drm_intel_bo *bos[num_of_buffers + 1];
|
||||||
|
int i, ret;
|
||||||
|
|
||||||
|
bos[0] = drm_batch->bo;
|
||||||
|
for (i = 0; i < num_of_buffers; i++)
|
||||||
|
bos[i+1] = intel_bo(buffer[i]);
|
||||||
|
|
||||||
|
ret = drm_intel_bufmgr_check_aperture_space(bos, num_of_buffers);
|
||||||
|
if (ret != 0)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
i915_drm_batchbuffer_reloc(struct i915_winsys_batchbuffer *ibatch,
|
i915_drm_batchbuffer_reloc(struct i915_winsys_batchbuffer *ibatch,
|
||||||
struct i915_winsys_buffer *buffer,
|
struct i915_winsys_buffer *buffer,
|
||||||
|
@ -211,6 +231,7 @@ i915_drm_batchbuffer_destroy(struct i915_winsys_batchbuffer *ibatch)
|
||||||
void i915_drm_winsys_init_batchbuffer_functions(struct i915_drm_winsys *idws)
|
void i915_drm_winsys_init_batchbuffer_functions(struct i915_drm_winsys *idws)
|
||||||
{
|
{
|
||||||
idws->base.batchbuffer_create = i915_drm_batchbuffer_create;
|
idws->base.batchbuffer_create = i915_drm_batchbuffer_create;
|
||||||
|
idws->base.validate_buffers = i915_drm_batchbuffer_validate_buffers;
|
||||||
idws->base.batchbuffer_reloc = i915_drm_batchbuffer_reloc;
|
idws->base.batchbuffer_reloc = i915_drm_batchbuffer_reloc;
|
||||||
idws->base.batchbuffer_flush = i915_drm_batchbuffer_flush;
|
idws->base.batchbuffer_flush = i915_drm_batchbuffer_flush;
|
||||||
idws->base.batchbuffer_destroy = i915_drm_batchbuffer_destroy;
|
idws->base.batchbuffer_destroy = i915_drm_batchbuffer_destroy;
|
||||||
|
|
|
@ -58,6 +58,14 @@ i915_sw_batchbuffer_create(struct i915_winsys *iws)
|
||||||
return &batch->base;
|
return &batch->base;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static boolean
|
||||||
|
i915_sw_batchbuffer_validate_buffers(struct i915_winsys_batchbuffer *batch,
|
||||||
|
struct i915_winsys_buffer **buffer,
|
||||||
|
int num_of_buffers)
|
||||||
|
{
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
i915_sw_batchbuffer_reloc(struct i915_winsys_batchbuffer *ibatch,
|
i915_sw_batchbuffer_reloc(struct i915_winsys_batchbuffer *ibatch,
|
||||||
struct i915_winsys_buffer *buffer,
|
struct i915_winsys_buffer *buffer,
|
||||||
|
@ -146,6 +154,7 @@ i915_sw_batchbuffer_destroy(struct i915_winsys_batchbuffer *ibatch)
|
||||||
void i915_sw_winsys_init_batchbuffer_functions(struct i915_sw_winsys *isws)
|
void i915_sw_winsys_init_batchbuffer_functions(struct i915_sw_winsys *isws)
|
||||||
{
|
{
|
||||||
isws->base.batchbuffer_create = i915_sw_batchbuffer_create;
|
isws->base.batchbuffer_create = i915_sw_batchbuffer_create;
|
||||||
|
isws->base.validate_buffers = i915_sw_batchbuffer_validate_buffers;
|
||||||
isws->base.batchbuffer_reloc = i915_sw_batchbuffer_reloc;
|
isws->base.batchbuffer_reloc = i915_sw_batchbuffer_reloc;
|
||||||
isws->base.batchbuffer_flush = i915_sw_batchbuffer_flush;
|
isws->base.batchbuffer_flush = i915_sw_batchbuffer_flush;
|
||||||
isws->base.batchbuffer_destroy = i915_sw_batchbuffer_destroy;
|
isws->base.batchbuffer_destroy = i915_sw_batchbuffer_destroy;
|
||||||
|
|
Loading…
Reference in New Issue