Skip to content

Commit 6428e04

Browse files
committed
s2s: hacky fixes to get mesh shading stuff to parse
1 parent e14a7de commit 6428e04

File tree

2 files changed

+35
-25
lines changed

2 files changed

+35
-25
lines changed

include/shady/ir/builtin.h

Lines changed: 25 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -11,30 +11,31 @@
1111
#define shd_f32vec4_type(arena) vector_type(arena, (VectorType) { .width = 4, .element_type = shd_fp32_type(arena) })
1212

1313
#define SHADY_BUILTINS() \
14-
BUILTIN(BaseInstance, AsInput, Invocation, shd_uint32_type(arena) )\
15-
BUILTIN(BaseVertex, AsInput, Invocation, shd_uint32_type(arena) )\
16-
BUILTIN(DeviceIndex, AsInput, Invocation, shd_uint32_type(arena) )\
17-
BUILTIN(DrawIndex, AsInput, Invocation, shd_uint32_type(arena) )\
18-
BUILTIN(VertexIndex, AsInput, Invocation, shd_int32_type(arena) )\
19-
BUILTIN(FragCoord, AsInput, Invocation, shd_f32vec4_type(arena) )\
20-
BUILTIN(FragDepth, AsOutput, Invocation, shd_fp32_type(arena) )\
21-
BUILTIN(InstanceId, AsInput, Invocation, shd_uint32_type(arena) )\
22-
BUILTIN(InvocationId, AsInput, Invocation, shd_uint32_type(arena) )\
23-
BUILTIN(InstanceIndex, AsInput, Invocation, shd_uint32_type(arena) )\
24-
BUILTIN(LocalInvocationId, AsInput, Invocation, shd_u32vec3_type(arena) )\
25-
BUILTIN(LocalInvocationIndex, AsInput, Invocation, shd_uint32_type(arena) )\
26-
BUILTIN(GlobalInvocationId, AsInput, Invocation, shd_u32vec3_type(arena) )\
27-
BUILTIN(LaunchIdKHR, AsInput, Invocation, shd_u32vec3_type(arena) )\
28-
BUILTIN(LaunchSizeKHR, AsInput, Invocation, shd_u32vec3_type(arena) )\
29-
BUILTIN(WorkgroupId, AsUInput, Workgroup, shd_u32vec3_type(arena) )\
30-
BUILTIN(WorkgroupSize, AsUInput, Device, shd_u32vec3_type(arena) )\
31-
BUILTIN(NumSubgroups, AsUInput, Invocation, shd_uint32_type(arena) )\
32-
BUILTIN(NumWorkgroups, AsUInput, Device, shd_u32vec3_type(arena) )\
33-
BUILTIN(Position, AsOutput, Invocation, shd_f32vec4_type(arena) )\
34-
BUILTIN(PrimitiveId, AsInput, Invocation, shd_uint32_type(arena) )\
35-
BUILTIN(SubgroupLocalInvocationId, AsInput, Invocation, shd_uint32_type(arena) )\
36-
BUILTIN(SubgroupId, AsUInput, Subgroup, shd_uint32_type(arena) )\
37-
BUILTIN(SubgroupSize, AsInput, Device, shd_uint32_type(arena) )\
14+
BUILTIN(BaseInstance, AsInput, Invocation, shd_uint32_type(arena) )\
15+
BUILTIN(BaseVertex, AsInput, Invocation, shd_uint32_type(arena) )\
16+
BUILTIN(DeviceIndex, AsInput, Invocation, shd_uint32_type(arena) )\
17+
BUILTIN(DrawIndex, AsInput, Invocation, shd_uint32_type(arena) )\
18+
BUILTIN(VertexIndex, AsInput, Invocation, shd_int32_type(arena) )\
19+
BUILTIN(FragCoord, AsInput, Invocation, shd_f32vec4_type(arena) )\
20+
BUILTIN(FragDepth, AsOutput, Invocation, shd_fp32_type(arena) )\
21+
BUILTIN(InstanceId, AsInput, Invocation, shd_uint32_type(arena) )\
22+
BUILTIN(InvocationId, AsInput, Invocation, shd_uint32_type(arena) )\
23+
BUILTIN(InstanceIndex, AsInput, Invocation, shd_uint32_type(arena) )\
24+
BUILTIN(LocalInvocationId, AsInput, Invocation, shd_u32vec3_type(arena) )\
25+
BUILTIN(LocalInvocationIndex, AsInput, Invocation, shd_uint32_type(arena) )\
26+
BUILTIN(GlobalInvocationId, AsInput, Invocation, shd_u32vec3_type(arena) )\
27+
BUILTIN(LaunchIdKHR, AsInput, Invocation, shd_u32vec3_type(arena) )\
28+
BUILTIN(LaunchSizeKHR, AsInput, Invocation, shd_u32vec3_type(arena) )\
29+
BUILTIN(WorkgroupId, AsUInput, Workgroup, shd_u32vec3_type(arena) )\
30+
BUILTIN(WorkgroupSize, AsUInput, Device, shd_u32vec3_type(arena) )\
31+
BUILTIN(NumSubgroups, AsUInput, Invocation, shd_uint32_type(arena) )\
32+
BUILTIN(NumWorkgroups, AsUInput, Device, shd_u32vec3_type(arena) )\
33+
BUILTIN(Position, AsOutput, Invocation, shd_f32vec4_type(arena) )\
34+
BUILTIN(PrimitiveTriangleIndicesEXT, AsOutput, Invocation, arr_type_helper(arena, 0, shd_u32vec3_type(arena), NULL) )\
35+
BUILTIN(PrimitiveId, AsInput, Invocation, shd_uint32_type(arena) )\
36+
BUILTIN(SubgroupLocalInvocationId, AsInput, Invocation, shd_uint32_type(arena) )\
37+
BUILTIN(SubgroupId, AsUInput, Subgroup, shd_uint32_type(arena) )\
38+
BUILTIN(SubgroupSize, AsInput, Device, shd_uint32_type(arena) )\
3839

