pvr: Fix SPM load shader sample rate
authorKarmjit Mahil <Karmjit.Mahil@imgtec.com>
Tue, 3 Oct 2023 14:28:28 +0000 (15:28 +0100)
committerMarge Bot <emma+marge@anholt.net>
Wed, 11 Oct 2023 08:19:30 +0000 (08:19 +0000)
Reported-by: James Glanville <james.glanville@imgtec.com>
Signed-off-by: Karmjit Mahil <Karmjit.Mahil@imgtec.com>
Reviewed-by: Frank Binns <frank.binns@imgtec.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25584>

src/imagination/vulkan/pvr_spm.c
src/imagination/vulkan/usc/programs/pvr_static_shaders.h

index 9e605eb..0a6c50f 100644 (file)
@@ -358,15 +358,21 @@ VkResult pvr_device_init_spm_load_state(struct pvr_device *device)
       const pvr_dev_addr_t usc_program_dev_addr =
          PVR_DEV_ADDR_OFFSET(usc_bo->dev_addr, usc_aligned_offsets[i]);
       struct pvr_pds_kickusc_program pds_kick_program = { 0 };
+      enum PVRX(PDSINST_DOUTU_SAMPLE_RATE) sample_rate;
 
       pvr_pds_generate_pixel_shader_sa_code_segment(
          &pds_texture_program,
          (uint32_t *)(mem_ptr + pds_texture_aligned_offsets[i]));
 
+      if (spm_load_collection[i].info->msaa_sample_count > 1)
+         sample_rate = PVRX(PDSINST_DOUTU_SAMPLE_RATE_FULL);
+      else
+         sample_rate = PVRX(PDSINST_DOUTU_SAMPLE_RATE_INSTANCE);
+
       pvr_pds_setup_doutu(&pds_kick_program.usc_task_control,
                           usc_program_dev_addr.addr,
                           spm_load_collection[i].info->temps_required,
-                          PVRX(PDSINST_DOUTU_SAMPLE_RATE_INSTANCE),
+                          sample_rate,
                           false);
 
       /* Generated both code and data. */
index 1deaa43..2658bb7 100644 (file)
@@ -52,6 +52,7 @@ struct pvr_shader_factory_info {
    uint32_t num_driver_consts;
    const struct pvr_static_buffer *static_const_buffer;
    uint32_t num_static_const;
+   uint32_t msaa_sample_count;
 };
 
 static const uint8_t availability_query_write_shader[144] = { 0 };
@@ -84,6 +85,7 @@ static const struct pvr_shader_factory_info availability_query_write_info = {
    0,
    availability_query_write_static_consts,
    0,
+   ~0,
 };
 
 static const uint8_t copy_query_results_shader[384] = { 0 };
@@ -114,6 +116,7 @@ static const struct pvr_shader_factory_info copy_query_results_info = {
    0,
    copy_query_results_static_consts,
    0,
+   ~0,
 };
 
 static const uint8_t reset_query_shader_code[136] = { 0 };
@@ -144,6 +147,7 @@ static const struct pvr_shader_factory_info reset_query_info = {
    0,
    reset_query_static_consts,
    0,
+   ~0,
 };
 
 static const struct pvr_shader_factory_info
@@ -179,6 +183,7 @@ static const struct pvr_shader_factory_info
       0,
       NULL,
       0,
