/* This is the only way buffers get added to the validate list. */ void intel_batchbuffer_emit_reloc(struct intel_batchbuffer *batch, drm_intel_bo *buffer, uint32_t delta, uint32_t read_domains, uint32_t write_domain, int fenced) { int ret; if (batch->ptr - batch->buffer > BATCH_SZ) printf("bad relocation ptr %p map %p offset %d size %d\n", batch->ptr, batch->buffer, (int)(batch->ptr - batch->buffer), BATCH_SZ); if (fenced) ret = drm_intel_bo_emit_reloc_fence(batch->bo, batch->ptr - batch->buffer, buffer, delta, read_domains, write_domain); else ret = drm_intel_bo_emit_reloc(batch->bo, batch->ptr - batch->buffer, buffer, delta, read_domains, write_domain); intel_batchbuffer_emit_dword(batch, buffer->offset + delta); assert(ret == 0); }
void intel_batchbuffer_emit_reloc(struct intel_batchbuffer *batch, dri_bo *bo, uint32_t read_domains, uint32_t write_domains, uint32_t delta) { assert(batch->ptr - batch->map < batch->size); dri_bo_emit_reloc(batch->buffer, read_domains, write_domains, delta, batch->ptr - batch->map, bo); intel_batchbuffer_emit_dword(batch, bo->offset + delta); }
void intel_batchbuffer_align(struct intel_batchbuffer *batch, unsigned int alignedment) { int used = batch->ptr - batch->map; int pad_size; assert((alignedment & 3) == 0); pad_size = ALIGN(used, alignedment) - used; assert((pad_size & 3) == 0); assert(intel_batchbuffer_space(batch) >= pad_size); while (pad_size >= 4) { intel_batchbuffer_emit_dword(batch, 0); pad_size -= 4; } }