shader: Fix disabled and unwritten attributes and varyings

This commit is contained in:
ReinUsesLisp 2021-06-26 01:14:06 -03:00 committed by ameerj
parent 65daec8b75
commit 5643a909bc
3 changed files with 31 additions and 18 deletions

View file

@ -298,10 +298,14 @@ Id EmitGetAttribute(EmitContext& ctx, IR::Attribute attr, Id vertex) {
if (IR::IsGeneric(attr)) {
const u32 index{IR::GenericAttributeIndex(attr)};
const std::optional<AttrInfo> type{AttrTypes(ctx, index)};
if (!type || !ctx.runtime_info.previous_stage_stores.Generic(index)) {
if (!type) {
// Attribute is disabled
return ctx.Const(0.0f);
}
if (!ctx.runtime_info.previous_stage_stores.Generic(index, element)) {
// Varying component is not written
return ctx.Const(type && element == 3 ? 1.0f : 0.0f);
}
const Id generic_id{ctx.input_generics.at(index)};
const Id pointer{AttrPointer(ctx, type->pointer, vertex, generic_id, ctx.Const(element))};
const Id value{ctx.OpLoad(type->id, pointer)};