+      1,
    };
 
 static const uint8_t clear_attachments_1_dw_0_offt_out_mem_shader_code[8] = {
@@ -205,6 +210,7 @@ static const struct pvr_shader_factory_info
       0,
       NULL,
       0,
+      1,
    };
 
 static const uint8_t clear_attachments_2_dw_0_offt_out_reg_shader_code[8] = {
@@ -231,6 +237,7 @@ static const struct pvr_shader_factory_info
       0,
       NULL,
       0,
+      1,
    };
 
 static const uint8_t clear_attachments_2_dw_0_offt_out_mem_shader_code[8] = {
@@ -257,6 +264,7 @@ static const struct pvr_shader_factory_info
       0,
       NULL,
       0,
+      1,
    };
 
 static const uint8_t clear_attachments_3_dw_0_offt_out_reg_shader_code[8] = {
@@ -283,6 +291,7 @@ static const struct pvr_shader_factory_info
       0,
       NULL,
       0,
+      1,
    };
 
 static const uint8_t clear_attachments_3_dw_0_offt_out_mem_shader_code[8] = {
@@ -309,6 +318,7 @@ static const struct pvr_shader_factory_info
       0,
       NULL,
       0,
+      1,
    };
 
 static const uint8_t clear_attachments_4_dw_0_offt_out_reg_shader_code[8] = {
@@ -335,6 +345,7 @@ static const struct pvr_shader_factory_info
       0,
       NULL,
       0,
+      1,
    };
 
 static const uint8_t clear_attachments_4_dw_0_offt_out_mem_shader_code[8] = {
@@ -361,6 +372,7 @@ static const struct pvr_shader_factory_info
       0,
       NULL,
       0,
+      1,
    };
 
 static const uint8_t clear_attachments_1_dw_1_offt_out_reg_shader_code[8] = {
@@ -387,6 +399,7 @@ static const struct pvr_shader_factory_info
       0,
       NULL,
       0,
+      1,
    };
 
 static const uint8_t clear_attachments_1_dw_1_offt_out_mem_shader_code[8] = {
@@ -413,6 +426,7 @@ static const struct pvr_shader_factory_info
       0,
       NULL,
       0,
+      1,
    };
 
 static const uint8_t clear_attachments_2_dw_1_offt_out_reg_shader_code[8] = {
@@ -439,6 +453,7 @@ static const struct pvr_shader_factory_info
       0,
       NULL,
       0,
+      1,
    };
 
 static const uint8_t clear_attachments_2_dw_1_offt_out_mem_shader_code[8] = {
@@ -465,6 +480,7 @@ static const struct pvr_shader_factory_info
       0,
       NULL,
       0,
+      1,
    };
 
 static const uint8_t clear_attachments_3_dw_1_offt_out_reg_shader_code[8] = {
@@ -491,6 +507,7 @@ static const struct pvr_shader_factory_info
       0,
       NULL,
       0,
+      1,
    };
 
 static const uint8_t clear_attachments_3_dw_1_offt_out_mem_shader_code[8] = {
@@ -517,6 +534,7 @@ static const struct pvr_shader_factory_info
       0,
       NULL,
       0,
+      1,
    };
 
 static const uint8_t clear_attachments_4_dw_1_offt_out_reg_shader_code[8] = {
@@ -595,6 +613,7 @@ static const struct pvr_shader_factory_info
       0,
       NULL,
       0,
+      1,
    };
 
 static const uint8_t clear_attachments_1_dw_2_offt_out_mem_shader_code[8] = {
@@ -621,6 +640,7 @@ static const struct pvr_shader_factory_info
       0,
       NULL,
       0,
+      1,
    };
 
 static const uint8_t clear_attachments_2_dw_2_offt_out_reg_shader_code[8] = {
@@ -647,6 +667,7 @@ static const struct pvr_shader_factory_info
       0,
       NULL,
       0,
+      1,
    };
 
 static const uint8_t clear_attachments_2_dw_2_offt_out_mem_shader_code[8] = {
@@ -673,6 +694,7 @@ static const struct pvr_shader_factory_info
       0,
       NULL,
       0,
+      1,
    };
 
 static const uint8_t clear_attachments_3_dw_2_offt_out_reg_shader_code[8] = {
@@ -803,6 +825,7 @@ static const struct pvr_shader_factory_info
       0,
       NULL,
       0,
+      1,
    };
 
 static const uint8_t clear_attachments_1_dw_3_offt_out_mem_shader_code[8] = {
@@ -1505,6 +1528,7 @@ static const struct pvr_shader_factory_info
       0,
       NULL,
       0,
+      1,
    };
 static struct {
    const uint8_t *code;
@@ -1700,6 +1724,7 @@ static const struct pvr_shader_factory_info spm_load_1X_1_regs_info = {
    0,
    NULL,
    0,
+   1,
 };
 
 static const uint8_t spm_load_1X_2_regs_shader_code[8] = { 0 };
@@ -1721,6 +1746,7 @@ static const struct pvr_shader_factory_info spm_load_1X_2_regs_info = {
    0,
    NULL,
    0,
+   1,
 };
 
 static const uint8_t spm_load_1X_4_regs_shader_code[8] = { 0 };
@@ -1742,6 +1768,7 @@ static const struct pvr_shader_factory_info spm_load_1X_4_regs_info = {
    0,
    NULL,
    0,
+   1,
 };
 
 static const uint8_t spm_load_1X_1_buffers_shader_code[8] = { 0 };
@@ -1765,6 +1792,7 @@ static const struct pvr_shader_factory_info spm_load_1X_1_buffers_info = {
    0,
    NULL,
    0,
+   1,
 };
 
 static const uint8_t spm_load_1X_2_buffers_shader_code[8] = { 0 };
@@ -1788,6 +1816,7 @@ static const struct pvr_shader_factory_info spm_load_1X_2_buffers_info = {
    0,
    NULL,
    0,
+   1,
 };
 
 static const uint8_t spm_load_1X_3_buffers_shader_code[8] = { 0 };
@@ -1811,6 +1840,7 @@ static const struct pvr_shader_factory_info spm_load_1X_3_buffers_info = {
    0,
    NULL,
    0,
+   1,
 };
 
 static const uint8_t spm_load_1X_4_buffers_shader_code[8] = { 0 };
@@ -1834,6 +1864,7 @@ static const struct pvr_shader_factory_info spm_load_1X_4_buffers_info = {
    0,
    NULL,
    0,
+   1,
 };
 
 static const uint8_t spm_load_1X_5_buffers_shader_code[8] = { 0 };
@@ -1857,6 +1888,7 @@ static const struct pvr_shader_factory_info spm_load_1X_5_buffers_info = {
    0,
    NULL,
    0,
+   1,
 };
 
 static const uint8_t spm_load_1X_6_buffers_shader_code[8] = { 0 };
@@ -1880,6 +1912,7 @@ static const struct pvr_shader_factory_info spm_load_1X_6_buffers_info = {
    0,
    NULL,
    0,
+   1,
 };
 
 static const uint8_t spm_load_1X_7_buffers_shader_code[8] = { 0 };
@@ -1903,6 +1936,7 @@ static const struct pvr_shader_factory_info spm_load_1X_7_buffers_info = {
    0,
    NULL,
    0,
+   1,
 };
 
 static const uint8_t spm_load_2X_1_regs_shader_code[8] = { 0 };
@@ -1924,6 +1958,7 @@ static const struct pvr_shader_factory_info spm_load_2X_1_regs_info = {
    0,
    NULL,
    0,
+   2,
 };
 
 static const uint8_t spm_load_2X_2_regs_shader_code[8] = { 0 };
@@ -1945,6 +1980,7 @@ static const struct pvr_shader_factory_info spm_load_2X_2_regs_info = {
    0,
    NULL,
    0,
+   2,
 };
 
 static const uint8_t spm_load_2X_4_regs_shader_code[8] = { 0 };
@@ -1966,6 +2002,7 @@ static const struct pvr_shader_factory_info spm_load_2X_4_regs_info = {
    0,
    NULL,
    0,
+   2,
 };
 
 static const uint8_t spm_load_2X_1_buffers_shader_code[8] = { 0 };
@@ -1989,6 +2026,7 @@ static const struct pvr_shader_factory_info spm_load_2X_1_buffers_info = {
    0,
    NULL,
    0,
+   2,
 };
 
 static const uint8_t spm_load_2X_2_buffers_shader_code[8] = { 0 };
@@ -2012,6 +2050,7 @@ static const struct pvr_shader_factory_info spm_load_2X_2_buffers_info = {
    0,
    NULL,
    0,
+   2,
 };
 
 static const uint8_t spm_load_2X_3_buffers_shader_code[8] = { 0 };
@@ -2035,6 +2074,7 @@ static const struct pvr_shader_factory_info spm_load_2X_3_buffers_info = {
    0,
    NULL,
    0,
+   2,
 };
 
 static const uint8_t spm_load_2X_4_buffers_shader_code[8] = { 0 };
@@ -2058,6 +2098,7 @@ static const struct pvr_shader_factory_info spm_load_2X_4_buffers_info = {
    0,
    NULL,
    0,
+   2,
 };
 
 static const uint8_t spm_load_2X_5_buffers_shader_code[8] = { 0 };
@@ -2081,6 +2122,7 @@ static const struct pvr_shader_factory_info spm_load_2X_5_buffers_info = {
    0,
    NULL,
    0,
+   2,
 };
 
 static const uint8_t spm_load_2X_6_buffers_shader_code[8] = { 0 };
@@ -2104,6 +2146,7 @@ static const struct pvr_shader_factory_info spm_load_2X_6_buffers_info = {
    0,
    NULL,
    0,
+   2,
 };
 
 static const uint8_t spm_load_2X_7_buffers_shader_code[8] = { 0 };
@@ -2127,6 +2170,7 @@ static const struct pvr_shader_factory_info spm_load_2X_7_buffers_info = {
    0,
    NULL,
    0,
+   2,
 };
 
 static const uint8_t spm_load_4X_1_regs_shader_code[8] = { 0 };
@@ -2148,6 +2192,7 @@ static const struct pvr_shader_factory_info spm_load_4X_1_regs_info = {
    0,
    NULL,
    0,
+   4,
 };
 
 static const uint8_t spm_load_4X_2_regs_shader_code[8] = { 0 };
@@ -2169,13 +2214,14 @@ static const struct pvr_shader_factory_info spm_load_4X_2_regs_info = {
    0,
    NULL,
    0,
+   4,
 };
 
 static const uint8_t spm_load_4X_4_regs_shader_code[8] = { 0 };
 
 static const struct pvr_shader_factory_info spm_load_4X_4_regs_info = {
    0, 0, 0,    0, 0,    0, spm_load_4X_4_regs_shader_code, 0, 0, NULL,
-   0, 0, NULL, 0, NULL, 0,
+   0, 0, NULL, 0, NULL, 0, 4
 };
 
 static const uint8_t spm_load_4X_1_buffers_shader_code[8] = { 0 };
@@ -2199,6 +2245,7 @@ static const struct pvr_shader_factory_info spm_load_4X_1_buffers_info = {
    0,
    NULL,
    0,
+   4,
 };
 
 static const uint8_t spm_load_4X_2_buffers_shader_code[8] = { 0 };
@@ -2222,6 +2269,7 @@ static const struct pvr_shader_factory_info spm_load_4X_2_buffers_info = {
    0,
    NULL,
    0,
+   4,
 };
 
 static const uint8_t spm_load_4X_3_buffers_shader_code[8] = { 0 };
@@ -2245,6 +2293,7 @@ static const struct pvr_shader_factory_info spm_load_4X_3_buffers_info = {
    0,
    NULL,
    0,
+   4,
 };
 
 static const uint8_t spm_load_4X_4_buffers_shader_code[8] = { 0 };
@@ -2268,6 +2317,7 @@ static const struct pvr_shader_factory_info spm_load_4X_4_buffers_info = {
    0,
    NULL,
    0,
+   4,
 };
 
 static const uint8_t spm_load_4X_5_buffers_shader_code[8] = { 0 };
@@ -2291,6 +2341,7 @@ static const struct pvr_shader_factory_info spm_load_4X_5_buffers_info = {
    0,
    NULL,
    0,
+   4,
 };
 
 static const uint8_t spm_load_4X_6_buffers_shader_code[8] = { 0 };
@@ -2314,6 +2365,7 @@ static const struct pvr_shader_factory_info spm_load_4X_6_buffers_info = {
    0,
    NULL,
    0,
+   4,
 };
 
 static const uint8_t spm_load_4X_7_buffers_shader_code[8] = { 0 };
@@ -2337,6 +2389,7 @@ static const struct pvr_shader_factory_info spm_load_4X_7_buffers_info = {
    0,
    NULL,
    0,
+   4,
 };
 
 static const uint8_t spm_load_8X_1_regs_shader_code[8] = { 0 };
@@ -2358,6 +2411,7 @@ static const struct pvr_shader_factory_info spm_load_8X_1_regs_info = {
    0,
    NULL,
    0,
+   8,
 };
 
 static const uint8_t spm_load_8X_2_regs_shader_code[8] = { 0 };
@@ -2379,6 +2433,7 @@ static const struct pvr_shader_factory_info spm_load_8X_2_regs_info = {
    0,
    NULL,
    0,
+   8,
 };
 
 static const uint8_t spm_load_8X_4_regs_shader_code[8] = { 0 };
@@ -2400,6 +2455,7 @@ static const struct pvr_shader_factory_info spm_load_8X_4_regs_info = {
    0,
    NULL,
    0,
+   8,
 };
 
 static const uint8_t spm_load_8X_1_buffers_shader_code[8] = { 0 };
@@ -2423,6 +2479,7 @@ static const struct pvr_shader_factory_info spm_load_8X_1_buffers_info = {
    0,
    NULL,
    0,
+   8,
 };
 
 static const uint8_t spm_load_8X_2_buffers_shader_code[8] = { 0 };
@@ -2446,6 +2503,7 @@ static const struct pvr_shader_factory_info spm_load_8X_2_buffers_info = {
    0,
    NULL,
    0,
+   8,
 };
 
 static const uint8_t spm_load_8X_3_buffers_shader_code[8] = { 0 };
@@ -2469,6 +2527,7 @@ static const struct pvr_shader_factory_info spm_load_8X_3_buffers_info = {
    0,
    NULL,
    0,
+   8,
 };
 
 static const uint8_t spm_load_8X_4_buffers_shader_code[8] = { 0 };
@@ -2492,6 +2551,7 @@ static const struct pvr_shader_factory_info spm_load_8X_4_buffers_info = {
    0,
    NULL,
    0,
+   8,
 };
 
 static const uint8_t spm_load_8X_5_buffers_shader_code[8] = { 0 };
@@ -2515,6 +2575,7 @@ static const struct pvr_shader_factory_info spm_load_8X_5_buffers_info = {
    0,
    NULL,
    0,
+   8,
 };
 
 static const uint8_t spm_load_8X_6_buffers_shader_code[8] = { 0 };
@@ -2538,6 +2599,7 @@ static const struct pvr_shader_factory_info spm_load_8X_6_buffers_info = {
    0,
    NULL,
    0,
+   8,
 };
 
 static const uint8_t spm_load_8X_7_buffers_shader_code[8] = { 0 };
@@ -2561,6 +2623,7 @@ static const struct pvr_shader_factory_info spm_load_8X_7_buffers_info = {
    0,
    NULL,
    0,
+   8,
 };
 static struct {
    const uint8_t *code;