intel: rework cmd helpers
In the hope that the new helpers are easier to use.
An important change is that the units used for a writer are changed from
dwords to bytes. Helpers may still use dwords when it is more natural.
diff --git a/icd/intel/cmd.c b/icd/intel/cmd.c
index f68f3fe..8a93b4a 100644
--- a/icd/intel/cmd.c
+++ b/icd/intel/cmd.c
@@ -69,15 +69,14 @@
static struct intel_bo *alloc_writer_bo(struct intel_winsys *winsys,
enum intel_cmd_writer_type which,
- XGL_UINT size)
+ XGL_SIZE size)
{
static const char *writer_names[INTEL_CMD_WRITER_COUNT] = {
[INTEL_CMD_WRITER_BATCH] = "batch",
[INTEL_CMD_WRITER_INSTRUCTION] = "instruction",
};
- return intel_winsys_alloc_buffer(winsys, writer_names[which],
- sizeof(uint32_t) * size, true);
+ return intel_winsys_alloc_buffer(winsys, writer_names[which], size, true);
}
/**
@@ -128,7 +127,7 @@
*/
void cmd_writer_grow(struct intel_cmd *cmd,
enum intel_cmd_writer_type which,
- XGL_UINT new_size)
+ XGL_SIZE new_size)
{
struct intel_cmd_writer *writer = &cmd->writers[which];
struct intel_bo *new_bo;
@@ -137,7 +136,7 @@
if (new_size < writer->size << 1)
new_size = writer->size << 1;
/* STATE_BASE_ADDRESS requires page-aligned buffers */
- new_size = u_align(new_size, 4096 / sizeof(uint32_t));
+ new_size = u_align(new_size, 4096);
new_bo = alloc_writer_bo(cmd->dev->winsys, which, new_size);
if (!new_bo) {
@@ -155,7 +154,7 @@
return;
}
- memcpy(new_ptr, writer->ptr, sizeof(uint32_t) * writer->used);
+ memcpy(new_ptr, writer->ptr, writer->used);
intel_bo_unmap(writer->bo);
intel_bo_unreference(writer->bo);
@@ -167,12 +166,12 @@
static void cmd_writer_patch(struct intel_cmd *cmd,
enum intel_cmd_writer_type which,
- XGL_UINT pos, uint32_t val)
+ XGL_SIZE offset, uint32_t val)
{
struct intel_cmd_writer *writer = &cmd->writers[which];
- assert(pos < writer->used);
- ((uint32_t *) writer->ptr)[pos] = val;
+ assert(offset + sizeof(val) <= writer->used);
+ *((uint32_t *) ((char *) writer->ptr + offset)) = val;
}
static void cmd_reset(struct intel_cmd *cmd)
@@ -269,8 +268,7 @@
}
if (!cmd->writers[INTEL_CMD_WRITER_BATCH].size) {
- const XGL_UINT size =
- cmd->dev->gpu->max_batch_buffer_size / sizeof(uint32_t) / 2;
+ const XGL_UINT size = cmd->dev->gpu->max_batch_buffer_size / 2;
XGL_UINT divider = 1;
if (flags & XGL_CMD_BUFFER_OPTIMIZE_GPU_SMALL_BATCH_BIT)
@@ -278,8 +276,7 @@
cmd->writers[INTEL_CMD_WRITER_BATCH].size = size / divider;
cmd->writers[INTEL_CMD_WRITER_STATE].size = size / divider;
- cmd->writers[INTEL_CMD_WRITER_INSTRUCTION].size =
- 16384 / sizeof(uint32_t) / divider;
+ cmd->writers[INTEL_CMD_WRITER_INSTRUCTION].size = 16384 / divider;
}
for (i = 0; i < INTEL_CMD_WRITER_COUNT; i++) {
@@ -309,8 +306,8 @@
uint64_t presumed_offset;
int err;
- err = intel_bo_add_reloc(writer->bo,
- sizeof(uint32_t) * reloc->pos, reloc->bo, reloc->val,
+ err = intel_bo_add_reloc(writer->bo, reloc->offset,
+ reloc->bo, reloc->bo_offset,
reloc->flags, &presumed_offset);
if (err) {
cmd->result = XGL_ERROR_UNKNOWN;
@@ -318,7 +315,7 @@
}
assert(presumed_offset == (uint64_t) (uint32_t) presumed_offset);
- cmd_writer_patch(cmd, reloc->which, reloc->pos,
+ cmd_writer_patch(cmd, reloc->which, reloc->offset,
(uint32_t) presumed_offset);
}