From 76f095c3549eb9a522e5d4e3cbb5e319582b3fc4 Mon Sep 17 00:00:00 2001 From: Francisco Jerez Date: Mon, 8 Aug 2022 13:56:41 -0700 Subject: [PATCH] iris/gfx11+: Request PS payload fields for ALU-based interpolation via 3DSTATE_PS_EXTRA. Plumb the prog_data bits recently introduced for ALU-based interpolation down to 3DSTATE_PS_EXTRA emission in the GL driver, as well as the uses_depth_w_coefficients bit that was already in use by the Vulkan driver for CPS shaders. Even though this is only going to be used on Xe2+ for now there seems to be no reason not to plumb the bits on all platforms back to gfx11, since the 3DSTATE_PS_EXTRA enables already existed on ICL. Reviewed-by: Caio Oliveira Part-of: --- src/gallium/drivers/iris/iris_context.h | 5 +++++ src/gallium/drivers/iris/iris_program.c | 5 +++++ src/gallium/drivers/iris/iris_state.c | 11 +++++++++++ 3 files changed, 21 insertions(+) diff --git a/src/gallium/drivers/iris/iris_context.h b/src/gallium/drivers/iris/iris_context.h index 2b974319452..0b2fc2b9656 100644 --- a/src/gallium/drivers/iris/iris_context.h +++ b/src/gallium/drivers/iris/iris_context.h @@ -349,6 +349,11 @@ struct iris_fs_data { bool has_side_effects; bool pulls_bary; + bool uses_sample_offsets; + bool uses_npc_bary_coefficients; + bool uses_pc_bary_coefficients; + bool uses_depth_w_coefficients; + bool uses_nonperspective_interp_modes; bool is_per_sample; diff --git a/src/gallium/drivers/iris/iris_program.c b/src/gallium/drivers/iris/iris_program.c index 8d8849ec976..d425d9dfce8 100644 --- a/src/gallium/drivers/iris/iris_program.c +++ b/src/gallium/drivers/iris/iris_program.c @@ -115,6 +115,11 @@ iris_apply_brw_wm_prog_data(struct iris_compiled_shader *shader, iris->has_side_effects = brw->has_side_effects; iris->pulls_bary = brw->pulls_bary; + iris->uses_sample_offsets = brw->uses_sample_offsets; + iris->uses_npc_bary_coefficients = brw->uses_npc_bary_coefficients; + iris->uses_pc_bary_coefficients = brw->uses_pc_bary_coefficients; + iris->uses_depth_w_coefficients = brw->uses_depth_w_coefficients; + iris->uses_nonperspective_interp_modes = brw->uses_nonperspective_interp_modes; iris->is_per_sample = brw_wm_prog_data_is_persample(brw, 0); diff --git a/src/gallium/drivers/iris/iris_state.c b/src/gallium/drivers/iris/iris_state.c index b9ac6d9a898..0fd4f954f83 100644 --- a/src/gallium/drivers/iris/iris_state.c +++ b/src/gallium/drivers/iris/iris_state.c @@ -5254,6 +5254,17 @@ iris_store_fs_state(const struct intel_device_info *devinfo, #endif psx.PixelShaderComputesStencil = fs_data->computed_stencil; #endif + +#if GFX_VER >= 11 + psx.PixelShaderRequiresSubpixelSampleOffsets = + fs_data->uses_sample_offsets; + psx.PixelShaderRequiresNonPerspectiveBaryPlaneCoefficients = + fs_data->uses_npc_bary_coefficients; + psx.PixelShaderRequiresPerspectiveBaryPlaneCoefficients = + fs_data->uses_pc_bary_coefficients; + psx.PixelShaderRequiresSourceDepthandorWPlaneCoefficients = + fs_data->uses_depth_w_coefficients; +#endif } }