diff --git a/src/imagination/vulkan/pvr_cmd_buffer.c b/src/imagination/vulkan/pvr_cmd_buffer.c index c9acf4dc5c6..a7b8e9511ff 100644 --- a/src/imagination/vulkan/pvr_cmd_buffer.c +++ b/src/imagination/vulkan/pvr_cmd_buffer.c @@ -1740,6 +1740,9 @@ static VkResult pvr_sub_cmd_gfx_job_init(const struct pvr_device_info *dev_info, job->run_frag = true; job->geometry_terminate = true; + /* TODO: Enable pixel merging when it's safe to do. */ + job->disable_pixel_merging = true; + return VK_SUCCESS; } diff --git a/src/imagination/vulkan/pvr_job_render.c b/src/imagination/vulkan/pvr_job_render.c index 0727e465c27..5515e315e98 100644 --- a/src/imagination/vulkan/pvr_job_render.c +++ b/src/imagination/vulkan/pvr_job_render.c @@ -1493,6 +1493,7 @@ pvr_frag_state_flags_init(const struct pvr_render_job *const job, .use_single_core = job->frag_uses_atomic_ops, .get_vis_results = job->get_vis_results, .has_spm_scratch_buffer = job->requires_spm_scratch_buffer, + .disable_pixel_merging = job->disable_pixel_merging, }; } diff --git a/src/imagination/vulkan/pvr_job_render.h b/src/imagination/vulkan/pvr_job_render.h index 042cef4aca4..1c9353292af 100644 --- a/src/imagination/vulkan/pvr_job_render.h +++ b/src/imagination/vulkan/pvr_job_render.h @@ -83,6 +83,7 @@ struct pvr_render_job { bool has_depth_attachment : 1; bool has_stencil_attachment : 1; bool requires_spm_scratch_buffer : 1; + bool disable_pixel_merging : 1; }; uint32_t pds_pixel_event_data_offset; diff --git a/src/imagination/vulkan/winsys/powervr/pvr_drm_job_render.c b/src/imagination/vulkan/winsys/powervr/pvr_drm_job_render.c index 1d63a4f771e..d395bf460fd 100644 --- a/src/imagination/vulkan/winsys/powervr/pvr_drm_job_render.c +++ b/src/imagination/vulkan/winsys/powervr/pvr_drm_job_render.c @@ -454,6 +454,9 @@ static uint32_t pvr_winsys_frag_flags_to_drm( if (ws_flags->has_spm_scratch_buffer) flags |= DRM_PVR_SUBMIT_JOB_FRAG_CMD_SCRATCHBUFFER; + if (ws_flags->disable_pixel_merging) + flags |= DRM_PVR_SUBMIT_JOB_FRAG_CMD_DISABLE_PIXELMERGE; + return flags; } diff --git a/src/imagination/vulkan/winsys/pvr_winsys.h b/src/imagination/vulkan/winsys/pvr_winsys.h index 9315efb90f9..aa2b41d04ef 100644 --- a/src/imagination/vulkan/winsys/pvr_winsys.h +++ b/src/imagination/vulkan/winsys/pvr_winsys.h @@ -341,6 +341,7 @@ struct pvr_winsys_render_submit_info { bool use_single_core : 1; bool get_vis_results : 1; bool has_spm_scratch_buffer : 1; + bool disable_pixel_merging : 1; } flags; struct vk_sync *wait; diff --git a/src/imagination/vulkan/winsys/pvrsrvkm/pvr_srv_job_render.c b/src/imagination/vulkan/winsys/pvrsrvkm/pvr_srv_job_render.c index 7b15015fced..e8fbe48b2dd 100644 --- a/src/imagination/vulkan/winsys/pvrsrvkm/pvr_srv_job_render.c +++ b/src/imagination/vulkan/winsys/pvrsrvkm/pvr_srv_job_render.c @@ -921,6 +921,9 @@ pvr_srv_fragment_cmd_init(struct rogue_fwif_cmd_3d *cmd, if (state->flags.has_spm_scratch_buffer) cmd->flags |= ROGUE_FWIF_RENDERFLAGS_SPMSCRATCHBUFFER; + + if (state->flags.disable_pixel_merging) + cmd->flags |= ROGUE_FWIF_RENDERFLAGS_DISABLE_PIXELMERGE; } VkResult pvr_srv_winsys_render_submit(