nvk: optimize blit command buffer gen
authorKarol Herbst <kherbst@redhat.com>
Fri, 10 Jun 2022 14:03:52 +0000 (16:03 +0200)
committerMarge Bot <emma+marge@anholt.net>
Fri, 4 Aug 2023 21:31:53 +0000 (21:31 +0000)
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24326>

src/nouveau/vulkan/nvk_cmd_blit.c

index 4c1333e..7bf7ba0 100644 (file)
@@ -31,18 +31,11 @@ nvk_CmdBlitImage2(
    VkDeviceSize src_addr = src->mem->bo->offset + src->offset;
    VkDeviceSize dst_addr = dst->mem->bo->offset + dst->offset;
 
-   P_MTHD(push, NV902D, SET_OPERATION);
-   P_NV902D_SET_OPERATION(push, V_SRCCOPY);
-   P_MTHD(push, NV902D, SET_CLIP_ENABLE);
-   P_NV902D_SET_CLIP_ENABLE(push, V_FALSE);
-   P_MTHD(push, NV902D, SET_COLOR_KEY_ENABLE);
-   P_NV902D_SET_COLOR_KEY_ENABLE(push, V_FALSE);
-   P_MTHD(push, NV902D, SET_RENDER_ENABLE_C);
-   P_NV902D_SET_RENDER_ENABLE_C(push, MODE_TRUE);
-
-   P_MTHD(push, NV902D, SET_SRC_FORMAT);
-   P_NV902D_SET_SRC_FORMAT(push, src->format->hw_format);
+   P_IMMD(push, NV902D, SET_CLIP_ENABLE, V_FALSE);
+   P_IMMD(push, NV902D, SET_COLOR_KEY_ENABLE, V_FALSE);
+   P_IMMD(push, NV902D, SET_RENDER_ENABLE_C, MODE_TRUE);
 
+   P_IMMD(push, NV902D, SET_SRC_FORMAT, src->format->hw_format);
    if (src->tile.is_tiled) {
       P_MTHD(push, NV902D, SET_SRC_MEMORY_LAYOUT);
       P_NV902D_SET_SRC_MEMORY_LAYOUT(push, V_BLOCKLINEAR);
@@ -51,11 +44,11 @@ nvk_CmdBlitImage2(
          .depth = src->tile.z,
       });
    } else {
-      P_MTHD(push, NV902D, SET_SRC_MEMORY_LAYOUT);
-      P_NV902D_SET_SRC_MEMORY_LAYOUT(push, V_PITCH);
+      P_IMMD(push, NV902D, SET_SRC_MEMORY_LAYOUT, V_PITCH);
    }
 
-   P_IMMD(push, NV902D, SET_SRC_DEPTH, src_depth);
+   P_MTHD(push, NV902D, SET_SRC_DEPTH);
+   P_NV902D_SET_SRC_DEPTH(push, src_depth);
 
    P_MTHD(push, NV902D, SET_SRC_PITCH);
    P_NV902D_SET_SRC_PITCH(push, src->row_stride);
