diff options
author | Kenneth Graunke <kenneth@whitecape.org> | 2013-08-01 16:14:17 -0700 |
---|---|---|
committer | Kenneth Graunke <kenneth@whitecape.org> | 2013-08-16 19:00:49 -0700 |
commit | 96a0fe7e4d121f6d879c010660f936f42e3413dc (patch) | |
tree | d02e012758a2629c62366b6798adcef906ed7d1f /src/mesa/drivers/dri/i965/intel_buffer_objects.c | |
parent | 76c2533470ec805fdb45592c72becd632d8bf6d4 (diff) | |
download | external_mesa3d-96a0fe7e4d121f6d879c010660f936f42e3413dc.zip external_mesa3d-96a0fe7e4d121f6d879c010660f936f42e3413dc.tar.gz external_mesa3d-96a0fe7e4d121f6d879c010660f936f42e3413dc.tar.bz2 |
i965: Split intel_upload code out into a separate file.
This code upload performs batched uploads via a BO. By moving it out to
a separate file, intel_buffer_objects.c only provides the core buffer
object functionality.
Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Paul Berry <stereotype441@gmail.com>
Diffstat (limited to 'src/mesa/drivers/dri/i965/intel_buffer_objects.c')
-rw-r--r-- | src/mesa/drivers/dri/i965/intel_buffer_objects.c | 133 |
1 files changed, 0 insertions, 133 deletions
diff --git a/src/mesa/drivers/dri/i965/intel_buffer_objects.c b/src/mesa/drivers/dri/i965/intel_buffer_objects.c index 740913b..81c72fa 100644 --- a/src/mesa/drivers/dri/i965/intel_buffer_objects.c +++ b/src/mesa/drivers/dri/i965/intel_buffer_objects.c @@ -412,139 +412,6 @@ intel_bufferobj_buffer(struct brw_context *brw, return intel_obj->buffer; } -#define INTEL_UPLOAD_SIZE (64*1024) - -void -intel_upload_finish(struct brw_context *brw) -{ - if (!brw->upload.bo) - return; - - if (brw->upload.buffer_len) { - drm_intel_bo_subdata(brw->upload.bo, - brw->upload.buffer_offset, - brw->upload.buffer_len, - brw->upload.buffer); - brw->upload.buffer_len = 0; - } - - drm_intel_bo_unreference(brw->upload.bo); - brw->upload.bo = NULL; -} - -static void wrap_buffers(struct brw_context *brw, GLuint size) -{ - intel_upload_finish(brw); - - if (size < INTEL_UPLOAD_SIZE) - size = INTEL_UPLOAD_SIZE; - - brw->upload.bo = drm_intel_bo_alloc(brw->bufmgr, "upload", size, 0); - brw->upload.offset = 0; -} - -void intel_upload_data(struct brw_context *brw, - const void *ptr, GLuint size, GLuint align, - drm_intel_bo **return_bo, - GLuint *return_offset) -{ - GLuint base, delta; - - base = (brw->upload.offset + align - 1) / align * align; - if (brw->upload.bo == NULL || base + size > brw->upload.bo->size) { - wrap_buffers(brw, size); - base = 0; - } - - drm_intel_bo_reference(brw->upload.bo); - *return_bo = brw->upload.bo; - *return_offset = base; - - delta = base - brw->upload.offset; - if (brw->upload.buffer_len && - brw->upload.buffer_len + delta + size > sizeof(brw->upload.buffer)) - { - drm_intel_bo_subdata(brw->upload.bo, - brw->upload.buffer_offset, - brw->upload.buffer_len, - brw->upload.buffer); - brw->upload.buffer_len = 0; - } - - if (size < sizeof(brw->upload.buffer)) - { - if (brw->upload.buffer_len == 0) - brw->upload.buffer_offset = base; - else - brw->upload.buffer_len += delta; - - memcpy(brw->upload.buffer + brw->upload.buffer_len, ptr, size); - brw->upload.buffer_len += size; - } - else - { - drm_intel_bo_subdata(brw->upload.bo, base, size, ptr); - } - - brw->upload.offset = base + size; -} - -void *intel_upload_map(struct brw_context *brw, GLuint size, GLuint align) -{ - GLuint base, delta; - char *ptr; - - base = (brw->upload.offset + align - 1) / align * align; - if (brw->upload.bo == NULL || base + size > brw->upload.bo->size) { - wrap_buffers(brw, size); - base = 0; - } - - delta = base - brw->upload.offset; - if (brw->upload.buffer_len && - brw->upload.buffer_len + delta + size > sizeof(brw->upload.buffer)) - { - drm_intel_bo_subdata(brw->upload.bo, - brw->upload.buffer_offset, - brw->upload.buffer_len, - brw->upload.buffer); - brw->upload.buffer_len = 0; - } - - if (size <= sizeof(brw->upload.buffer)) { - if (brw->upload.buffer_len == 0) - brw->upload.buffer_offset = base; - else - brw->upload.buffer_len += delta; - - ptr = brw->upload.buffer + brw->upload.buffer_len; - brw->upload.buffer_len += size; - } else - ptr = malloc(size); - - return ptr; -} - -void intel_upload_unmap(struct brw_context *brw, - const void *ptr, GLuint size, GLuint align, - drm_intel_bo **return_bo, - GLuint *return_offset) -{ - GLuint base; - - base = (brw->upload.offset + align - 1) / align * align; - if (size > sizeof(brw->upload.buffer)) { - drm_intel_bo_subdata(brw->upload.bo, base, size, ptr); - free((void*)ptr); - } - - drm_intel_bo_reference(brw->upload.bo); - *return_bo = brw->upload.bo; - *return_offset = base; - - brw->upload.offset = base + size; -} - drm_intel_bo * intel_bufferobj_source(struct brw_context *brw, struct intel_buffer_object *intel_obj, |