Add support for [[builtin(workgroup_id)]]

This is a trivial mapping to/from WGSL in all cases.

Bug: tint:478
Change-Id: I7f21a2392543a880906b54fddbdb8bbd149a526e
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/48140
Commit-Queue: James Price <jrprice@google.com>
Commit-Queue: Ben Clayton <bclayton@google.com>
Auto-Submit: James Price <jrprice@google.com>
Reviewed-by: Ben Clayton <bclayton@google.com>
Kokoro: Kokoro <noreply+kokoro@google.com>
This commit is contained in:
James Price 2021-04-16 19:57:34 +00:00 committed by Commit Bot service account
parent 5cd71b8c0a
commit 395b48825a
13 changed files with 24 additions and 0 deletions

View File

@ -59,6 +59,10 @@ std::ostream& operator<<(std::ostream& out, Builtin builtin) {
out << "global_invocation_id"; out << "global_invocation_id";
break; break;
} }
case Builtin::kWorkgroupId: {
out << "workgroup_id";
break;
}
case Builtin::kSampleIndex: { case Builtin::kSampleIndex: {
out << "sample_index"; out << "sample_index";
break; break;

View File

@ -32,6 +32,7 @@ enum class Builtin {
kLocalInvocationId, kLocalInvocationId,
kLocalInvocationIndex, kLocalInvocationIndex,
kGlobalInvocationId, kGlobalInvocationId,
kWorkgroupId,
kSampleIndex, kSampleIndex,
kSampleMask, kSampleMask,
kSampleMaskIn, // TODO(crbug.com/tint/715): Remove this kSampleMaskIn, // TODO(crbug.com/tint/715): Remove this

View File

@ -86,6 +86,8 @@ ast::Builtin EnumConverter::ToBuiltin(SpvBuiltIn b) {
return ast::Builtin::kLocalInvocationIndex; return ast::Builtin::kLocalInvocationIndex;
case SpvBuiltInGlobalInvocationId: case SpvBuiltInGlobalInvocationId:
return ast::Builtin::kGlobalInvocationId; return ast::Builtin::kGlobalInvocationId;
case SpvBuiltInWorkgroupId:
return ast::Builtin::kWorkgroupId;
case SpvBuiltInSampleId: case SpvBuiltInSampleId:
return ast::Builtin::kSampleIndex; return ast::Builtin::kSampleIndex;
case SpvBuiltInSampleMask: case SpvBuiltInSampleMask:

View File

@ -217,6 +217,7 @@ INSTANTIATE_TEST_SUITE_P(
ast::Builtin::kLocalInvocationIndex}, ast::Builtin::kLocalInvocationIndex},
BuiltinCase{SpvBuiltInGlobalInvocationId, true, BuiltinCase{SpvBuiltInGlobalInvocationId, true,
ast::Builtin::kGlobalInvocationId}, ast::Builtin::kGlobalInvocationId},
BuiltinCase{SpvBuiltInWorkgroupId, true, ast::Builtin::kWorkgroupId},
BuiltinCase{SpvBuiltInSampleId, true, ast::Builtin::kSampleIndex}, BuiltinCase{SpvBuiltInSampleId, true, ast::Builtin::kSampleIndex},
BuiltinCase{SpvBuiltInSampleMask, true, ast::Builtin::kSampleMask})); BuiltinCase{SpvBuiltInSampleMask, true, ast::Builtin::kSampleMask}));

View File

