diff --git a/src/freedreno/ir3/ir3_compiler_nir.c b/src/freedreno/ir3/ir3_compiler_nir.c index 28eada2ac6446..3db225ebe8f47 100644 --- a/src/freedreno/ir3/ir3_compiler_nir.c +++ b/src/freedreno/ir3/ir3_compiler_nir.c @@ -5004,6 +5004,10 @@ ir3_compile_shader_nir(struct ir3_compiler *compiler, !ctx->s->info.fs.early_fragment_tests) ctx->so->no_earlyz |= ctx->s->info.writes_memory; + if ((ctx->so->type == MESA_SHADER_FRAGMENT) && + ctx->s->info.fs.post_depth_coverage) + so->post_depth_coverage = true; + out: if (ret) { if (so->ir) diff --git a/src/freedreno/ir3/ir3_shader.h b/src/freedreno/ir3/ir3_shader.h index 726a3cab3dce8..a6448503d7fe1 100644 --- a/src/freedreno/ir3/ir3_shader.h +++ b/src/freedreno/ir3/ir3_shader.h @@ -694,6 +694,8 @@ struct ir3_shader_variant { bool per_samp; + bool post_depth_coverage; + /* Are we using split or merged register file? */ bool mergedregs; diff --git a/src/freedreno/registers/adreno/a6xx.xml b/src/freedreno/registers/adreno/a6xx.xml index 9d094061abc2f..7c6930dfcdd46 100644 --- a/src/freedreno/registers/adreno/a6xx.xml +++ b/src/freedreno/registers/adreno/a6xx.xml @@ -1976,7 +1976,7 @@ to upconvert to 32b float internally? - + diff --git a/src/freedreno/vulkan/tu_device.c b/src/freedreno/vulkan/tu_device.c index fd66bd706f664..295b79676c30c 100644 --- a/src/freedreno/vulkan/tu_device.c +++ b/src/freedreno/vulkan/tu_device.c @@ -242,6 +242,7 @@ get_device_extensions(const struct tu_physical_device *device, .EXT_mutable_descriptor_type = true, .KHR_pipeline_library = true, .EXT_graphics_pipeline_library = true, + .EXT_post_depth_coverage = true, }; } diff --git a/src/freedreno/vulkan/tu_pipeline.c b/src/freedreno/vulkan/tu_pipeline.c index 075988c564808..0993c96b82052 100644 --- a/src/freedreno/vulkan/tu_pipeline.c +++ b/src/freedreno/vulkan/tu_pipeline.c @@ -1578,6 +1578,7 @@ tu6_emit_fs_inputs(struct tu_cs *cs, const struct ir3_shader_variant *fs) CONDREG(smask_in_regid, A6XX_RB_RENDER_CONTROL1_SAMPLEMASK) | CONDREG(samp_id_regid, A6XX_RB_RENDER_CONTROL1_SAMPLEID) | CONDREG(ij_regid[IJ_PERSP_CENTER_RHW], A6XX_RB_RENDER_CONTROL1_CENTERRHW) | + COND(fs->post_depth_coverage, A6XX_RB_RENDER_CONTROL1_POSTDEPTHCOVERAGE) | COND(fs->frag_face, A6XX_RB_RENDER_CONTROL1_FACENESS)); tu_cs_emit_pkt4(cs, REG_A6XX_RB_SAMPLE_CNTL, 1); diff --git a/src/freedreno/vulkan/tu_shader.c b/src/freedreno/vulkan/tu_shader.c index 0dc92192e0deb..5fd5f31f1821e 100644 --- a/src/freedreno/vulkan/tu_shader.c +++ b/src/freedreno/vulkan/tu_shader.c @@ -76,6 +76,7 @@ tu_spirv_to_nir(struct tu_device *dev, .subgroup_shuffle = true, .subgroup_arithmetic = true, .physical_storage_buffer_address = true, + .post_depth_coverage = true, }, };