turnip: add function to allocate aligned memory in a substream cs
To use with texture states that need alignment (texconst, sampler, border) Signed-off-by: Jonathan Marek <jonathan@marek.ca> Reviewed-by: Kristian H. Kristensen <hoegsberg@google.com>
This commit is contained in:
parent
1abca2b3c8
commit
3ab4f99461
|
@ -262,6 +262,41 @@ tu_cs_begin_sub_stream(struct tu_device *dev,
|
|||
return VK_SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
* Allocate count*size dwords, aligned to size dwords.
|
||||
* \a cs must be in TU_CS_MODE_SUB_STREAM mode.
|
||||
*
|
||||
*/
|
||||
VkResult
|
||||
tu_cs_alloc(struct tu_device *dev,
|
||||
struct tu_cs *cs,
|
||||
uint32_t count,
|
||||
uint32_t size,
|
||||
struct ts_cs_memory *memory)
|
||||
{
|
||||
assert(cs->mode == TU_CS_MODE_SUB_STREAM);
|
||||
assert(size && size <= 1024);
|
||||
|
||||
if (!count)
|
||||
return VK_SUCCESS;
|
||||
|
||||
/* TODO: smarter way to deal with alignment? */
|
||||
|
||||
VkResult result = tu_cs_reserve_space(dev, cs, count * size + (size-1));
|
||||
if (result != VK_SUCCESS)
|
||||
return result;
|
||||
|
||||
struct tu_bo *bo = cs->bos[cs->bo_count - 1];
|
||||
size_t offset = align(tu_cs_get_offset(cs), size);
|
||||
|
||||
memory->map = bo->map + offset * sizeof(uint32_t);
|
||||
memory->iova = bo->iova + offset * sizeof(uint32_t);
|
||||
|
||||
cs->start = cs->cur = (uint32_t*) bo->map + offset + count * size;
|
||||
|
||||
return VK_SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
* End command packet emission to a sub-stream. \a sub_cs becomes invalid
|
||||
* after this call.
|
||||
|
|
|
@ -48,6 +48,13 @@ tu_cs_begin_sub_stream(struct tu_device *dev,
|
|||
uint32_t size,
|
||||
struct tu_cs *sub_cs);
|
||||
|
||||
VkResult
|
||||
tu_cs_alloc(struct tu_device *dev,
|
||||
struct tu_cs *cs,
|
||||
uint32_t count,
|
||||
uint32_t size,
|
||||
struct ts_cs_memory *memory);
|
||||
|
||||
struct tu_cs_entry
|
||||
tu_cs_end_sub_stream(struct tu_cs *cs, struct tu_cs *sub_cs);
|
||||
|
||||
|
|
|
@ -508,6 +508,11 @@ struct tu_cs_entry
|
|||
uint32_t offset;
|
||||
};
|
||||
|
||||
struct ts_cs_memory {
|
||||
uint32_t *map;
|
||||
uint64_t iova;
|
||||
};
|
||||
|
||||
enum tu_cs_mode
|
||||
{
|
||||
|
||||
|
|
Loading…
Reference in New Issue