@ -85,6 +85,9 @@ ast::Builtin ident_to_builtin(const std::string& str) {
if (str == "global_invocation_id") { if (str == "global_invocation_id") {
return ast::Builtin::kGlobalInvocationId; return ast::Builtin::kGlobalInvocationId;
} }
if (str == "workgroup_id") {
return ast::Builtin::kWorkgroupId;
}
if (str == "sample_index") { if (str == "sample_index") {
return ast::Builtin::kSampleIndex; return ast::Builtin::kSampleIndex;
} }

View File

@ -121,6 +121,7 @@ INSTANTIATE_TEST_SUITE_P(
BuiltinData{"local_invocation_index", BuiltinData{"local_invocation_index",
ast::Builtin::kLocalInvocationIndex}, ast::Builtin::kLocalInvocationIndex},
BuiltinData{"global_invocation_id", ast::Builtin::kGlobalInvocationId}, BuiltinData{"global_invocation_id", ast::Builtin::kGlobalInvocationId},
BuiltinData{"workgroup_id", ast::Builtin::kWorkgroupId},
BuiltinData{"sample_index", ast::Builtin::kSampleIndex}, BuiltinData{"sample_index", ast::Builtin::kSampleIndex},
BuiltinData{"sample_mask", ast::Builtin::kSampleMask}, BuiltinData{"sample_mask", ast::Builtin::kSampleMask},
BuiltinData{"sample_mask_in", ast::Builtin::kSampleMaskIn}, BuiltinData{"sample_mask_in", ast::Builtin::kSampleMaskIn},

View File

@ -1949,6 +1949,8 @@ std::string GeneratorImpl::builtin_to_attribute(ast::Builtin builtin) const {
return "SV_GroupIndex"; return "SV_GroupIndex";
case ast::Builtin::kGlobalInvocationId: case ast::Builtin::kGlobalInvocationId:
return "SV_DispatchThreadID"; return "SV_DispatchThreadID";
case ast::Builtin::kWorkgroupId:
return "SV_GroupID";
case ast::Builtin::kSampleIndex: case ast::Builtin::kSampleIndex:
return "SV_SampleIndex"; return "SV_SampleIndex";
case ast::Builtin::kSampleMask: case ast::Builtin::kSampleMask:

View File

@ -82,6 +82,7 @@ INSTANTIATE_TEST_SUITE_P(
HlslBuiltinData{ast::Builtin::kLocalInvocationIndex, "SV_GroupIndex"}, HlslBuiltinData{ast::Builtin::kLocalInvocationIndex, "SV_GroupIndex"},
HlslBuiltinData{ast::Builtin::kGlobalInvocationId, HlslBuiltinData{ast::Builtin::kGlobalInvocationId,
"SV_DispatchThreadID"}, "SV_DispatchThreadID"},
HlslBuiltinData{ast::Builtin::kWorkgroupId, "SV_GroupID"},
HlslBuiltinData{ast::Builtin::kSampleIndex, "SV_SampleIndex"}, HlslBuiltinData{ast::Builtin::kSampleIndex, "SV_SampleIndex"},
HlslBuiltinData{ast::Builtin::kSampleMask, "SV_Coverage"}, HlslBuiltinData{ast::Builtin::kSampleMask, "SV_Coverage"},
HlslBuiltinData{ast::Builtin::kSampleMaskIn, "SV_Coverage"}, HlslBuiltinData{ast::Builtin::kSampleMaskIn, "SV_Coverage"},

View File

@ -1352,6 +1352,8 @@ std::string GeneratorImpl::builtin_to_attribute(ast::Builtin builtin) const {
return "thread_index_in_threadgroup"; return "thread_index_in_threadgroup";
case ast::Builtin::kGlobalInvocationId: case ast::Builtin::kGlobalInvocationId:
return "thread_position_in_grid"; return "thread_position_in_grid";
case ast::Builtin::kWorkgroupId:
return "threadgroup_position_in_grid";
case ast::Builtin::kSampleIndex: case ast::Builtin::kSampleIndex:
return "sample_id"; return "sample_id";
case ast::Builtin::kSampleMask: case ast::Builtin::kSampleMask:

View File

@ -73,6 +73,8 @@ INSTANTIATE_TEST_SUITE_P(
"thread_index_in_threadgroup"}, "thread_index_in_threadgroup"},
MslBuiltinData{ast::Builtin::kGlobalInvocationId, MslBuiltinData{ast::Builtin::kGlobalInvocationId,
"thread_position_in_grid"}, "thread_position_in_grid"},
MslBuiltinData{ast::Builtin::kWorkgroupId,
"threadgroup_position_in_grid"},
MslBuiltinData{ast::Builtin::kSampleIndex, "sample_id"}, MslBuiltinData{ast::Builtin::kSampleIndex, "sample_id"},
MslBuiltinData{ast::Builtin::kSampleMask, "sample_mask"}, MslBuiltinData{ast::Builtin::kSampleMask, "sample_mask"},
MslBuiltinData{ast::Builtin::kSampleMaskIn, "sample_mask"}, MslBuiltinData{ast::Builtin::kSampleMaskIn, "sample_mask"},

View File

@ -3304,6 +3304,8 @@ SpvBuiltIn Builder::ConvertBuiltin(ast::Builtin builtin,
return SpvBuiltInGlobalInvocationId; return SpvBuiltInGlobalInvocationId;
case ast::Builtin::kPointSize: case ast::Builtin::kPointSize:
return SpvBuiltInPointSize; return SpvBuiltInPointSize;
case ast::Builtin::kWorkgroupId:
return SpvBuiltInWorkgroupId;
case ast::Builtin::kSampleIndex: case ast::Builtin::kSampleIndex:
push_capability(SpvCapabilitySampleRateShading); push_capability(SpvCapabilitySampleRateShading);
return SpvBuiltInSampleId; return SpvBuiltInSampleId;

View File

@ -368,6 +368,8 @@ INSTANTIATE_TEST_SUITE_P(
ast::StorageClass::kInput, SpvBuiltInLocalInvocationIndex}, ast::StorageClass::kInput, SpvBuiltInLocalInvocationIndex},
BuiltinData{ast::Builtin::kGlobalInvocationId, BuiltinData{ast::Builtin::kGlobalInvocationId,
ast::StorageClass::kInput, SpvBuiltInGlobalInvocationId}, ast::StorageClass::kInput, SpvBuiltInGlobalInvocationId},
BuiltinData{ast::Builtin::kWorkgroupId, ast::StorageClass::kInput,
SpvBuiltInWorkgroupId},
BuiltinData{ast::Builtin::kSampleIndex, ast::StorageClass::kInput, BuiltinData{ast::Builtin::kSampleIndex, ast::StorageClass::kInput,
SpvBuiltInSampleId}, SpvBuiltInSampleId},
BuiltinData{ast::Builtin::kSampleMask, ast::StorageClass::kInput, BuiltinData{ast::Builtin::kSampleMask, ast::StorageClass::kInput,

View File

@ -74,6 +74,7 @@ INSTANTIATE_TEST_SUITE_P(
"local_invocation_index"}, "local_invocation_index"},
WgslBuiltinData{ast::Builtin::kGlobalInvocationId, WgslBuiltinData{ast::Builtin::kGlobalInvocationId,
"global_invocation_id"}, "global_invocation_id"},
WgslBuiltinData{ast::Builtin::kWorkgroupId, "workgroup_id"},
WgslBuiltinData{ast::Builtin::kSampleIndex, "sample_index"}, WgslBuiltinData{ast::Builtin::kSampleIndex, "sample_index"},
WgslBuiltinData{ast::Builtin::kSampleMaskIn, "sample_mask_in"}, WgslBuiltinData{ast::Builtin::kSampleMaskIn, "sample_mask_in"},
WgslBuiltinData{ast::Builtin::kSampleMaskOut, "sample_mask_out"})); WgslBuiltinData{ast::Builtin::kSampleMaskOut, "sample_mask_out"}));