@@ -64,9 +57,7 @@ nvk_CmdBlitImage2(
    P_NV902D_SET_SRC_OFFSET_UPPER(push, src_addr >> 32);
    P_NV902D_SET_SRC_OFFSET_LOWER(push, src_addr & 0xffffffff);
 
-   P_MTHD(push, NV902D, SET_DST_FORMAT);
-   P_NV902D_SET_DST_FORMAT(push, dst->format->hw_format);
-
+   P_IMMD(push, NV902D, SET_DST_FORMAT, dst->format->hw_format);
    if (dst->tile.is_tiled) {
       P_MTHD(push, NV902D, SET_DST_MEMORY_LAYOUT);
       P_NV902D_SET_DST_MEMORY_LAYOUT(push, V_BLOCKLINEAR);
@@ -78,23 +69,22 @@ nvk_CmdBlitImage2(
       P_IMMD(push, NV902D, SET_DST_MEMORY_LAYOUT, V_PITCH);
    }
 
-   P_IMMD(push, NV902D, SET_DST_DEPTH, dst_depth);
-
-   P_MTHD(push, NV902D, SET_DST_PITCH);
+   P_MTHD(push, NV902D, SET_DST_DEPTH);
+   P_NV902D_SET_DST_DEPTH(push, dst_depth);
+   P_NV902D_SET_DST_LAYER(push, 0);
    P_NV902D_SET_DST_PITCH(push, dst->row_stride);
    P_NV902D_SET_DST_WIDTH(push, dst->vk.extent.width);
    P_NV902D_SET_DST_HEIGHT(push, dst->vk.extent.height);
    P_NV902D_SET_DST_OFFSET_UPPER(push, dst_addr >> 32);
    P_NV902D_SET_DST_OFFSET_LOWER(push, dst_addr & 0xffffffff);
 
-   P_MTHD(push, NV902D, SET_PIXELS_FROM_MEMORY_SAMPLE_MODE);
    if (pBlitImageInfo->filter == VK_FILTER_NEAREST) {
-      P_NV902D_SET_PIXELS_FROM_MEMORY_SAMPLE_MODE(push, {
+      P_IMMD(push, NV902D, SET_PIXELS_FROM_MEMORY_SAMPLE_MODE, {
          .origin = ORIGIN_CORNER,
          .filter = FILTER_POINT,
       });
    } else {
-      P_NV902D_SET_PIXELS_FROM_MEMORY_SAMPLE_MODE(push, {
+      P_IMMD(push, NV902D, SET_PIXELS_FROM_MEMORY_SAMPLE_MODE, {
          .origin = ORIGIN_CORNER,
          .filter = FILTER_BILINEAR,
       });
@@ -109,17 +99,14 @@ nvk_CmdBlitImage2(
    if (vk_format_get_nr_components(src->format->vk_format) == 1 &&
        src->format->hw_format != dst->format->hw_format) {
       uint8_t mask = vk_format_is_snorm(dst->format->vk_format) ? 0x7f : 0xff;
-      P_MTHD(push, NV902D, SET_BETA1);
-      P_NV902D_SET_BETA1(push, 0xff);
       P_MTHD(push, NV902D, SET_BETA4);
       P_NV902D_SET_BETA4(push, {
          .r = mask,
          .a = mask,
       });
-      P_NV902D_SET_OPERATION(push, V_SRCCOPY_PREMULT);
+      P_IMMD(push, NV902D, SET_OPERATION, V_SRCCOPY_PREMULT);
    } else {
-      P_MTHD(push, NV902D, SET_OPERATION);
-      P_NV902D_SET_OPERATION(push, V_SRCCOPY);
+      P_IMMD(push, NV902D, SET_OPERATION, V_SRCCOPY);
    }
 
    for (unsigned r = 0; r < pBlitImageInfo->regionCount; r++) {
@@ -162,8 +149,6 @@ nvk_CmdBlitImage2(
       P_NV902D_SET_PIXELS_FROM_MEMORY_DU_DX_INT(push, scaling_x_fp >> 32);
       P_NV902D_SET_PIXELS_FROM_MEMORY_DV_DY_FRAC(push, scaling_y_fp & 0xffffffff);
       P_NV902D_SET_PIXELS_FROM_MEMORY_DV_DY_INT(push, scaling_y_fp >> 32);
-
-      P_MTHD(push, NV902D, SET_PIXELS_FROM_MEMORY_SRC_X0_FRAC);
       P_NV902D_SET_PIXELS_FROM_MEMORY_SRC_X0_FRAC(push, src_start_x_fp & 0xffffffff);
       P_NV902D_SET_PIXELS_FROM_MEMORY_SRC_X0_INT(push, src_start_x_fp >> 32);
       P_NV902D_SET_PIXELS_FROM_MEMORY_SRC_Y0_FRAC(push, src_start_y_fp & 0xffffffff);