nvk: Add an nvk_cmd_buffer_push helper

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24326>
This commit is contained in:
Faith Ekstrand 2023-01-30 20:11:58 -06:00 committed by Marge Bot
parent 87686a2220
commit 567148c172
7 changed files with 35 additions and 28 deletions

View file

@ -21,7 +21,7 @@ nvk_CmdBlitImage2(VkCommandBuffer commandBuffer,
VK_FROM_HANDLE(nvk_image, src, pBlitImageInfo->srcImage);
VK_FROM_HANDLE(nvk_image, dst, pBlitImageInfo->dstImage);
struct nv_push *p = P_SPACE(cmd->push, 16);
struct nv_push *p = nvk_cmd_buffer_push(cmd, 16);
assert(nvk_get_format(src->vk.format)->supports_2d_blit);
assert(nvk_get_format(dst->vk.format)->supports_2d_blit);
@ -69,7 +69,7 @@ nvk_CmdBlitImage2(VkCommandBuffer commandBuffer,
for (unsigned r = 0; r < pBlitImageInfo->regionCount; r++) {
const VkImageBlit2 *region = &pBlitImageInfo->pRegions[r];
p = P_SPACE(cmd->push, 30 + region->srcSubresource.layerCount * 10);
p = nvk_cmd_buffer_push(cmd, 30 + region->srcSubresource.layerCount * 10);
unsigned x_i = region->dstOffsets[0].x < region->dstOffsets[1].x ? 0 : 1;
unsigned y_i = region->dstOffsets[0].y < region->dstOffsets[1].y ? 0 : 1;

View file

@ -202,7 +202,7 @@ nvk_BeginCommandBuffer(VkCommandBuffer commandBuffer,
nvk_reset_cmd_buffer(&cmd->vk, 0);
/* Start with a nop so we have at least something to submit */
struct nv_push *p = P_SPACE(cmd->push, 2);
struct nv_push *p = nvk_cmd_buffer_push(cmd, 2);
P_MTHD(p, NV90B5, NOP);
P_NV90B5_NOP(p, 0);

View file

@ -116,6 +116,13 @@ nvk_cmd_buffer_device(struct nvk_cmd_buffer *cmd)
return (struct nvk_device *)cmd->vk.base.device;
}
static inline struct nv_push *
nvk_cmd_buffer_push(struct nvk_cmd_buffer *cmd, uint32_t dw_count)
{
return P_SPACE(cmd->push, dw_count);
}
void nvk_cmd_buffer_begin_graphics(struct nvk_cmd_buffer *cmd,
const VkCommandBufferBeginInfo *pBeginInfo);
void nvk_cmd_buffer_begin_compute(struct nvk_cmd_buffer *cmd,

View file

@ -58,7 +58,7 @@ emit_clear_rects(struct nvk_cmd_buffer *cmd,
{
struct nvk_rendering_state *render = &cmd->state.gfx.render;
struct nv_push *p = P_SPACE(cmd->push, rect_count * 6);
struct nv_push *p = nvk_cmd_buffer_push(cmd, rect_count * 6);
for (uint32_t r = 0; r < rect_count; r++) {
P_MTHD(p, NV9097, SET_CLEAR_RECT_HORIZONTAL);
@ -115,7 +115,7 @@ nvk_CmdClearAttachments(VkCommandBuffer commandBuffer,
const VkClearRect *pRects)
{
VK_FROM_HANDLE(nvk_cmd_buffer, cmd, commandBuffer);
struct nv_push *p = P_SPACE(cmd->push, 2 + attachmentCount * 4);
struct nv_push *p = nvk_cmd_buffer_push(cmd, 2 + attachmentCount * 4);
P_IMMD(p, NV9097, SET_CLEAR_SURFACE_CONTROL, {
.respect_stencil_mask = RESPECT_STENCIL_MASK_FALSE,
@ -147,7 +147,7 @@ nvk_CmdClearAttachments(VkCommandBuffer commandBuffer,
continue;
VkClearColorValue color = pAttachments[i].clearValue.color;
p = P_SPACE(cmd->push, 5);
p = nvk_cmd_buffer_push(cmd, 5);
P_MTHD(p, NV9097, SET_COLOR_CLEAR_VALUE(0));
P_NV9097_SET_COLOR_CLEAR_VALUE(p, 0, color.uint32[0]);

View file

@ -144,7 +144,7 @@ nouveau_copy_rect(struct nvk_cmd_buffer *cmd, struct nouveau_copy *copy)
{
uint32_t src_bw, dst_bw;
if (copy->remap.comp_size > 0) {
struct nv_push *p = P_SPACE(cmd->push, 2);
struct nv_push *p = nvk_cmd_buffer_push(cmd, 2);
assert(copy->src.bpp % copy->remap.comp_size == 0);
assert(copy->dst.bpp % copy->remap.comp_size == 0);
@ -192,7 +192,7 @@ nouveau_copy_rect(struct nvk_cmd_buffer *cmd, struct nouveau_copy *copy)
}
for (unsigned z = 0; z < copy->extent_el.depth; z++) {
struct nv_push *p = P_SPACE(cmd->push, 31);
struct nv_push *p = nvk_cmd_buffer_push(cmd, 31);
P_MTHD(p, NV90B5, OFFSET_IN_UPPER);
P_NV90B5_OFFSET_IN_UPPER(p, src_addr >> 32);
@ -299,7 +299,7 @@ nvk_CmdCopyBuffer2(VkCommandBuffer commandBuffer,
uint64_t size = region->size;
while (size) {
struct nv_push *p = P_SPACE(cmd->push, 10);
struct nv_push *p = nvk_cmd_buffer_push(cmd, 10);
P_MTHD(p, NV90B5, OFFSET_IN_UPPER);
P_NV90B5_OFFSET_IN_UPPER(p, src_addr >> 32);
@ -547,7 +547,7 @@ nvk_CmdFillBuffer(VkCommandBuffer commandBuffer,
uint32_t pitch = 1 << 19;
uint32_t line = pitch / 4;
struct nv_push *p = P_SPACE(cmd->push, 33);
struct nv_push *p = nvk_cmd_buffer_push(cmd, 33);
P_IMMD(p, NV902D, SET_OPERATION, V_SRCCOPY);
@ -622,7 +622,7 @@ nvk_CmdUpdateBuffer(VkCommandBuffer commandBuffer,
VkDeviceSize dst_addr = nvk_buffer_address(dst, 0);
struct nv_push *p = P_SPACE(cmd->push, 26 + dataSize / 4);
struct nv_push *p = nvk_cmd_buffer_push(cmd, 26 + dataSize / 4);
P_IMMD(p, NV902D, SET_OPERATION, V_SRCCOPY);

View file

@ -101,7 +101,7 @@ nvk_CmdDispatch(VkCommandBuffer commandBuffer,
return;
}
struct nv_push *p = P_SPACE(cmd->push, 6);
struct nv_push *p = nvk_cmd_buffer_push(cmd, 6);
P_MTHD(p, NVA0C0, INVALIDATE_SHADER_CACHES_NO_WFI);
P_NVA0C0_INVALIDATE_SHADER_CACHES_NO_WFI(p, {

View file

@ -381,7 +381,7 @@ nvk_CmdBeginRendering(VkCommandBuffer commandBuffer,
{
VK_FROM_HANDLE(nvk_cmd_buffer, cmd, commandBuffer);
struct nvk_rendering_state *render = &cmd->state.gfx.render;
struct nv_push *p = P_SPACE(cmd->push, 23 + pRenderingInfo->colorAttachmentCount * 10);
struct nv_push *p = nvk_cmd_buffer_push(cmd, 23 + pRenderingInfo->colorAttachmentCount * 10);
memset(render, 0, sizeof(*render));
@ -612,7 +612,7 @@ nvk_cmd_bind_graphics_pipeline(struct nvk_cmd_buffer *cmd,
cmd->state.gfx.pipeline = pipeline;
vk_cmd_set_dynamic_graphics_state(&cmd->vk, &pipeline->dynamic);
struct nv_push *p = P_SPACE(cmd->push, pipeline->push_dw_count);
struct nv_push *p = nvk_cmd_buffer_push(cmd, pipeline->push_dw_count);
nv_push_raw(p, pipeline->push_data, pipeline->push_dw_count);
}
@ -624,7 +624,7 @@ nvk_flush_vi_state(struct nvk_cmd_buffer *cmd)
const struct vk_dynamic_graphics_state *dyn =
&cmd->vk.dynamic_graphics_state;
struct nv_push *p = P_SPACE(cmd->push, 256);
struct nv_push *p = nvk_cmd_buffer_push(cmd, 256);
if (BITSET_TEST(dyn->dirty, MESA_VK_DYNAMIC_VI)) {
u_foreach_bit(a, dyn->vi->attributes_valid) {
@ -668,7 +668,7 @@ nvk_flush_ia_state(struct nvk_cmd_buffer *cmd)
/** Nothing to do for MESA_VK_DYNAMIC_IA_PRIMITIVE_TOPOLOGY */
if (BITSET_TEST(dyn->dirty, MESA_VK_DYNAMIC_IA_PRIMITIVE_RESTART_ENABLE)) {
struct nv_push *p = P_SPACE(cmd->push, 2);
struct nv_push *p = nvk_cmd_buffer_push(cmd, 2);
P_IMMD(p, NV9097, SET_DA_PRIMITIVE_RESTART,
dyn->ia.primitive_restart_enable);
}
@ -681,7 +681,7 @@ nvk_flush_ts_state(struct nvk_cmd_buffer *cmd)
&cmd->vk.dynamic_graphics_state;
if (BITSET_TEST(dyn->dirty, MESA_VK_DYNAMIC_TS_PATCH_CONTROL_POINTS)) {
struct nv_push *p = P_SPACE(cmd->push, 2);
struct nv_push *p = nvk_cmd_buffer_push(cmd, 2);
P_IMMD(p, NV9097, SET_PATCH, dyn->ts.patch_control_points);
}
}
@ -693,7 +693,7 @@ nvk_flush_vp_state(struct nvk_cmd_buffer *cmd)
&cmd->vk.dynamic_graphics_state;
struct nv_push *p =
P_SPACE(cmd->push, 14 * dyn->vp.viewport_count + 4 * NVK_MAX_VIEWPORTS);
nvk_cmd_buffer_push(cmd, 14 * dyn->vp.viewport_count + 4 * NVK_MAX_VIEWPORTS);
/* Nothing to do for MESA_VK_DYNAMIC_VP_VIEWPORT_COUNT */
@ -801,7 +801,7 @@ vk_to_nv9097_front_face(VkFrontFace vk_face)
static void
nvk_flush_rs_state(struct nvk_cmd_buffer *cmd)
{
struct nv_push *p = P_SPACE(cmd->push, 23);
struct nv_push *p = nvk_cmd_buffer_push(cmd, 23);
const struct vk_dynamic_graphics_state *dyn =
&cmd->vk.dynamic_graphics_state;
@ -895,7 +895,7 @@ vk_to_nv9097_stencil_op(VkStencilOp vk_op)
static void
nvk_flush_ds_state(struct nvk_cmd_buffer *cmd)
{
struct nv_push *p = P_SPACE(cmd->push, 35);
struct nv_push *p = nvk_cmd_buffer_push(cmd, 35);
const struct vk_dynamic_graphics_state *dyn =
&cmd->vk.dynamic_graphics_state;
@ -986,7 +986,7 @@ vk_to_nv9097_logic_op(VkLogicOp vk_op)
static void
nvk_flush_cb_state(struct nvk_cmd_buffer *cmd)
{
struct nv_push *p = P_SPACE(cmd->push, 7);
struct nv_push *p = nvk_cmd_buffer_push(cmd, 7);
const struct vk_dynamic_graphics_state *dyn =
&cmd->vk.dynamic_graphics_state;
@ -1046,7 +1046,7 @@ nvk_flush_descriptors(struct nvk_cmd_buffer *cmd)
return;
}
struct nv_push *p = P_SPACE(cmd->push, 26);
struct nv_push *p = nvk_cmd_buffer_push(cmd, 26);
P_MTHD(p, NV9097, SET_CONSTANT_BUFFER_SELECTOR_A);
P_NV9097_SET_CONSTANT_BUFFER_SELECTOR_A(p, sizeof(desc->root));
@ -1116,7 +1116,7 @@ nvk_CmdBindIndexBuffer(VkCommandBuffer commandBuffer,
VK_FROM_HANDLE(nvk_cmd_buffer, cmd, commandBuffer);
VK_FROM_HANDLE(nvk_buffer, buffer, _buffer);
struct nv_push *p = P_SPACE(cmd->push, 10);
struct nv_push *p = nvk_cmd_buffer_push(cmd, 10);
uint64_t addr, range;
if (buffer) {
@ -1151,7 +1151,7 @@ void
nvk_cmd_bind_vertex_buffer(struct nvk_cmd_buffer *cmd, uint32_t vb_idx,
struct nvk_addr_range addr_range)
{
struct nv_push *p = P_SPACE(cmd->push, 6);
struct nv_push *p = nvk_cmd_buffer_push(cmd, 6);
P_MTHD(p, NV9097, SET_VERTEX_STREAM_A_LOCATION_A(vb_idx));
P_NV9097_SET_VERTEX_STREAM_A_LOCATION_A(p, vb_idx, addr_range.addr >> 32);
@ -1295,7 +1295,7 @@ nvk_CmdDraw(VkCommandBuffer commandBuffer,
.split_mode = SPLIT_MODE_NORMAL_BEGIN_NORMAL_END,
});
struct nv_push *p = P_SPACE(cmd->push, 6);
struct nv_push *p = nvk_cmd_buffer_push(cmd, 6);
P_1INC(p, NV9097, CALL_MME_MACRO(NVK_MME_DRAW));
P_INLINE_DATA(p, begin);
P_INLINE_DATA(p, vertexCount);
@ -1369,7 +1369,7 @@ nvk_CmdDrawIndexed(VkCommandBuffer commandBuffer,
.split_mode = SPLIT_MODE_NORMAL_BEGIN_NORMAL_END,
});
struct nv_push *p = P_SPACE(cmd->push, 7);
struct nv_push *p = nvk_cmd_buffer_push(cmd, 7);
P_1INC(p, NV9097, CALL_MME_MACRO(NVK_MME_DRAW_INDEXED));
P_INLINE_DATA(p, begin);
P_INLINE_DATA(p, indexCount);
@ -1438,7 +1438,7 @@ nvk_CmdDrawIndirect(VkCommandBuffer commandBuffer,
.split_mode = SPLIT_MODE_NORMAL_BEGIN_NORMAL_END,
});
struct nv_push *p = P_SPACE(cmd->push, 8);
struct nv_push *p = nvk_cmd_buffer_push(cmd, 8);
P_IMMD(p, NVC597, SET_MME_DATA_FIFO_CONFIG, FIFO_SIZE_SIZE_4KB);
P_1INC(p, NV9097, CALL_MME_MACRO(NVK_MME_DRAW_INDIRECT));
P_INLINE_DATA(p, begin);
@ -1492,7 +1492,7 @@ nvk_CmdDrawIndexedIndirect(VkCommandBuffer commandBuffer,
.split_mode = SPLIT_MODE_NORMAL_BEGIN_NORMAL_END,
});
struct nv_push *p = P_SPACE(cmd->push, 8);
struct nv_push *p = nvk_cmd_buffer_push(cmd, 8);
P_IMMD(p, NVC597, SET_MME_DATA_FIFO_CONFIG, FIFO_SIZE_SIZE_4KB);
P_1INC(p, NV9097, CALL_MME_MACRO(NVK_MME_DRAW_INDEXED_INDIRECT));
P_INLINE_DATA(p, begin);