Mesa (main): crocus: add missing fs dirty on reduced prim change.
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Wed Aug 25 03:39:31 UTC 2021
Module: Mesa
Branch: main
Commit: ad786430610f457f299e0085c8ddc4a3fc676553
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=ad786430610f457f299e0085c8ddc4a3fc676553
Author: Dave Airlie <airlied at gmail.com>
Date: Tue Aug 24 22:31:54 2021 -0400
crocus: add missing fs dirty on reduced prim change.
the reduced prim is used to decide some line antialiasing settings.
this fixes mesa-demos antialias
Fixes: f3630548f1da ("crocus: initial gallium driver for Intel gfx 4-7")
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/12536>
---
src/gallium/drivers/crocus/crocus_context.h | 1 +
src/gallium/drivers/crocus/crocus_draw.c | 11 +++++++++--
src/gallium/drivers/crocus/crocus_program.c | 4 ++--
src/gallium/drivers/crocus/crocus_state.c | 3 ++-
4 files changed, 14 insertions(+), 5 deletions(-)
diff --git a/src/gallium/drivers/crocus/crocus_context.h b/src/gallium/drivers/crocus/crocus_context.h
index f83170b0bb9..4cb936831a0 100644
--- a/src/gallium/drivers/crocus/crocus_context.h
+++ b/src/gallium/drivers/crocus/crocus_context.h
@@ -587,6 +587,7 @@ struct crocus_context {
bool primitive_restart;
unsigned cut_index;
+ enum pipe_prim_type reduced_prim_mode:8;
enum pipe_prim_type prim_mode:8;
bool prim_is_points_or_lines;
uint8_t vertices_per_patch;
diff --git a/src/gallium/drivers/crocus/crocus_draw.c b/src/gallium/drivers/crocus/crocus_draw.c
index 5afd573313e..68e3a1c40eb 100644
--- a/src/gallium/drivers/crocus/crocus_draw.c
+++ b/src/gallium/drivers/crocus/crocus_draw.c
@@ -138,11 +138,18 @@ crocus_update_draw_info(struct crocus_context *ice,
if (ice->state.prim_mode != mode) {
ice->state.prim_mode = mode;
+ enum pipe_prim_type reduced = u_reduced_prim(mode);
+ if (ice->state.reduced_prim_mode != reduced) {
+ if (screen->devinfo.ver < 6)
+ ice->state.dirty |= CROCUS_DIRTY_GEN4_CLIP_PROG | CROCUS_DIRTY_GEN4_SF_PROG;
+ /* if the reduced prim changes the WM needs updating. */
+ ice->state.stage_dirty |= CROCUS_STAGE_DIRTY_UNCOMPILED_FS;
+ ice->state.reduced_prim_mode = reduced;
+ }
+
if (screen->devinfo.ver == 8)
ice->state.dirty |= CROCUS_DIRTY_GEN8_VF_TOPOLOGY;
- if (screen->devinfo.ver < 6)
- ice->state.dirty |= CROCUS_DIRTY_GEN4_CLIP_PROG | CROCUS_DIRTY_GEN4_SF_PROG;
if (screen->devinfo.ver <= 6)
ice->state.dirty |= CROCUS_DIRTY_GEN4_FF_GS_PROG;
diff --git a/src/gallium/drivers/crocus/crocus_program.c b/src/gallium/drivers/crocus/crocus_program.c
index 33c97ca6a3a..4252c1e03cb 100644
--- a/src/gallium/drivers/crocus/crocus_program.c
+++ b/src/gallium/drivers/crocus/crocus_program.c
@@ -2082,7 +2082,7 @@ crocus_update_compiled_clip(struct crocus_context *ice)
memcpy(key.interp_mode, wm_prog_data->interp_mode, sizeof(key.interp_mode));
}
- key.primitive = u_reduced_prim(ice->state.prim_mode);
+ key.primitive = ice->state.reduced_prim_mode;
key.attrs = ice->shaders.last_vue_map->slots_valid;
struct pipe_rasterizer_state *rs_state = crocus_get_rast_state(ice);
@@ -2230,7 +2230,7 @@ crocus_update_compiled_sf(struct crocus_context *ice)
key.attrs = ice->shaders.last_vue_map->slots_valid;
- switch (u_reduced_prim(ice->state.prim_mode)) {
+ switch (ice->state.reduced_prim_mode) {
case GL_TRIANGLES:
default:
if (key.attrs & BITFIELD64_BIT(VARYING_SLOT_EDGE))
diff --git a/src/gallium/drivers/crocus/crocus_state.c b/src/gallium/drivers/crocus/crocus_state.c
index 79085e22db7..3d440bdd0f1 100644
--- a/src/gallium/drivers/crocus/crocus_state.c
+++ b/src/gallium/drivers/crocus/crocus_state.c
@@ -4796,7 +4796,7 @@ crocus_populate_fs_key(const struct crocus_context *ice,
uint32_t line_aa = BRW_WM_AA_NEVER;
if (rast->cso.line_smooth) {
- int reduced_prim = u_reduced_prim(ice->state.prim_mode);
+ int reduced_prim = ice->state.reduced_prim_mode;
if (reduced_prim == PIPE_PRIM_LINES)
line_aa = BRW_WM_AA_ALWAYS;
else if (reduced_prim == PIPE_PRIM_TRIANGLES) {
@@ -9259,6 +9259,7 @@ genX(crocus_init_state)(struct crocus_context *ice)
ice->state.sample_mask = 0xff;
ice->state.num_viewports = 1;
ice->state.prim_mode = PIPE_PRIM_MAX;
+ ice->state.reduced_prim_mode = PIPE_PRIM_MAX;
ice->state.genx = calloc(1, sizeof(struct crocus_genx_state));
ice->draw.derived_params.drawid = -1;
More information about the mesa-commit
mailing list