3940
typedef enum {
4041
#define BUILTIN(name, as, scope, datatype) ShdBuiltin##name,

src/frontend/spirv/s2s.c

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -439,6 +439,7 @@ static Nodes get_args_from_phi(SpvParser* parser, SpvId block, SpvId predecessor
439439
}
440440

441441
static size_t parse_spv_instruction_at(SpvParser* parser, size_t instruction_offset) {
442+
assert(instruction_offset < parser->len);
442443
IrArena* a = parser->arena;
443444
uint32_t* instruction = parser->words + instruction_offset;
444445
SpvOp op = instruction[0] & 0xFFFF;
@@ -565,6 +566,12 @@ static size_t parse_spv_instruction_at(SpvParser* parser, size_t instruction_off
565566
case SpvExecutionModelVertex:
566567
type = "Vertex";
567568
break;
569+
case SpvExecutionModelMeshEXT:
570+
type = "Mesh";
571+
break;
572+
case SpvExecutionModelTaskEXT:
573+
type = "Task";
574+
break;
568575
default:
569576
shd_error("Unsupported execution model %d", instruction[1])
570577
}
@@ -586,6 +593,7 @@ static size_t parse_spv_instruction_at(SpvParser* parser, size_t instruction_off
586593
});
587594
break;
588595
}
596+
case SpvOpExecutionModeId:
589597
case SpvOpExecutionMode:
590598
case SpvOpDecorate:
591599
case SpvOpMemberDecorate: {
@@ -1450,7 +1458,8 @@ static size_t parse_spv_instruction_at(SpvParser* parser, size_t instruction_off
14501458
break;
14511459
}
14521460
case SpvOpTerminateInvocation:
1453-
case SpvOpKill: {
1461+
case SpvOpKill:
1462+
case SpvOpEmitMeshTasksEXT: {
14541463
LARRAY(const Node*, operands, size - 1);
14551464
for (size_t i = 0; i < size - 1; i++)
14561465
operands[i] = get_definition_by_id(parser, instruction[1 + i])->node;

0 commit comments

Comments
 (0)