mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-09 02:28:10 +02:00
v3dv: move push constant data to the command buffer state
Reviewed-by: Alejandro Piñeiro <apinheiro@igalia.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17536>
This commit is contained in:
parent
41a0c89d9f
commit
005542f0e3
3 changed files with 26 additions and 21 deletions
|
|
@ -2231,11 +2231,11 @@ v3dv_cmd_buffer_meta_state_push(struct v3dv_cmd_buffer *cmd_buffer,
|
|||
state->meta.has_descriptor_state = false;
|
||||
}
|
||||
|
||||
if (cmd_buffer->push_constants_size > 0) {
|
||||
state->meta.push_constants_size = cmd_buffer->push_constants_size;
|
||||
memcpy(state->meta.push_constants, cmd_buffer->push_constants_data,
|
||||
cmd_buffer->push_constants_size);
|
||||
cmd_buffer->push_constants_size = 0;
|
||||
if (cmd_buffer->state.push_constants_size > 0) {
|
||||
state->meta.push_constants_size = cmd_buffer->state.push_constants_size;
|
||||
memcpy(state->meta.push_constants, cmd_buffer->state.push_constants_data,
|
||||
cmd_buffer->state.push_constants_size);
|
||||
cmd_buffer->state.push_constants_size = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -2304,11 +2304,11 @@ v3dv_cmd_buffer_meta_state_pop(struct v3dv_cmd_buffer *cmd_buffer,
|
|||
* data.
|
||||
*/
|
||||
if (state->meta.push_constants_size > 0 &&
|
||||
cmd_buffer->push_constants_size > 0) {
|
||||
memcpy(cmd_buffer->push_constants_data, state->meta.push_constants,
|
||||
cmd_buffer->state.push_constants_size > 0) {
|
||||
memcpy(cmd_buffer->state.push_constants_data, state->meta.push_constants,
|
||||
state->meta.push_constants_size);
|
||||
}
|
||||
cmd_buffer->push_constants_size = state->meta.push_constants_size;
|
||||
cmd_buffer->state.push_constants_size = state->meta.push_constants_size;
|
||||
|
||||
state->meta.gfx.pipeline = NULL;
|
||||
state->meta.framebuffer = VK_NULL_HANDLE;
|
||||
|
|
@ -3092,12 +3092,15 @@ v3dv_CmdPushConstants(VkCommandBuffer commandBuffer,
|
|||
{
|
||||
V3DV_FROM_HANDLE(v3dv_cmd_buffer, cmd_buffer, commandBuffer);
|
||||
|
||||
if (!memcmp((uint8_t *) cmd_buffer->push_constants_data + offset, pValues, size))
|
||||
if (!memcmp((uint8_t *) cmd_buffer->state.push_constants_data + offset,
|
||||
pValues, size)) {
|
||||
return;
|
||||
}
|
||||
|
||||
memcpy((uint8_t *) cmd_buffer->push_constants_data + offset, pValues, size);
|
||||
cmd_buffer->push_constants_size =
|
||||
MAX2(offset + size, cmd_buffer->push_constants_size);
|
||||
memcpy((uint8_t *) cmd_buffer->state.push_constants_data + offset,
|
||||
pValues, size);
|
||||
cmd_buffer->state.push_constants_size =
|
||||
MAX2(offset + size, cmd_buffer->state.push_constants_size);
|
||||
|
||||
cmd_buffer->state.dirty |= V3DV_CMD_DIRTY_PUSH_CONSTANTS;
|
||||
cmd_buffer->state.dirty_push_constants_stages |= stageFlags;
|
||||
|
|
|
|||
|
|
@ -1279,6 +1279,14 @@ struct v3dv_cmd_buffer_state {
|
|||
*/
|
||||
bool tile_aligned_render_area;
|
||||
|
||||
/* FIXME: we have just one client-side BO for the push constants,
|
||||
* independently of the stageFlags in vkCmdPushConstants, and the
|
||||
* pipelineBindPoint in vkCmdBindPipeline. We could probably do more stage
|
||||
* tunning in the future if it makes sense.
|
||||
*/
|
||||
uint32_t push_constants_size;
|
||||
uint32_t push_constants_data[MAX_PUSH_CONSTANTS_SIZE / 4];
|
||||
|
||||
uint32_t attachment_alloc_count;
|
||||
struct v3dv_cmd_buffer_attachment_state *attachments;
|
||||
|
||||
|
|
@ -1470,13 +1478,7 @@ struct v3dv_cmd_buffer {
|
|||
|
||||
struct v3dv_cmd_buffer_state state;
|
||||
|
||||
/* FIXME: we have just one client-side and bo for the push constants,
|
||||
* independently of the stageFlags in vkCmdPushConstants, and the
|
||||
* pipelineBindPoint in vkCmdBindPipeline. We could probably do more stage
|
||||
* tunning in the future if it makes sense.
|
||||
*/
|
||||
uint32_t push_constants_size;
|
||||
uint32_t push_constants_data[MAX_PUSH_CONSTANTS_SIZE / 4];
|
||||
/* Buffer where we upload push constant data to resolve indirect indexing */
|
||||
struct v3dv_cl_reloc push_constants_resource;
|
||||
|
||||
/* Collection of Vulkan objects created internally by the driver (typically
|
||||
|
|
|
|||
|
|
@ -123,7 +123,7 @@ check_push_constants_ubo(struct v3dv_cmd_buffer *cmd_buffer,
|
|||
|
||||
memcpy(cmd_buffer->push_constants_resource.bo->map +
|
||||
cmd_buffer->push_constants_resource.offset,
|
||||
cmd_buffer->push_constants_data,
|
||||
cmd_buffer->state.push_constants_data,
|
||||
MAX_PUSH_CONSTANTS_SIZE);
|
||||
|
||||
cmd_buffer->state.dirty &= ~V3DV_CMD_DIRTY_PUSH_CONSTANTS;
|
||||
|
|
@ -489,7 +489,7 @@ v3dv_write_uniforms_wg_offsets(struct v3dv_cmd_buffer *cmd_buffer,
|
|||
break;
|
||||
|
||||
case QUNIFORM_UNIFORM:
|
||||
cl_aligned_u32(&uniforms, cmd_buffer->push_constants_data[data]);
|
||||
cl_aligned_u32(&uniforms, cmd_buffer->state.push_constants_data[data]);
|
||||
break;
|
||||
|
||||
case QUNIFORM_INLINE_UBO_0:
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue