pvr: Remove mrt setup from SPM EOT
authorKarmjit Mahil <Karmjit.Mahil@imgtec.com>
Wed, 28 Jun 2023 13:39:51 +0000 (14:39 +0100)
committerMarge Bot <emma+marge@anholt.net>
Fri, 14 Jul 2023 10:45:49 +0000 (10:45 +0000)
Remove the mrt setup stuff since the EOT program only support
output registers for now. When implementing the tile buffer
support this change can be reverted, or things could be changed
to better fit with how the compiler wants things.

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/24138>

src/imagination/vulkan/pvr_spm.c

index e5654c489895875d73c696bdde477a20db1718dd..6ebe0a048caf82c7047f017ea492ec338db46ec1 100644 (file)
@@ -503,7 +503,6 @@ static uint64_t pvr_spm_setup_pbe_eight_dword_write(
    uint32_t pbe_state_word_1_out[static const ROGUE_NUM_PBESTATE_STATE_WORDS],
    uint64_t pbe_reg_word_0_out[static const ROGUE_NUM_PBESTATE_REG_WORDS],
    uint64_t pbe_reg_word_1_out[static const ROGUE_NUM_PBESTATE_REG_WORDS],
-   struct usc_mrt_resource mrt_resources[static const 2],
    uint32_t *render_target_used_out)
 {
    const uint32_t max_pbe_write_size_dw = 4;
@@ -529,19 +528,6 @@ static uint64_t pvr_spm_setup_pbe_eight_dword_write(
 
    PVR_DEV_ADDR_ADVANCE(scratch_buffer_addr, mem_stored);
 
-   mrt_resources[render_target_used] = (struct usc_mrt_resource){
-      .mrt_desc = {
-         .intermediate_size = PVR_DW_TO_BYTES(max_pbe_write_size_dw),
-      },
-      .type = source_type,
-      .intermediate_size = PVR_DW_TO_BYTES(max_pbe_write_size_dw),
-   };
-
-   if (source_type == USC_MRT_RESOURCE_TYPE_MEMORY)
-      mrt_resources[render_target_used].mem.tile_buffer = tile_buffer_idx;
-
-   pvr_set_pbe_all_valid_mask(&mrt_resources[render_target_used].mrt_desc);
-
    render_target_used++;
 
    mem_stored += pvr_spm_setup_pbe_state(dev_info,
@@ -555,24 +541,6 @@ static uint64_t pvr_spm_setup_pbe_eight_dword_write(
 
    PVR_DEV_ADDR_ADVANCE(scratch_buffer_addr, mem_stored);
 
-   mrt_resources[render_target_used] = (struct usc_mrt_resource){
-      .mrt_desc = {
-         .intermediate_size = PVR_DW_TO_BYTES(max_pbe_write_size_dw),
-      },
-      .type = source_type,
-      .intermediate_size = PVR_DW_TO_BYTES(max_pbe_write_size_dw),
-   };
-
-   if (source_type == USC_MRT_RESOURCE_TYPE_OUTPUT_REG) {
-      /* Start from o4. */
-      mrt_resources[render_target_used].reg.output_reg = max_pbe_write_size_dw;
-   } else {
-      mrt_resources[render_target_used].mem.tile_buffer = tile_buffer_idx;
-      mrt_resources[render_target_used].mem.offset_dw = max_pbe_write_size_dw;
-   }
-
-   pvr_set_pbe_all_valid_mask(&mrt_resources[render_target_used].mrt_desc);
-
    render_target_used++;
    *render_target_used_out = render_target_used;
 
@@ -651,19 +619,11 @@ pvr_spm_init_eot_state(struct pvr_device *device,
       .width = framebuffer->width,
       .height = framebuffer->height,
    };
+   uint32_t total_render_target_used = 0;
+
    pvr_dev_addr_t next_scratch_buffer_addr =
       framebuffer->scratch_buffer->bo->vma->dev_addr;
 
-   /* TODO: These are only setup but not used for now. They will be used by the
-    * compiler once it's hooked up to generate the eot shader.
-    */
-   struct usc_mrt_resource mrt_resources[PVR_MAX_COLOR_ATTACHMENTS];
-   struct usc_mrt_setup mrt_setup = {
-      .num_output_regs = hw_render->output_regs_count,
-      .tile_buffer_size = pvr_get_tile_buffer_size(device),
-      .mrt_resources = mrt_resources,
-   };
-
    /* FIXME: Remove this hard coding. */
    uint32_t empty_eot_program[8] = { 0 };
    uint32_t usc_temp_count = 0;
@@ -685,21 +645,23 @@ pvr_spm_init_eot_state(struct pvr_device *device,
          USC_MRT_RESOURCE_TYPE_OUTPUT_REG,
          0,
          next_scratch_buffer_addr,
-         spm_eot_state->pbe_cs_words[mrt_setup.num_render_targets],
-         spm_eot_state->pbe_cs_words[mrt_setup.num_render_targets + 1],
-         spm_eot_state->pbe_reg_words[mrt_setup.num_render_targets],
-         spm_eot_state->pbe_reg_words[mrt_setup.num_render_targets + 1],
-         &mrt_resources[mrt_setup.num_render_targets],
+         spm_eot_state->pbe_cs_words[total_render_target_used],
+         spm_eot_state->pbe_cs_words[total_render_target_used + 1],
+         spm_eot_state->pbe_reg_words[total_render_target_used],
+         spm_eot_state->pbe_reg_words[total_render_target_used + 1],
          &render_targets_used);
 
       PVR_DEV_ADDR_ADVANCE(next_scratch_buffer_addr, mem_stored);
-      mrt_setup.num_render_targets += render_targets_used;
+      total_render_target_used += render_targets_used;
 
       /* Store off-chip tile data (i.e. tile buffers). */
 
       for (uint32_t i = 0; i < hw_render->tile_buffers_count; i++) {
+         assert(!"Add support for tile buffers in EOT");
+         pvr_finishme("Add support for tile buffers in EOT");
+
          /* `+ 1` since we have 2 emits per tile buffer. */
-         assert(mrt_setup.num_render_targets + 1 < PVR_MAX_COLOR_ATTACHMENTS);
+         assert(total_render_target_used + 1 < PVR_MAX_COLOR_ATTACHMENTS);
 
          mem_stored = pvr_spm_setup_pbe_eight_dword_write(
             dev_info,
@@ -708,15 +670,14 @@ pvr_spm_init_eot_state(struct pvr_device *device,
             USC_MRT_RESOURCE_TYPE_MEMORY,
             i,
             next_scratch_buffer_addr,
-            spm_eot_state->pbe_cs_words[mrt_setup.num_render_targets],
-            spm_eot_state->pbe_cs_words[mrt_setup.num_render_targets + 1],
-            spm_eot_state->pbe_reg_words[mrt_setup.num_render_targets],
-            spm_eot_state->pbe_reg_words[mrt_setup.num_render_targets + 1],
-            &mrt_resources[mrt_setup.num_render_targets],
+            spm_eot_state->pbe_cs_words[total_render_target_used],
+            spm_eot_state->pbe_cs_words[total_render_target_used + 1],
+            spm_eot_state->pbe_reg_words[total_render_target_used],
+            spm_eot_state->pbe_reg_words[total_render_target_used + 1],
             &render_targets_used);
 
          PVR_DEV_ADDR_ADVANCE(next_scratch_buffer_addr, mem_stored);
-         mrt_setup.num_render_targets += render_targets_used;
+         total_render_target_used += render_targets_used;
       }
    } else {
       /* Store on-chip tile data (i.e. output regs). */
@@ -728,28 +689,20 @@ pvr_spm_init_eot_state(struct pvr_device *device,
          PVR_PBE_STARTPOS_BIT0,
          hw_render->sample_count,
          next_scratch_buffer_addr,
-         spm_eot_state->pbe_cs_words[mrt_setup.num_render_targets],
-         spm_eot_state->pbe_reg_words[mrt_setup.num_render_targets]);
+         spm_eot_state->pbe_cs_words[total_render_target_used],
+         spm_eot_state->pbe_reg_words[total_render_target_used]);
 
       PVR_DEV_ADDR_ADVANCE(next_scratch_buffer_addr, mem_stored);
 
-      mrt_resources[mrt_setup.num_render_targets] = (struct usc_mrt_resource){
-         .mrt_desc = {
-            .intermediate_size = hw_render->output_regs_count * sizeof(uint32_t),
-         },
-         .type = USC_MRT_RESOURCE_TYPE_OUTPUT_REG,
-         .intermediate_size = hw_render->output_regs_count * sizeof(uint32_t),
-      };
-
-      pvr_set_pbe_all_valid_mask(
-         &mrt_resources[mrt_setup.num_render_targets].mrt_desc);
-
-      mrt_setup.num_render_targets++;
+      total_render_target_used++;
 
       /* Store off-chip tile data (i.e. tile buffers). */
 
       for (uint32_t i = 0; i < hw_render->tile_buffers_count; i++) {
-         assert(mrt_setup.num_render_targets < PVR_MAX_COLOR_ATTACHMENTS);
+         assert(!"Add support for tile buffers in EOT");
+         pvr_finishme("Add support for tile buffers in EOT");
+
+         assert(total_render_target_used < PVR_MAX_COLOR_ATTACHMENTS);
 
          mem_stored = pvr_spm_setup_pbe_state(
             dev_info,
@@ -758,25 +711,12 @@ pvr_spm_init_eot_state(struct pvr_device *device,
             PVR_PBE_STARTPOS_BIT0,
             hw_render->sample_count,
             next_scratch_buffer_addr,
-            spm_eot_state->pbe_cs_words[mrt_setup.num_render_targets],
-            spm_eot_state->pbe_reg_words[mrt_setup.num_render_targets]);
+            spm_eot_state->pbe_cs_words[total_render_target_used],
+            spm_eot_state->pbe_reg_words[total_render_target_used]);
 
          PVR_DEV_ADDR_ADVANCE(next_scratch_buffer_addr, mem_stored);
 
-         mrt_resources[mrt_setup.num_render_targets] = (struct usc_mrt_resource){
-            .mrt_desc = {
-               .intermediate_size =
-                  hw_render->output_regs_count * sizeof(uint32_t),
-            },
-            .type = USC_MRT_RESOURCE_TYPE_MEMORY,
-            .intermediate_size = hw_render->output_regs_count * sizeof(uint32_t),
-            .mem = { .tile_buffer = i, },
-         };
-
-         pvr_set_pbe_all_valid_mask(
-            &mrt_resources[mrt_setup.num_render_targets].mrt_desc);
-
-         mrt_setup.num_render_targets++;
+         total_render_target_used++;
       }
    }
 
@@ -808,7 +748,7 @@ pvr_spm_init_eot_state(struct pvr_device *device,
    spm_eot_state->pixel_event_program_data_upload = pds_eot_program.pvr_bo;
    spm_eot_state->pixel_event_program_data_offset = pds_eot_program.data_offset;
 
-   *emit_count_out = mrt_setup.num_render_targets;
+   *emit_count_out = total_render_target_used;
 
    return VK_SUCCESS;
 }