vk/cmd_buffer: Add a helper for allocating dynamic state
This matches what we do for surface state and makes the dynamic state pool more opaque to things that need to get dynamic state.
This commit is contained in:
@@ -318,6 +318,14 @@ anv_cmd_buffer_alloc_surface_state(struct anv_cmd_buffer *cmd_buffer,
|
|||||||
return state;
|
return state;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct anv_state
|
||||||
|
anv_cmd_buffer_alloc_dynamic_state(struct anv_cmd_buffer *cmd_buffer,
|
||||||
|
uint32_t size, uint32_t alignment)
|
||||||
|
{
|
||||||
|
return anv_state_stream_alloc(&cmd_buffer->dynamic_state_stream,
|
||||||
|
size, alignment);
|
||||||
|
}
|
||||||
|
|
||||||
VkResult
|
VkResult
|
||||||
anv_cmd_buffer_new_surface_state_bo(struct anv_cmd_buffer *cmd_buffer)
|
anv_cmd_buffer_new_surface_state_bo(struct anv_cmd_buffer *cmd_buffer)
|
||||||
{
|
{
|
||||||
|
@@ -409,7 +409,7 @@ cmd_buffer_emit_samplers(struct anv_cmd_buffer *cmd_buffer,
|
|||||||
return VK_SUCCESS;
|
return VK_SUCCESS;
|
||||||
|
|
||||||
uint32_t size = sampler_count * 16;
|
uint32_t size = sampler_count * 16;
|
||||||
*state = anv_state_stream_alloc(&cmd_buffer->dynamic_state_stream, size, 32);
|
*state = anv_cmd_buffer_alloc_dynamic_state(cmd_buffer, size, 32);
|
||||||
|
|
||||||
if (state->map == NULL)
|
if (state->map == NULL)
|
||||||
return VK_ERROR_OUT_OF_DEVICE_MEMORY;
|
return VK_ERROR_OUT_OF_DEVICE_MEMORY;
|
||||||
@@ -522,8 +522,8 @@ anv_cmd_buffer_emit_dynamic(struct anv_cmd_buffer *cmd_buffer,
|
|||||||
{
|
{
|
||||||
struct anv_state state;
|
struct anv_state state;
|
||||||
|
|
||||||
state = anv_state_stream_alloc(&cmd_buffer->dynamic_state_stream,
|
state = anv_cmd_buffer_alloc_dynamic_state(cmd_buffer,
|
||||||
dwords * 4, alignment);
|
dwords * 4, alignment);
|
||||||
memcpy(state.map, a, dwords * 4);
|
memcpy(state.map, a, dwords * 4);
|
||||||
|
|
||||||
VG(VALGRIND_CHECK_MEM_IS_DEFINED(state.map, dwords * 4));
|
VG(VALGRIND_CHECK_MEM_IS_DEFINED(state.map, dwords * 4));
|
||||||
@@ -539,8 +539,8 @@ anv_cmd_buffer_merge_dynamic(struct anv_cmd_buffer *cmd_buffer,
|
|||||||
struct anv_state state;
|
struct anv_state state;
|
||||||
uint32_t *p;
|
uint32_t *p;
|
||||||
|
|
||||||
state = anv_state_stream_alloc(&cmd_buffer->dynamic_state_stream,
|
state = anv_cmd_buffer_alloc_dynamic_state(cmd_buffer,
|
||||||
dwords * 4, alignment);
|
dwords * 4, alignment);
|
||||||
p = state.map;
|
p = state.map;
|
||||||
for (uint32_t i = 0; i < dwords; i++)
|
for (uint32_t i = 0; i < dwords; i++)
|
||||||
p[i] = a[i] | b[i];
|
p[i] = a[i] | b[i];
|
||||||
|
@@ -717,6 +717,9 @@ struct anv_cmd_buffer {
|
|||||||
struct anv_state
|
struct anv_state
|
||||||
anv_cmd_buffer_alloc_surface_state(struct anv_cmd_buffer *cmd_buffer,
|
anv_cmd_buffer_alloc_surface_state(struct anv_cmd_buffer *cmd_buffer,
|
||||||
uint32_t size, uint32_t alignment);
|
uint32_t size, uint32_t alignment);
|
||||||
|
struct anv_state
|
||||||
|
anv_cmd_buffer_alloc_dynamic_state(struct anv_cmd_buffer *cmd_buffer,
|
||||||
|
uint32_t size, uint32_t alignment);
|
||||||
|
|
||||||
VkResult anv_cmd_buffer_new_surface_state_bo(struct anv_cmd_buffer *cmd_buffer);
|
VkResult anv_cmd_buffer_new_surface_state_bo(struct anv_cmd_buffer *cmd_buffer);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user