mirror of
https://github.com/encounter/dawn-cmake.git
synced 2025-06-06 22:53:35 +00:00
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:
parent
5cd71b8c0a
commit
395b48825a
@ -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;
|
||||||
|
@ -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
|
||||||
|
@ -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:
|
||||||
|
@ -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}));
|
||||||
|
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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},
|
||||||
|
@ -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:
|
||||||
|
@ -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"},
|
||||||
|
@ -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:
|
||||||
|
@ -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"},
|
||||||
|
@ -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;
|
||||||
|
@ -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,
|
||||||
|
@ -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"}));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user