summaryrefslogtreecommitdiff
path: root/src/gallium/auxiliary/pipebuffer/pb_validate.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/gallium/auxiliary/pipebuffer/pb_validate.c')
-rw-r--r--src/gallium/auxiliary/pipebuffer/pb_validate.c84
1 files changed, 22 insertions, 62 deletions
diff --git a/src/gallium/auxiliary/pipebuffer/pb_validate.c b/src/gallium/auxiliary/pipebuffer/pb_validate.c
index 94532bb4ce..1e54fc39d4 100644
--- a/src/gallium/auxiliary/pipebuffer/pb_validate.c
+++ b/src/gallium/auxiliary/pipebuffer/pb_validate.c
@@ -46,16 +46,9 @@
#define PB_VALIDATE_INITIAL_SIZE 1 /* 512 */
-struct pb_validate_entry
-{
- struct pb_buffer *buf;
- unsigned flags;
-};
-
-
struct pb_validate
{
- struct pb_validate_entry *entries;
+ struct pb_buffer **buffers;
unsigned used;
unsigned size;
};
@@ -63,50 +56,43 @@ struct pb_validate
enum pipe_error
pb_validate_add_buffer(struct pb_validate *vl,
- struct pb_buffer *buf,
- unsigned flags)
+ struct pb_buffer *buf)
{
assert(buf);
if(!buf)
return PIPE_ERROR;
- assert(flags & PIPE_BUFFER_USAGE_GPU_READ_WRITE);
- assert(!(flags & ~PIPE_BUFFER_USAGE_GPU_READ_WRITE));
- flags &= PIPE_BUFFER_USAGE_GPU_READ_WRITE;
-
/* We only need to store one reference for each buffer, so avoid storing
- * consecutive references for the same buffer. It might not be the most
- * common pattern, but it is easy to implement.
+ * consecutive references for the same buffer. It might not be the more
+ * common pasttern, but it is easy to implement.
*/
- if(vl->used && vl->entries[vl->used - 1].buf == buf) {
- vl->entries[vl->used - 1].flags |= flags;
+ if(vl->used && vl->buffers[vl->used - 1] == buf) {
return PIPE_OK;
}
/* Grow the table */
if(vl->used == vl->size) {
unsigned new_size;
- struct pb_validate_entry *new_entries;
+ struct pb_buffer **new_buffers;
new_size = vl->size * 2;
if(!new_size)
return PIPE_ERROR_OUT_OF_MEMORY;
- new_entries = (struct pb_validate_entry *)REALLOC(vl->entries,
- vl->size*sizeof(struct pb_validate_entry),
- new_size*sizeof(struct pb_validate_entry));
- if(!new_entries)
+ new_buffers = (struct pb_buffer **)REALLOC(vl->buffers,
+ vl->size*sizeof(struct pb_buffer *),
+ new_size*sizeof(struct pb_buffer *));
+ if(!new_buffers)
return PIPE_ERROR_OUT_OF_MEMORY;
- memset(new_entries + vl->size, 0, (new_size - vl->size)*sizeof(struct pb_validate_entry));
+ memset(new_buffers + vl->size, 0, (new_size - vl->size)*sizeof(struct pb_buffer *));
vl->size = new_size;
- vl->entries = new_entries;
+ vl->buffers = new_buffers;
}
- assert(!vl->entries[vl->used].buf);
- pb_reference(&vl->entries[vl->used].buf, buf);
- vl->entries[vl->used].flags = flags;
+ assert(!vl->buffers[vl->used]);
+ pb_reference(&vl->buffers[vl->used], buf);
++vl->used;
return PIPE_OK;
@@ -114,36 +100,10 @@ pb_validate_add_buffer(struct pb_validate *vl,
enum pipe_error
-pb_validate_foreach(struct pb_validate *vl,
- enum pipe_error (*callback)(struct pb_buffer *buf, void *data),
- void *data)
-{
- unsigned i;
- for(i = 0; i < vl->used; ++i) {
- enum pipe_error ret;
- ret = callback(vl->entries[i].buf, data);
- if(ret != PIPE_OK)
- return ret;
- }
- return PIPE_OK;
-}
-
-
-enum pipe_error
pb_validate_validate(struct pb_validate *vl)
{
- unsigned i;
-
- for(i = 0; i < vl->used; ++i) {
- enum pipe_error ret;
- ret = pb_validate(vl->entries[i].buf, vl, vl->entries[i].flags);
- if(ret != PIPE_OK) {
- while(i--)
- pb_validate(vl->entries[i].buf, NULL, 0);
- return ret;
- }
- }
-
+ /* FIXME: go through each buffer, ensure its not mapped, its address is
+ * available -- requires a new pb_buffer interface */
return PIPE_OK;
}
@@ -154,8 +114,8 @@ pb_validate_fence(struct pb_validate *vl,
{
unsigned i;
for(i = 0; i < vl->used; ++i) {
- pb_fence(vl->entries[i].buf, fence);
- pb_reference(&vl->entries[i].buf, NULL);
+ buffer_fence(vl->buffers[i], fence);
+ pb_reference(&vl->buffers[i], NULL);
}
vl->used = 0;
}
@@ -166,8 +126,8 @@ pb_validate_destroy(struct pb_validate *vl)
{
unsigned i;
for(i = 0; i < vl->used; ++i)
- pb_reference(&vl->entries[i].buf, NULL);
- FREE(vl->entries);
+ pb_reference(&vl->buffers[i], NULL);
+ FREE(vl->buffers);
FREE(vl);
}
@@ -182,8 +142,8 @@ pb_validate_create()
return NULL;
vl->size = PB_VALIDATE_INITIAL_SIZE;
- vl->entries = (struct pb_validate_entry *)CALLOC(vl->size, sizeof(struct pb_validate_entry));
- if(!vl->entries) {
+ vl->buffers = (struct pb_buffer **)CALLOC(vl->size, sizeof(struct pb_buffer *));
+ if(!vl->buffers) {
FREE(vl);
return NULL;
}