void *intel_upload_map(struct intel_context *intel, GLuint size, GLuint align) { GLuint base, delta; char *ptr; base = (intel->upload.offset + align - 1) / align * align; if (intel->upload.bo == NULL || base + size > intel->upload.bo->size) { wrap_buffers(intel, size); base = 0; } delta = base - intel->upload.offset; if (intel->upload.buffer_len && intel->upload.buffer_len + delta + size > sizeof(intel->upload.buffer)) { drm_intel_bo_subdata(intel->upload.bo, intel->upload.buffer_offset, intel->upload.buffer_len, intel->upload.buffer); intel->upload.buffer_len = 0; } if (size <= sizeof(intel->upload.buffer)) { if (intel->upload.buffer_len == 0) intel->upload.buffer_offset = base; else intel->upload.buffer_len += delta; ptr = intel->upload.buffer + intel->upload.buffer_len; intel->upload.buffer_len += size; } else ptr = malloc(size); return ptr; }
static void get_space( struct brw_context *brw, GLuint size, struct gl_buffer_object **vbo_return, GLuint *offset_return ) { size = ALIGN(size, 64); if (brw->vb.upload.offset + size > BRW_UPLOAD_INIT_SIZE) wrap_buffers(brw, size); *vbo_return = brw->vb.upload.vbo[brw->vb.upload.buf]; *offset_return = brw->vb.upload.offset; brw->vb.upload.offset += size; }
void intel_upload_data(struct intel_context *intel, const void *ptr, GLuint size, GLuint align, drm_intel_bo **return_bo, GLuint *return_offset) { GLuint base, delta; base = (intel->upload.offset + align - 1) / align * align; if (intel->upload.bo == NULL || base + size > intel->upload.bo->size) { wrap_buffers(intel, size); base = 0; } drm_intel_bo_reference(intel->upload.bo); *return_bo = intel->upload.bo; *return_offset = base; delta = base - intel->upload.offset; if (intel->upload.buffer_len && intel->upload.buffer_len + delta + size > sizeof(intel->upload.buffer)) { drm_intel_bo_subdata(intel->upload.bo, intel->upload.buffer_offset, intel->upload.buffer_len, intel->upload.buffer); intel->upload.buffer_len = 0; } if (size < sizeof(intel->upload.buffer)) { if (intel->upload.buffer_len == 0) intel->upload.buffer_offset = base; else intel->upload.buffer_len += delta; memcpy(intel->upload.buffer + intel->upload.buffer_len, ptr, size); intel->upload.buffer_len += size; } else { drm_intel_bo_subdata(intel->upload.bo, base, size, ptr); } intel->upload.offset = base + size; }
static void get_space( struct brw_context *brw, GLuint size, dri_bo **bo_return, GLuint *offset_return ) { size = ALIGN(size, 64); if (brw->vb.upload.bo == NULL || brw->vb.upload.offset + size > brw->vb.upload.bo->size) { wrap_buffers(brw, size); } assert(*bo_return == NULL); dri_bo_reference(brw->vb.upload.bo); *bo_return = brw->vb.upload.bo; *offset_return = brw->vb.upload.offset; brw->vb.upload.offset += size; }
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; }