mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-07 15:48:36 +02:00
hk: fix passthrough GS key invalidation
Just seeing that a passthrough GS was already bound is not sufficient to know that it is a *matching* passthrough GS. If the application binds a new VS that requires a different passthrough GS key than the previous VS, then we need to bind a different passthrough GS. Fixes:5bc8284816("hk: add Vulkan driver for Apple GPUs") Signed-off-by: Olivia Lee <olivia.lee@collabora.com> Reviewed-by: Mary Guillemard <mary@mary.zone> (cherry picked from commite10f29399f) Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/40092>
This commit is contained in:
parent
3397d3995f
commit
47caf527e3
2 changed files with 5 additions and 6 deletions
|
|
@ -2874,7 +2874,7 @@
|
|||
"description": "hk: fix passthrough GS key invalidation",
|
||||
"nominated": true,
|
||||
"nomination_type": 2,
|
||||
"resolution": 0,
|
||||
"resolution": 1,
|
||||
"main_sha": null,
|
||||
"because_sha": "5bc828481630147575348b66677edaade9e891e6",
|
||||
"notes": null
|
||||
|
|
|
|||
|
|
@ -3212,6 +3212,9 @@ hk_handle_passthrough_gs(struct hk_cmd_buffer *cmd, struct agx_draw draw)
|
|||
struct hk_graphics_state *gfx = &cmd->state.gfx;
|
||||
struct hk_api_shader *gs = gfx->shaders[MESA_SHADER_GEOMETRY];
|
||||
|
||||
if (!IS_SHADER_DIRTY(VERTEX) && !IS_SHADER_DIRTY(GEOMETRY))
|
||||
return;
|
||||
|
||||
/* If there's an application geometry shader, there's nothing to un/bind */
|
||||
if (gs && !gs->is_passthrough)
|
||||
return;
|
||||
|
|
@ -3221,12 +3224,8 @@ hk_handle_passthrough_gs(struct hk_cmd_buffer *cmd, struct agx_draw draw)
|
|||
uint32_t xfb_outputs = last_sw->info.xfb_info.output_count;
|
||||
bool needs_gs = xfb_outputs;
|
||||
|
||||
/* If we already have a matching GS configuration, we're done */
|
||||
if ((gs != NULL) == needs_gs)
|
||||
return;
|
||||
|
||||
/* If we don't need a GS but we do have a passthrough, unbind it */
|
||||
if (gs) {
|
||||
if (!needs_gs && gs != NULL) {
|
||||
assert(!needs_gs && gs->is_passthrough);
|
||||
hk_cmd_bind_graphics_shader(cmd, MESA_SHADER_GEOMETRY, NULL);
|
||||
return;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue