diff --git a/src/panfrost/vulkan/csf/panvk_vX_cmd_draw.c b/src/panfrost/vulkan/csf/panvk_vX_cmd_draw.c index 4bf2e2798dc..49f66a2eab7 100644 --- a/src/panfrost/vulkan/csf/panvk_vX_cmd_draw.c +++ b/src/panfrost/vulkan/csf/panvk_vX_cmd_draw.c @@ -1533,7 +1533,7 @@ prepare_dcd(struct panvk_cmd_buffer *cmdbuf) MALI_OCCLUSION_MODE_DISABLED; struct pan_earlyzs_state earlyzs = - pan_earlyzs_get(pan_earlyzs_analyze(&fs->info), writes_zs || oq, + pan_earlyzs_get(fs->fs.earlyzs_lut, writes_zs || oq, alpha_to_coverage, zs_always_passes); cfg.pixel_kill_operation = (enum mali_pixel_kill)earlyzs.kill; diff --git a/src/panfrost/vulkan/jm/panvk_vX_cmd_draw.c b/src/panfrost/vulkan/jm/panvk_vX_cmd_draw.c index 873684c3e82..235b0cd7255 100644 --- a/src/panfrost/vulkan/jm/panvk_vX_cmd_draw.c +++ b/src/panfrost/vulkan/jm/panvk_vX_cmd_draw.c @@ -295,7 +295,7 @@ panvk_draw_prepare_fs_rsd(struct panvk_cmd_buffer *cmdbuf, MALI_OCCLUSION_MODE_DISABLED; struct pan_earlyzs_state earlyzs = - pan_earlyzs_get(pan_earlyzs_analyze(fs_info), writes_zs || oq, + pan_earlyzs_get(fs->fs.earlyzs_lut, writes_zs || oq, alpha_to_coverage, zs_always_passes); cfg.properties.pixel_kill_operation = earlyzs.kill; diff --git a/src/panfrost/vulkan/panvk_shader.h b/src/panfrost/vulkan/panvk_shader.h index b73fc28c9bf..3e232188586 100644 --- a/src/panfrost/vulkan/panvk_shader.h +++ b/src/panfrost/vulkan/panvk_shader.h @@ -13,6 +13,7 @@ #include "util/pan_ir.h" #include "pan_desc.h" +#include "pan_earlyzs.h" #include "panvk_cmd_push_constant.h" #include "panvk_descriptor_set.h" @@ -261,6 +262,10 @@ struct panvk_shader { struct { struct pan_compute_dim local_size; } cs; + + struct { + struct pan_earlyzs_lut earlyzs_lut; + } fs; }; struct { diff --git a/src/panfrost/vulkan/panvk_vX_shader.c b/src/panfrost/vulkan/panvk_vX_shader.c index 7f6aa42044a..da473764c8e 100644 --- a/src/panfrost/vulkan/panvk_vX_shader.c +++ b/src/panfrost/vulkan/panvk_vX_shader.c @@ -921,6 +921,10 @@ panvk_compile_nir(struct panvk_device *dev, nir_shader *nir, shader->cs.local_size.z = nir->info.workgroup_size[2]; break; + case MESA_SHADER_FRAGMENT: + shader->fs.earlyzs_lut = pan_earlyzs_analyze(&shader->info); + break; + default: break; } @@ -1334,6 +1338,10 @@ panvk_deserialize_shader(struct vk_device *vk_dev, struct blob_reader *blob, sizeof(shader->cs.local_size)); break; + case MESA_SHADER_FRAGMENT: + shader->fs.earlyzs_lut = pan_earlyzs_analyze(&shader->info); + break; + default: break; }