[Mesa-dev] [PATCH 1/2] i965/gen9: Annotate input coverage mask change
Ben Widawsky
ben at bwidawsk.net
Thu Aug 27 15:35:19 PDT 2015
On Thu, Aug 27, 2015 at 11:50:51AM -0700, Ben Widawsky wrote:
> As far as I can tell, the behavior is preserved from the previous generations.
> Before we set a single bit to tell the FS whether or not we'll be using an input
> coverage mask. Now we have some options which are implementing various
> extensions. These bits are used for the various conservative rasterization
> mechanisms (for collision detection, binning, and whatever else).
>
> I believe that the behavior is preserved because the problem which conservative
> rasterization is attempting to fix would go away with the "NORMAL" mode (at the
> cost of performance, I believe).
>
> This patch serves as documentation of the change by creating the enums, as well
> as giving some of the history with the links here so that the next person who
> comes along and looks at it doesn't spend as long as I had to in order to
> determine if there is an issue or not.
>
> Previously, this algorithm had been done in software, and this can still be used
> as long as we don't export an extension stating otherwise.
>
> References: https://developer.nvidia.com/sites/default/files/akamai/opengl/specs/GL_NV_conservative_raster.txt
> References: https://http.developer.nvidia.com/GPUGems2/gpugems2_chapter42.html
> Cc: Kristian Høgsberg <krh at bitplanet.net>
> Signed-off-by: Ben Widawsky <ben at bwidawsk.net>
Ah. I just found the definition for enabling these modes in 3DSTATE_RASTER. It's
unclear what behavior occurs when that bit isn't set (and we don't set it).
> ---
> src/mesa/drivers/dri/i965/brw_defines.h | 16 ++++++++++++++++
> src/mesa/drivers/dri/i965/gen8_ps_state.c | 8 ++++++--
> 2 files changed, 22 insertions(+), 2 deletions(-)
>
> diff --git a/src/mesa/drivers/dri/i965/brw_defines.h b/src/mesa/drivers/dri/i965/brw_defines.h
> index cb5c82a..a9c1e08 100644
> --- a/src/mesa/drivers/dri/i965/brw_defines.h
> +++ b/src/mesa/drivers/dri/i965/brw_defines.h
> @@ -2265,6 +2265,21 @@ enum brw_pixel_shader_computed_depth_mode {
> BRW_PSCDEPTH_ON_LE = 3, /* PS guarantees output depth <= source depth */
> };
>
> +enum brw_pixel_shader_coverage_mask_mode {
> + BRW_PSICMS_OFF = 0, /* PS does not use input coverage masks. */
> + BRW_PSICMS_NORMAL = 1, /* Input Coverage masks based on outer conservatism
> + * and factors in SAMPLE_MASK. If Pixel is
> + * conservatively covered, all samples are enabled.
> + */
> +
> + BRW_PSICMS_INNER = 2, /* Input Coverage masks based on inner conservatism
> + * and factors in SAMPLE_MASK. If Pixel is
> + * conservatively *FULLY* covered, all samples are
> + * enabled.
> + */
> + BRW_PCICMS_DEPTH = 3,
> +};
> +
> #define _3DSTATE_PS_EXTRA 0x784F /* GEN8+ */
> /* DW1 */
> # define GEN8_PSX_PIXEL_SHADER_VALID (1 << 31)
> @@ -2282,6 +2297,7 @@ enum brw_pixel_shader_computed_depth_mode {
> # define GEN9_PSX_SHADER_PULLS_BARY (1 << 3)
> # define GEN8_PSX_SHADER_HAS_UAV (1 << 2)
> # define GEN8_PSX_SHADER_USES_INPUT_COVERAGE_MASK (1 << 1)
> +# define GEN9_PSX_SHADER_NORMAL_COVERAGE_MASK_SHIFT 0
>
> enum brw_wm_barycentric_interp_mode {
> BRW_WM_PERSPECTIVE_PIXEL_BARYCENTRIC = 0,
> diff --git a/src/mesa/drivers/dri/i965/gen8_ps_state.c b/src/mesa/drivers/dri/i965/gen8_ps_state.c
> index ae18f0f..a686fed 100644
> --- a/src/mesa/drivers/dri/i965/gen8_ps_state.c
> +++ b/src/mesa/drivers/dri/i965/gen8_ps_state.c
> @@ -52,8 +52,12 @@ gen8_upload_ps_extra(struct brw_context *brw,
> _mesa_get_min_invocations_per_fragment(ctx, fp, false) > 1)
> dw1 |= GEN8_PSX_SHADER_IS_PER_SAMPLE;
>
> - if (fp->Base.SystemValuesRead & SYSTEM_BIT_SAMPLE_MASK_IN)
> - dw1 |= GEN8_PSX_SHADER_USES_INPUT_COVERAGE_MASK;
> + if (fp->Base.SystemValuesRead & SYSTEM_BIT_SAMPLE_MASK_IN) {
> + if (brw->gen >= 9)
> + dw1 |= BRW_PSICMS_INNER << GEN9_PSX_SHADER_NORMAL_COVERAGE_MASK_SHIFT;
> + else
> + dw1 |= GEN8_PSX_SHADER_USES_INPUT_COVERAGE_MASK;
> + }
>
> if (prog_data->uses_omask)
> dw1 |= GEN8_PSX_OMASK_TO_RENDER_TARGET;
> --
> 2.5.0
>
More information about the mesa-dev
mailing list