mirror of https://gitlab.freedesktop.org/mesa/mesa
asahi: extend varying linking for tri fan weirdness
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/29179>
This commit is contained in:
parent
d763ab2de0
commit
cad60ab4b1
|
@ -152,20 +152,3 @@ agx_pack_line_width(float line_width)
|
|||
/* Clamp to maximum line width */
|
||||
return MIN2(line_width_fixed, 0xFF);
|
||||
}
|
||||
|
||||
static enum agx_shade_model
|
||||
agx_translate_shade_model(struct agx_varyings_fs *fs, unsigned binding,
|
||||
bool first_provoking_vertex)
|
||||
{
|
||||
if (fs->bindings[binding].smooth) {
|
||||
if (fs->bindings[binding].perspective)
|
||||
return AGX_SHADE_MODEL_PERSPECTIVE;
|
||||
else
|
||||
return AGX_SHADE_MODEL_LINEAR;
|
||||
} else {
|
||||
if (!first_provoking_vertex)
|
||||
return AGX_SHADE_MODEL_FLAT_VERTEX_2;
|
||||
else
|
||||
return AGX_SHADE_MODEL_FLAT_VERTEX_0;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -252,11 +252,24 @@ agx_assign_uvs(struct agx_varyings_vs *varyings,
|
|||
}
|
||||
}
|
||||
|
||||
static inline enum agx_shade_model
|
||||
translate_flat_shade_model(unsigned provoking_vertex)
|
||||
{
|
||||
static_assert(AGX_SHADE_MODEL_FLAT_VERTEX_0 == 0, "hw");
|
||||
static_assert(AGX_SHADE_MODEL_FLAT_VERTEX_2 == 2, "hw");
|
||||
|
||||
assert(provoking_vertex <= 2);
|
||||
|
||||
if (provoking_vertex == 1)
|
||||
return AGX_SHADE_MODEL_FLAT_VERTEX_1;
|
||||
else
|
||||
return (enum agx_shade_model)provoking_vertex;
|
||||
}
|
||||
|
||||
void
|
||||
agx_link_varyings_vs_fs(void *out, struct agx_varyings_vs *vs,
|
||||
unsigned nr_user_indices, struct agx_varyings_fs *fs,
|
||||
bool first_provoking_vertex,
|
||||
uint8_t sprite_coord_enable,
|
||||
unsigned provoking_vertex, uint8_t sprite_coord_enable,
|
||||
bool *generate_primitive_id)
|
||||
{
|
||||
assert(fs->nr_bindings > 0);
|
||||
|
@ -280,8 +293,13 @@ agx_link_varyings_vs_fs(void *out, struct agx_varyings_vs *vs,
|
|||
agx_pack(bindings + i, CF_BINDING, cfg) {
|
||||
cfg.base_coefficient_register = b.cf_base;
|
||||
cfg.components = b.count;
|
||||
cfg.shade_model =
|
||||
agx_translate_shade_model(fs, i, first_provoking_vertex);
|
||||
|
||||
if (b.smooth) {
|
||||
cfg.shade_model = b.perspective ? AGX_SHADE_MODEL_PERSPECTIVE
|
||||
: AGX_SHADE_MODEL_LINEAR;
|
||||
} else {
|
||||
cfg.shade_model = translate_flat_shade_model(provoking_vertex);
|
||||
}
|
||||
|
||||
if (b.slot == VARYING_SLOT_PNTC ||
|
||||
(b.slot >= VARYING_SLOT_TEX0 && b.slot <= VARYING_SLOT_TEX7 &&
|
||||
|
|
|
@ -86,6 +86,6 @@ struct agx_varyings_fs;
|
|||
void agx_link_varyings_vs_fs(void *out, struct agx_varyings_vs *vs,
|
||||
unsigned nr_user_indices,
|
||||
struct agx_varyings_fs *fs,
|
||||
bool first_provoking_vertex,
|
||||
unsigned provoking_vertex,
|
||||
uint8_t sprite_coord_enable,
|
||||
bool *generate_primitive_id);
|
||||
|
|
|
@ -3395,7 +3395,7 @@ agx_encode_state(struct agx_batch *batch, uint8_t *out)
|
|||
|
||||
agx_link_varyings_vs_fs(t.cpu, &batch->linked_varyings,
|
||||
vs->uvs.user_size, &ctx->linked.fs->cf,
|
||||
ctx->rast->base.flatshade_first,
|
||||
ctx->rast->base.flatshade_first ? 0 : 2,
|
||||
(batch->reduced_prim == MESA_PRIM_POINTS)
|
||||
? ctx->rast->base.sprite_coord_enable
|
||||
: 0,
|
||||
|
|
Loading…
Reference in New Issue