MSL: Correctly emit user(clip/cullN) for clip/cull builtins in tess output struct.
Only emit user(locnN) for tess builtin input variables, and allow output builtin to emit user(clip/cullN). Previously, output builtin would emit location if input builtin also existed.
This commit is contained in:
parent
04293e03fd
commit
4ebd56bf9e
@ -2251,7 +2251,7 @@ void CompilerMSL::add_plain_variable_to_interface_block(StorageClass storage, co
|
|||||||
set_member_decoration(ib_type.self, ib_mbr_idx, DecorationComponent, comp);
|
set_member_decoration(ib_type.self, ib_mbr_idx, DecorationComponent, comp);
|
||||||
mark_location_as_used_by_shader(locn, get<SPIRType>(type_id), storage);
|
mark_location_as_used_by_shader(locn, get<SPIRType>(type_id), storage);
|
||||||
}
|
}
|
||||||
else if (is_builtin && is_tessellation_shader() && inputs_by_builtin.count(builtin))
|
else if (is_builtin && is_tessellation_shader() && storage == StorageClassInput && inputs_by_builtin.count(builtin))
|
||||||
{
|
{
|
||||||
uint32_t locn = inputs_by_builtin[builtin].location;
|
uint32_t locn = inputs_by_builtin[builtin].location;
|
||||||
set_member_decoration(ib_type.self, ib_mbr_idx, DecorationLocation, locn);
|
set_member_decoration(ib_type.self, ib_mbr_idx, DecorationLocation, locn);
|
||||||
@ -2416,7 +2416,7 @@ void CompilerMSL::add_composite_variable_to_interface_block(StorageClass storage
|
|||||||
set_member_decoration(ib_type.self, ib_mbr_idx, DecorationComponent, comp);
|
set_member_decoration(ib_type.self, ib_mbr_idx, DecorationComponent, comp);
|
||||||
mark_location_as_used_by_shader(locn, *usable_type, storage);
|
mark_location_as_used_by_shader(locn, *usable_type, storage);
|
||||||
}
|
}
|
||||||
else if (is_builtin && is_tessellation_shader() && inputs_by_builtin.count(builtin))
|
else if (is_builtin && is_tessellation_shader() && storage == StorageClassInput && inputs_by_builtin.count(builtin))
|
||||||
{
|
{
|
||||||
uint32_t locn = inputs_by_builtin[builtin].location + i;
|
uint32_t locn = inputs_by_builtin[builtin].location + i;
|
||||||
set_member_decoration(ib_type.self, ib_mbr_idx, DecorationLocation, locn);
|
set_member_decoration(ib_type.self, ib_mbr_idx, DecorationLocation, locn);
|
||||||
@ -2589,7 +2589,7 @@ void CompilerMSL::add_composite_member_variable_to_interface_block(StorageClass
|
|||||||
set_member_decoration(ib_type.self, ib_mbr_idx, DecorationLocation, locn);
|
set_member_decoration(ib_type.self, ib_mbr_idx, DecorationLocation, locn);
|
||||||
mark_location_as_used_by_shader(locn, *usable_type, storage);
|
mark_location_as_used_by_shader(locn, *usable_type, storage);
|
||||||
}
|
}
|
||||||
else if (is_builtin && is_tessellation_shader() && inputs_by_builtin.count(builtin))
|
else if (is_builtin && is_tessellation_shader() && storage == StorageClassInput && inputs_by_builtin.count(builtin))
|
||||||
{
|
{
|
||||||
uint32_t locn = inputs_by_builtin[builtin].location + i;
|
uint32_t locn = inputs_by_builtin[builtin].location + i;
|
||||||
set_member_decoration(ib_type.self, ib_mbr_idx, DecorationLocation, locn);
|
set_member_decoration(ib_type.self, ib_mbr_idx, DecorationLocation, locn);
|
||||||
@ -2780,7 +2780,7 @@ void CompilerMSL::add_plain_member_variable_to_interface_block(StorageClass stor
|
|||||||
set_member_decoration(ib_type.self, ib_mbr_idx, DecorationLocation, locn);
|
set_member_decoration(ib_type.self, ib_mbr_idx, DecorationLocation, locn);
|
||||||
mark_location_as_used_by_shader(locn, get<SPIRType>(mbr_type_id), storage);
|
mark_location_as_used_by_shader(locn, get<SPIRType>(mbr_type_id), storage);
|
||||||
}
|
}
|
||||||
else if (is_builtin && is_tessellation_shader() && inputs_by_builtin.count(builtin))
|
else if (is_builtin && is_tessellation_shader() && storage == StorageClassInput && inputs_by_builtin.count(builtin))
|
||||||
{
|
{
|
||||||
uint32_t locn = 0;
|
uint32_t locn = 0;
|
||||||
auto builtin_itr = inputs_by_builtin.find(builtin);
|
auto builtin_itr = inputs_by_builtin.find(builtin);
|
||||||
|
Loading…
Reference in New Issue
Block a user