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 */
|
/* Clamp to maximum line width */
|
||||||
return MIN2(line_width_fixed, 0xFF);
|
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
|
void
|
||||||
agx_link_varyings_vs_fs(void *out, struct agx_varyings_vs *vs,
|
agx_link_varyings_vs_fs(void *out, struct agx_varyings_vs *vs,
|
||||||
unsigned nr_user_indices, struct agx_varyings_fs *fs,
|
unsigned nr_user_indices, struct agx_varyings_fs *fs,
|
||||||
bool first_provoking_vertex,
|
unsigned provoking_vertex, uint8_t sprite_coord_enable,
|
||||||
uint8_t sprite_coord_enable,
|
|
||||||
bool *generate_primitive_id)
|
bool *generate_primitive_id)
|
||||||
{
|
{
|
||||||
assert(fs->nr_bindings > 0);
|
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) {
|
agx_pack(bindings + i, CF_BINDING, cfg) {
|
||||||
cfg.base_coefficient_register = b.cf_base;
|
cfg.base_coefficient_register = b.cf_base;
|
||||||
cfg.components = b.count;
|
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 ||
|
if (b.slot == VARYING_SLOT_PNTC ||
|
||||||
(b.slot >= VARYING_SLOT_TEX0 && b.slot <= VARYING_SLOT_TEX7 &&
|
(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,
|
void agx_link_varyings_vs_fs(void *out, struct agx_varyings_vs *vs,
|
||||||
unsigned nr_user_indices,
|
unsigned nr_user_indices,
|
||||||
struct agx_varyings_fs *fs,
|
struct agx_varyings_fs *fs,
|
||||||
bool first_provoking_vertex,
|
unsigned provoking_vertex,
|
||||||
uint8_t sprite_coord_enable,
|
uint8_t sprite_coord_enable,
|
||||||
bool *generate_primitive_id);
|
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,
|
agx_link_varyings_vs_fs(t.cpu, &batch->linked_varyings,
|
||||||
vs->uvs.user_size, &ctx->linked.fs->cf,
|
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)
|
(batch->reduced_prim == MESA_PRIM_POINTS)
|
||||||
? ctx->rast->base.sprite_coord_enable
|
? ctx->rast->base.sprite_coord_enable
|
||||||
: 0,
|
: 0,
|
||||||
|
|
Loading…
Reference in New Issue