Update builtin idx names.

This CL upldates the vertex_idx, instance_idx and global_invocation_idx
builtins to use the full _index names. The original values still exist
until we can update downstream users.

Change-Id: Icd02601eeb15704d5463158541c07816d98e5383
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/37940
Commit-Queue: dan sinclair <dsinclair@chromium.org>
Auto-Submit: dan sinclair <dsinclair@chromium.org>
Reviewed-by: Ben Clayton <bclayton@google.com>
This commit is contained in:
dan sinclair 2021-01-18 15:51:13 +00:00 committed by Commit Bot service account
parent 4a110c2726
commit d7335fa974
21 changed files with 94 additions and 88 deletions

View File

@ -28,13 +28,13 @@ decorated with `NonWritable` or each member of the struct can be decorated with
| Name | SPIR-V | MSL | HLSL | | Name | SPIR-V | MSL | HLSL |
|------|--------|-----|------| |------|--------|-----|------|
| position | SpvBuiltInPosition |position | SV_Position | | position | SpvBuiltInPosition |position | SV_Position |
| vertex_idx | SpvBuiltInVertexIndex |vertex_id | SV_VertexID | | vertex_index | SpvBuiltInVertexIndex |vertex_id | SV_VertexID |
| instance_idx | SpvBuiltInInstanceIndex | instance_id| SV_InstanceID | | instance_index | SpvBuiltInInstanceIndex | instance_id| SV_InstanceID |
| front_facing | SpvBuiltInFrontFacing | front_facing | SV_IsFrontFacing | | front_facing | SpvBuiltInFrontFacing | front_facing | SV_IsFrontFacing |
| frag_coord | SpvBuiltInFragCoord | position | SV_Position | | frag_coord | SpvBuiltInFragCoord | position | SV_Position |
| frag_depth | SpvBuiltInFragDepth | depth(any) | SV_Depth | | frag_depth | SpvBuiltInFragDepth | depth(any) | SV_Depth |
| local_invocation_id | SpvBuiltInLocalInvocationId | thread_position_in_threadgroup | SV_GroupThreadID | | local_invocation_id | SpvBuiltInLocalInvocationId | thread_position_in_threadgroup | SV_GroupThreadID |
| local_invocation_idx | SpvBuiltInLocalInvocationIndex | thread_index_in_threadgroup | SV_GroupIndex | | local_invocation_index | SpvBuiltInLocalInvocationIndex | thread_index_in_threadgroup | SV_GroupIndex |
| global_invocation_id | SpvBuiltInGlobalInvocationId | thread_position_in_grid | SV_DispatchThreadID | | global_invocation_id | SpvBuiltInGlobalInvocationId | thread_position_in_grid | SV_DispatchThreadID |

View File

@ -27,12 +27,12 @@ std::ostream& operator<<(std::ostream& out, Builtin builtin) {
out << "position"; out << "position";
break; break;
} }
case Builtin::kVertexIdx: { case Builtin::kVertexIndex: {
out << "vertex_idx"; out << "vertex_index";
break; break;
} }
case Builtin::kInstanceIdx: { case Builtin::kInstanceIndex: {
out << "instance_idx"; out << "instance_index";
break; break;
} }
case Builtin::kFrontFacing: { case Builtin::kFrontFacing: {
@ -51,8 +51,8 @@ std::ostream& operator<<(std::ostream& out, Builtin builtin) {
out << "local_invocation_id"; out << "local_invocation_id";
break; break;
} }
case Builtin::kLocalInvocationIdx: { case Builtin::kLocalInvocationIndex: {
out << "local_invocation_idx"; out << "local_invocation_index";
break; break;
} }
case Builtin::kGlobalInvocationId: { case Builtin::kGlobalInvocationId: {

View File

@ -24,13 +24,13 @@ namespace ast {
enum class Builtin { enum class Builtin {
kNone = -1, kNone = -1,
kPosition, kPosition,
kVertexIdx, kVertexIndex,
kInstanceIdx, kInstanceIndex,
kFrontFacing, kFrontFacing,
kFragCoord, kFragCoord,
kFragDepth, kFragDepth,
kLocalInvocationId, kLocalInvocationId,
kLocalInvocationIdx, kLocalInvocationIndex,
kGlobalInvocationId, kGlobalInvocationId,
// Below are not currently WGSL builtins, but are included in this enum as // Below are not currently WGSL builtins, but are included in this enum as

View File

@ -71,9 +71,9 @@ ast::Builtin EnumConverter::ToBuiltin(SpvBuiltIn b) {
case SpvBuiltInPosition: case SpvBuiltInPosition:
return ast::Builtin::kPosition; return ast::Builtin::kPosition;
case SpvBuiltInVertexIndex: case SpvBuiltInVertexIndex:
return ast::Builtin::kVertexIdx; return ast::Builtin::kVertexIndex;
case SpvBuiltInInstanceIndex: case SpvBuiltInInstanceIndex:
return ast::Builtin::kInstanceIdx; return ast::Builtin::kInstanceIndex;
case SpvBuiltInFrontFacing: case SpvBuiltInFrontFacing:
return ast::Builtin::kFrontFacing; return ast::Builtin::kFrontFacing;
case SpvBuiltInFragCoord: case SpvBuiltInFragCoord:
@ -83,7 +83,7 @@ ast::Builtin EnumConverter::ToBuiltin(SpvBuiltIn b) {
case SpvBuiltInLocalInvocationId: case SpvBuiltInLocalInvocationId:
return ast::Builtin::kLocalInvocationId; return ast::Builtin::kLocalInvocationId;
case SpvBuiltInLocalInvocationIndex: case SpvBuiltInLocalInvocationIndex:
return ast::Builtin::kLocalInvocationIdx; return ast::Builtin::kLocalInvocationIndex;
case SpvBuiltInGlobalInvocationId: case SpvBuiltInGlobalInvocationId:
return ast::Builtin::kGlobalInvocationId; return ast::Builtin::kGlobalInvocationId;
default: default:

View File

@ -210,15 +210,16 @@ INSTANTIATE_TEST_SUITE_P(
SpvBuiltinTest, SpvBuiltinTest,
testing::Values( testing::Values(
BuiltinCase{SpvBuiltInPosition, true, ast::Builtin::kPosition}, BuiltinCase{SpvBuiltInPosition, true, ast::Builtin::kPosition},
BuiltinCase{SpvBuiltInVertexIndex, true, ast::Builtin::kVertexIdx}, BuiltinCase{SpvBuiltInVertexIndex, true, ast::Builtin::kVertexIndex},
BuiltinCase{SpvBuiltInInstanceIndex, true, ast::Builtin::kInstanceIdx}, BuiltinCase{SpvBuiltInInstanceIndex, true,
ast::Builtin::kInstanceIndex},
BuiltinCase{SpvBuiltInFrontFacing, true, ast::Builtin::kFrontFacing}, BuiltinCase{SpvBuiltInFrontFacing, true, ast::Builtin::kFrontFacing},
BuiltinCase{SpvBuiltInFragCoord, true, ast::Builtin::kFragCoord}, BuiltinCase{SpvBuiltInFragCoord, true, ast::Builtin::kFragCoord},
BuiltinCase{SpvBuiltInFragDepth, true, ast::Builtin::kFragDepth}, BuiltinCase{SpvBuiltInFragDepth, true, ast::Builtin::kFragDepth},
BuiltinCase{SpvBuiltInLocalInvocationId, true, BuiltinCase{SpvBuiltInLocalInvocationId, true,
ast::Builtin::kLocalInvocationId}, ast::Builtin::kLocalInvocationId},
BuiltinCase{SpvBuiltInLocalInvocationIndex, true, BuiltinCase{SpvBuiltInLocalInvocationIndex, true,
ast::Builtin::kLocalInvocationIdx}, ast::Builtin::kLocalInvocationIndex},
BuiltinCase{SpvBuiltInGlobalInvocationId, true, BuiltinCase{SpvBuiltInGlobalInvocationId, true,
ast::Builtin::kGlobalInvocationId})); ast::Builtin::kGlobalInvocationId}));

View File

@ -208,7 +208,7 @@ TEST_F(SpvModuleScopeVarParserTest, BuiltinVertexIndex) {
EXPECT_THAT(module_str, HasSubstr(R"( EXPECT_THAT(module_str, HasSubstr(R"(
Variable{ Variable{
Decorations{ Decorations{
BuiltinDecoration{vertex_idx} BuiltinDecoration{vertex_index}
} }
x_52 x_52
in in

View File

@ -103,11 +103,11 @@ ast::Builtin ident_to_builtin(const std::string& str) {
if (str == "position") { if (str == "position") {
return ast::Builtin::kPosition; return ast::Builtin::kPosition;
} }
if (str == "vertex_idx") { if (str == "vertex_idx" || str == "vertex_index") {
return ast::Builtin::kVertexIdx; return ast::Builtin::kVertexIndex;
} }
if (str == "instance_idx") { if (str == "instance_idx" || str == "instance_index") {
return ast::Builtin::kInstanceIdx; return ast::Builtin::kInstanceIndex;
} }
if (str == "front_facing") { if (str == "front_facing") {
return ast::Builtin::kFrontFacing; return ast::Builtin::kFrontFacing;
@ -121,8 +121,8 @@ ast::Builtin ident_to_builtin(const std::string& str) {
if (str == "local_invocation_id") { if (str == "local_invocation_id") {
return ast::Builtin::kLocalInvocationId; return ast::Builtin::kLocalInvocationId;
} }
if (str == "local_invocation_idx") { if (str == "local_invocation_idx" || str == "local_invocation_index") {
return ast::Builtin::kLocalInvocationIdx; return ast::Builtin::kLocalInvocationIndex;
} }
if (str == "global_invocation_id") { if (str == "global_invocation_id") {
return ast::Builtin::kGlobalInvocationId; return ast::Builtin::kGlobalInvocationId;

View File

@ -112,15 +112,20 @@ TEST_P(BuiltinTest, VariableDecoration_Builtin) {
INSTANTIATE_TEST_SUITE_P( INSTANTIATE_TEST_SUITE_P(
ParserImplTest, ParserImplTest,
BuiltinTest, BuiltinTest,
testing::Values( testing::Values(BuiltinData{"position", ast::Builtin::kPosition},
BuiltinData{"position", ast::Builtin::kPosition}, BuiltinData{"vertex_idx", ast::Builtin::kVertexIndex},
BuiltinData{"vertex_idx", ast::Builtin::kVertexIdx}, BuiltinData{"vertex_index", ast::Builtin::kVertexIndex},
BuiltinData{"instance_idx", ast::Builtin::kInstanceIdx}, BuiltinData{"instance_idx", ast::Builtin::kInstanceIndex},
BuiltinData{"instance_index", ast::Builtin::kInstanceIndex},
BuiltinData{"front_facing", ast::Builtin::kFrontFacing}, BuiltinData{"front_facing", ast::Builtin::kFrontFacing},
BuiltinData{"frag_coord", ast::Builtin::kFragCoord}, BuiltinData{"frag_coord", ast::Builtin::kFragCoord},
BuiltinData{"frag_depth", ast::Builtin::kFragDepth}, BuiltinData{"frag_depth", ast::Builtin::kFragDepth},
BuiltinData{"local_invocation_id", ast::Builtin::kLocalInvocationId}, BuiltinData{"local_invocation_id",
BuiltinData{"local_invocation_idx", ast::Builtin::kLocalInvocationIdx}, ast::Builtin::kLocalInvocationId},
BuiltinData{"local_invocation_idx",
ast::Builtin::kLocalInvocationIndex},
BuiltinData{"local_invocation_index",
ast::Builtin::kLocalInvocationIndex},
BuiltinData{"global_invocation_id", BuiltinData{"global_invocation_id",
ast::Builtin::kGlobalInvocationId})); ast::Builtin::kGlobalInvocationId}));

View File

@ -121,8 +121,8 @@ Transform::Output FirstIndexOffset::Run(ast::Module* in) {
} }
}; };
// Clone the AST, renaming the kVertexIdx and kInstanceIdx builtins, and add // Clone the AST, renaming the kVertexIndex and kInstanceIndex builtins, and
// a CreateFirstIndexOffset() statement to each function that uses one of // add a CreateFirstIndexOffset() statement to each function that uses one of
// these builtins. // these builtins.
Output out; Output out;
@ -132,13 +132,13 @@ Transform::Output FirstIndexOffset::Run(ast::Module* in) {
for (ast::VariableDecoration* dec : var->decorations()) { for (ast::VariableDecoration* dec : var->decorations()) {
if (auto* blt_dec = dec->As<ast::BuiltinDecoration>()) { if (auto* blt_dec = dec->As<ast::BuiltinDecoration>()) {
ast::Builtin blt_type = blt_dec->value(); ast::Builtin blt_type = blt_dec->value();
if (blt_type == ast::Builtin::kVertexIdx) { if (blt_type == ast::Builtin::kVertexIndex) {
vertex_index_sym = var->symbol(); vertex_index_sym = var->symbol();
has_vertex_index_ = true; has_vertex_index_ = true;
return clone_variable_with_new_name( return clone_variable_with_new_name(
ctx, var, ctx, var,
kIndexOffsetPrefix + in->SymbolToName(var->symbol())); kIndexOffsetPrefix + in->SymbolToName(var->symbol()));
} else if (blt_type == ast::Builtin::kInstanceIdx) { } else if (blt_type == ast::Builtin::kInstanceIndex) {
instance_index_sym = var->symbol(); instance_index_sym = var->symbol();
has_instance_index_ = true; has_instance_index_ = true;
return clone_variable_with_new_name( return clone_variable_with_new_name(
@ -160,11 +160,11 @@ Transform::Output FirstIndexOffset::Run(ast::Module* in) {
ast::StatementList statements; ast::StatementList statements;
for (const auto& data : for (const auto& data :
func->local_referenced_builtin_variables()) { func->local_referenced_builtin_variables()) {
if (data.second->value() == ast::Builtin::kVertexIdx) { if (data.second->value() == ast::Builtin::kVertexIndex) {
statements.emplace_back(CreateFirstIndexOffset( statements.emplace_back(CreateFirstIndexOffset(
in->SymbolToName(vertex_index_sym), kFirstVertexName, in->SymbolToName(vertex_index_sym), kFirstVertexName,
buffer_var, ctx->mod)); buffer_var, ctx->mod));
} else if (data.second->value() == ast::Builtin::kInstanceIdx) { } else if (data.second->value() == ast::Builtin::kInstanceIndex) {
statements.emplace_back(CreateFirstIndexOffset( statements.emplace_back(CreateFirstIndexOffset(
in->SymbolToName(instance_index_sym), kFirstInstanceName, in->SymbolToName(instance_index_sym), kFirstInstanceName,
buffer_var, ctx->mod)); buffer_var, ctx->mod));

View File

@ -26,7 +26,7 @@ namespace tint {
namespace transform { namespace transform {
/// Adds firstVertex/Instance (injected via root constants) to /// Adds firstVertex/Instance (injected via root constants) to
/// vertex/instance_idx builtins. /// vertex/instance index builtins.
/// ///
/// This transform assumes that Name transform has been run before. /// This transform assumes that Name transform has been run before.
/// ///

View File

@ -28,7 +28,7 @@ using FirstIndexOffsetTest = TransformTest;
TEST_F(FirstIndexOffsetTest, Error_AlreadyTransformed) { TEST_F(FirstIndexOffsetTest, Error_AlreadyTransformed) {
auto* src = R"( auto* src = R"(
[[builtin(vertex_idx)]] var<in> vert_idx : u32; [[builtin(vertex_index)]] var<in> vert_idx : u32;
fn test() -> u32 { fn test() -> u32 {
return vert_idx; return vert_idx;
@ -63,7 +63,7 @@ TEST_F(FirstIndexOffsetTest, EmptyModule) {
TEST_F(FirstIndexOffsetTest, BasicModuleVertexIndex) { TEST_F(FirstIndexOffsetTest, BasicModuleVertexIndex) {
auto* src = R"( auto* src = R"(
[[builtin(vertex_idx)]] var<in> vert_idx : u32; [[builtin(vertex_index)]] var<in> vert_idx : u32;
fn test() -> u32 { fn test() -> u32 {
return vert_idx; return vert_idx;
@ -82,7 +82,7 @@ struct TintFirstIndexOffsetData {
tint_first_vertex_index : u32; tint_first_vertex_index : u32;
}; };
[[builtin(vertex_idx)]] var<in> tint_first_index_offset_vert_idx : u32; [[builtin(vertex_index)]] var<in> tint_first_index_offset_vert_idx : u32;
[[binding(1), group(2)]] var<uniform> tint_first_index_data : TintFirstIndexOffsetData; [[binding(1), group(2)]] var<uniform> tint_first_index_data : TintFirstIndexOffsetData;
fn test() -> u32 { fn test() -> u32 {
@ -103,7 +103,7 @@ fn entry() -> void {
TEST_F(FirstIndexOffsetTest, BasicModuleInstanceIndex) { TEST_F(FirstIndexOffsetTest, BasicModuleInstanceIndex) {
auto* src = R"( auto* src = R"(
[[builtin(instance_idx)]] var<in> inst_idx : u32; [[builtin(instance_index)]] var<in> inst_idx : u32;
fn test() -> u32 { fn test() -> u32 {
return inst_idx; return inst_idx;
@ -122,7 +122,7 @@ struct TintFirstIndexOffsetData {
tint_first_instance_index : u32; tint_first_instance_index : u32;
}; };
[[builtin(instance_idx)]] var<in> tint_first_index_offset_inst_idx : u32; [[builtin(instance_index)]] var<in> tint_first_index_offset_inst_idx : u32;
[[binding(1), group(7)]] var<uniform> tint_first_index_data : TintFirstIndexOffsetData; [[binding(1), group(7)]] var<uniform> tint_first_index_data : TintFirstIndexOffsetData;
fn test() -> u32 { fn test() -> u32 {
@ -143,8 +143,8 @@ fn entry() -> void {
TEST_F(FirstIndexOffsetTest, BasicModuleBothIndex) { TEST_F(FirstIndexOffsetTest, BasicModuleBothIndex) {
auto* src = R"( auto* src = R"(
[[builtin(instance_idx)]] var<in> instance_idx : u32; [[builtin(instance_index)]] var<in> instance_idx : u32;
[[builtin(vertex_idx)]] var<in> vert_idx : u32; [[builtin(vertex_index)]] var<in> vert_idx : u32;
fn test() -> u32 { fn test() -> u32 {
return instance_idx + vert_idx; return instance_idx + vert_idx;
@ -165,8 +165,8 @@ struct TintFirstIndexOffsetData {
tint_first_instance_index : u32; tint_first_instance_index : u32;
}; };
[[builtin(instance_idx)]] var<in> tint_first_index_offset_instance_idx : u32; [[builtin(instance_index)]] var<in> tint_first_index_offset_instance_idx : u32;
[[builtin(vertex_idx)]] var<in> tint_first_index_offset_vert_idx : u32; [[builtin(vertex_index)]] var<in> tint_first_index_offset_vert_idx : u32;
[[binding(1), group(2)]] var<uniform> tint_first_index_data : TintFirstIndexOffsetData; [[binding(1), group(2)]] var<uniform> tint_first_index_data : TintFirstIndexOffsetData;
fn test() -> u32 { fn test() -> u32 {
@ -188,7 +188,7 @@ fn entry() -> void {
TEST_F(FirstIndexOffsetTest, NestedCalls) { TEST_F(FirstIndexOffsetTest, NestedCalls) {
auto* src = R"( auto* src = R"(
[[builtin(vertex_idx)]] var<in> vert_idx : u32; [[builtin(vertex_index)]] var<in> vert_idx : u32;
fn func1() -> u32 { fn func1() -> u32 {
return vert_idx; return vert_idx;
@ -211,7 +211,7 @@ struct TintFirstIndexOffsetData {
tint_first_vertex_index : u32; tint_first_vertex_index : u32;
}; };
[[builtin(vertex_idx)]] var<in> tint_first_index_offset_vert_idx : u32; [[builtin(vertex_index)]] var<in> tint_first_index_offset_vert_idx : u32;
[[binding(1), group(2)]] var<uniform> tint_first_index_data : TintFirstIndexOffsetData; [[binding(1), group(2)]] var<uniform> tint_first_index_data : TintFirstIndexOffsetData;
fn func1() -> u32 { fn func1() -> u32 {

View File

@ -158,7 +158,7 @@ void VertexPulling::State::FindOrInsertVertexIndexIfUsed() {
for (auto* d : v->decorations()) { for (auto* d : v->decorations()) {
if (auto* builtin = d->As<ast::BuiltinDecoration>()) { if (auto* builtin = d->As<ast::BuiltinDecoration>()) {
if (builtin->value() == ast::Builtin::kVertexIdx) { if (builtin->value() == ast::Builtin::kVertexIndex) {
vertex_index_name = in->SymbolToName(v->symbol()); vertex_index_name = in->SymbolToName(v->symbol());
return; return;
} }
@ -179,7 +179,7 @@ void VertexPulling::State::FindOrInsertVertexIndexIfUsed() {
ast::VariableDecorationList{ ast::VariableDecorationList{
// decorations // decorations
out->create<ast::BuiltinDecoration>(Source{}, out->create<ast::BuiltinDecoration>(Source{},
ast::Builtin::kVertexIdx), ast::Builtin::kVertexIndex),
}); });
out->AddGlobalVariable(var); out->AddGlobalVariable(var);
@ -205,7 +205,7 @@ void VertexPulling::State::FindOrInsertInstanceIndexIfUsed() {
for (auto* d : v->decorations()) { for (auto* d : v->decorations()) {
if (auto* builtin = d->As<ast::BuiltinDecoration>()) { if (auto* builtin = d->As<ast::BuiltinDecoration>()) {
if (builtin->value() == ast::Builtin::kInstanceIdx) { if (builtin->value() == ast::Builtin::kInstanceIndex) {
instance_index_name = in->SymbolToName(v->symbol()); instance_index_name = in->SymbolToName(v->symbol());
return; return;
} }
@ -226,7 +226,7 @@ void VertexPulling::State::FindOrInsertInstanceIndexIfUsed() {
ast::VariableDecorationList{ ast::VariableDecorationList{
// decorations // decorations
out->create<ast::BuiltinDecoration>(Source{}, out->create<ast::BuiltinDecoration>(Source{},
ast::Builtin::kInstanceIdx), ast::Builtin::kInstanceIndex),
}); });
out->AddGlobalVariable(var); out->AddGlobalVariable(var);
} }

View File

@ -191,10 +191,10 @@ class VertexPulling : public Transform {
/// @param index index to append to buffer name /// @param index index to append to buffer name
std::string GetVertexBufferName(uint32_t index) const; std::string GetVertexBufferName(uint32_t index) const;
/// Inserts vertex_idx binding, or finds the existing one /// Inserts vertex_index binding, or finds the existing one
void FindOrInsertVertexIndexIfUsed(); void FindOrInsertVertexIndexIfUsed();
/// Inserts instance_idx binding, or finds the existing one /// Inserts instance_index binding, or finds the existing one
void FindOrInsertInstanceIndexIfUsed(); void FindOrInsertInstanceIndexIfUsed();
/// Converts var<in> with a location decoration to var<private> /// Converts var<in> with a location decoration to var<private>

View File

@ -133,7 +133,7 @@ struct TintVertexData {
_tint_vertex_data : [[stride(4)]] array<u32>; _tint_vertex_data : [[stride(4)]] array<u32>;
}; };
[[builtin(vertex_idx)]] var<in> _tint_pulling_vertex_index : i32; [[builtin(vertex_index)]] var<in> _tint_pulling_vertex_index : i32;
[[binding(0), group(4)]] var<storage_buffer> _tint_pulling_vertex_buffer_0 : TintVertexData; [[binding(0), group(4)]] var<storage_buffer> _tint_pulling_vertex_buffer_0 : TintVertexData;
var<private> var_a : f32; var<private> var_a : f32;
@ -172,7 +172,7 @@ struct TintVertexData {
_tint_vertex_data : [[stride(4)]] array<u32>; _tint_vertex_data : [[stride(4)]] array<u32>;
}; };
[[builtin(instance_idx)]] var<in> _tint_pulling_instance_index : i32; [[builtin(instance_index)]] var<in> _tint_pulling_instance_index : i32;
[[binding(0), group(4)]] var<storage_buffer> _tint_pulling_vertex_buffer_0 : TintVertexData; [[binding(0), group(4)]] var<storage_buffer> _tint_pulling_vertex_buffer_0 : TintVertexData;
var<private> var_a : f32; var<private> var_a : f32;
@ -211,7 +211,7 @@ struct TintVertexData {
_tint_vertex_data : [[stride(4)]] array<u32>; _tint_vertex_data : [[stride(4)]] array<u32>;
}; };
[[builtin(vertex_idx)]] var<in> _tint_pulling_vertex_index : i32; [[builtin(vertex_index)]] var<in> _tint_pulling_vertex_index : i32;
[[binding(0), group(5)]] var<storage_buffer> _tint_pulling_vertex_buffer_0 : TintVertexData; [[binding(0), group(5)]] var<storage_buffer> _tint_pulling_vertex_buffer_0 : TintVertexData;
var<private> var_a : f32; var<private> var_a : f32;
@ -241,8 +241,8 @@ TEST_F(VertexPullingTest, ExistingVertexIndexAndInstanceIndex) {
auto* src = R"( auto* src = R"(
[[location(0)]] var<in> var_a : f32; [[location(0)]] var<in> var_a : f32;
[[location(1)]] var<in> var_b : f32; [[location(1)]] var<in> var_b : f32;
[[builtin(vertex_idx)]] var<in> custom_vertex_index : i32; [[builtin(vertex_index)]] var<in> custom_vertex_index : i32;
[[builtin(instance_idx)]] var<in> custom_instance_index : i32; [[builtin(instance_index)]] var<in> custom_instance_index : i32;
[[stage(vertex)]] [[stage(vertex)]]
fn main() -> void {} fn main() -> void {}
@ -259,8 +259,8 @@ struct TintVertexData {
[[binding(1), group(4)]] var<storage_buffer> _tint_pulling_vertex_buffer_1 : TintVertexData; [[binding(1), group(4)]] var<storage_buffer> _tint_pulling_vertex_buffer_1 : TintVertexData;
var<private> var_a : f32; var<private> var_a : f32;
var<private> var_b : f32; var<private> var_b : f32;
[[builtin(vertex_idx)]] var<in> custom_vertex_index : i32; [[builtin(vertex_index)]] var<in> custom_vertex_index : i32;
[[builtin(instance_idx)]] var<in> custom_instance_index : i32; [[builtin(instance_index)]] var<in> custom_instance_index : i32;
[[stage(vertex)]] [[stage(vertex)]]
fn main() -> void { fn main() -> void {
@ -301,7 +301,7 @@ struct TintVertexData {
_tint_vertex_data : [[stride(4)]] array<u32>; _tint_vertex_data : [[stride(4)]] array<u32>;
}; };
[[builtin(vertex_idx)]] var<in> _tint_pulling_vertex_index : i32; [[builtin(vertex_index)]] var<in> _tint_pulling_vertex_index : i32;
[[binding(0), group(4)]] var<storage_buffer> _tint_pulling_vertex_buffer_0 : TintVertexData; [[binding(0), group(4)]] var<storage_buffer> _tint_pulling_vertex_buffer_0 : TintVertexData;
var<private> var_a : f32; var<private> var_a : f32;
var<private> var_b : array<f32, 4>; var<private> var_b : array<f32, 4>;
@ -347,7 +347,7 @@ struct TintVertexData {
_tint_vertex_data : [[stride(4)]] array<u32>; _tint_vertex_data : [[stride(4)]] array<u32>;
}; };
[[builtin(vertex_idx)]] var<in> _tint_pulling_vertex_index : i32; [[builtin(vertex_index)]] var<in> _tint_pulling_vertex_index : i32;
[[binding(0), group(4)]] var<storage_buffer> _tint_pulling_vertex_buffer_0 : TintVertexData; [[binding(0), group(4)]] var<storage_buffer> _tint_pulling_vertex_buffer_0 : TintVertexData;
[[binding(1), group(4)]] var<storage_buffer> _tint_pulling_vertex_buffer_1 : TintVertexData; [[binding(1), group(4)]] var<storage_buffer> _tint_pulling_vertex_buffer_1 : TintVertexData;
[[binding(2), group(4)]] var<storage_buffer> _tint_pulling_vertex_buffer_2 : TintVertexData; [[binding(2), group(4)]] var<storage_buffer> _tint_pulling_vertex_buffer_2 : TintVertexData;

View File

@ -1609,9 +1609,9 @@ std::string GeneratorImpl::builtin_to_attribute(ast::Builtin builtin) const {
switch (builtin) { switch (builtin) {
case ast::Builtin::kPosition: case ast::Builtin::kPosition:
return "SV_Position"; return "SV_Position";
case ast::Builtin::kVertexIdx: case ast::Builtin::kVertexIndex:
return "SV_VertexID"; return "SV_VertexID";
case ast::Builtin::kInstanceIdx: case ast::Builtin::kInstanceIndex:
return "SV_InstanceID"; return "SV_InstanceID";
case ast::Builtin::kFrontFacing: case ast::Builtin::kFrontFacing:
return "SV_IsFrontFacing"; return "SV_IsFrontFacing";
@ -1621,7 +1621,7 @@ std::string GeneratorImpl::builtin_to_attribute(ast::Builtin builtin) const {
return "SV_Depth"; return "SV_Depth";
case ast::Builtin::kLocalInvocationId: case ast::Builtin::kLocalInvocationId:
return "SV_GroupThreadID"; return "SV_GroupThreadID";
case ast::Builtin::kLocalInvocationIdx: case ast::Builtin::kLocalInvocationIndex:
return "SV_GroupIndex"; return "SV_GroupIndex";
case ast::Builtin::kGlobalInvocationId: case ast::Builtin::kGlobalInvocationId:
return "SV_DispatchThreadID"; return "SV_DispatchThreadID";

View File

@ -77,13 +77,13 @@ INSTANTIATE_TEST_SUITE_P(
HlslBuiltinConversionTest, HlslBuiltinConversionTest,
testing::Values( testing::Values(
HlslBuiltinData{ast::Builtin::kPosition, "SV_Position"}, HlslBuiltinData{ast::Builtin::kPosition, "SV_Position"},
HlslBuiltinData{ast::Builtin::kVertexIdx, "SV_VertexID"}, HlslBuiltinData{ast::Builtin::kVertexIndex, "SV_VertexID"},
HlslBuiltinData{ast::Builtin::kInstanceIdx, "SV_InstanceID"}, HlslBuiltinData{ast::Builtin::kInstanceIndex, "SV_InstanceID"},
HlslBuiltinData{ast::Builtin::kFrontFacing, "SV_IsFrontFacing"}, HlslBuiltinData{ast::Builtin::kFrontFacing, "SV_IsFrontFacing"},
HlslBuiltinData{ast::Builtin::kFragCoord, "SV_Position"}, HlslBuiltinData{ast::Builtin::kFragCoord, "SV_Position"},
HlslBuiltinData{ast::Builtin::kFragDepth, "SV_Depth"}, HlslBuiltinData{ast::Builtin::kFragDepth, "SV_Depth"},
HlslBuiltinData{ast::Builtin::kLocalInvocationId, "SV_GroupThreadID"}, HlslBuiltinData{ast::Builtin::kLocalInvocationId, "SV_GroupThreadID"},
HlslBuiltinData{ast::Builtin::kLocalInvocationIdx, "SV_GroupIndex"}, HlslBuiltinData{ast::Builtin::kLocalInvocationIndex, "SV_GroupIndex"},
HlslBuiltinData{ast::Builtin::kGlobalInvocationId, HlslBuiltinData{ast::Builtin::kGlobalInvocationId,
"SV_DispatchThreadID"})); "SV_DispatchThreadID"}));

View File

@ -1396,9 +1396,9 @@ std::string GeneratorImpl::builtin_to_attribute(ast::Builtin builtin) const {
switch (builtin) { switch (builtin) {
case ast::Builtin::kPosition: case ast::Builtin::kPosition:
return "position"; return "position";
case ast::Builtin::kVertexIdx: case ast::Builtin::kVertexIndex:
return "vertex_id"; return "vertex_id";
case ast::Builtin::kInstanceIdx: case ast::Builtin::kInstanceIndex:
return "instance_id"; return "instance_id";
case ast::Builtin::kFrontFacing: case ast::Builtin::kFrontFacing:
return "front_facing"; return "front_facing";
@ -1408,7 +1408,7 @@ std::string GeneratorImpl::builtin_to_attribute(ast::Builtin builtin) const {
return "depth(any)"; return "depth(any)";
case ast::Builtin::kLocalInvocationId: case ast::Builtin::kLocalInvocationId:
return "thread_position_in_threadgroup"; return "thread_position_in_threadgroup";
case ast::Builtin::kLocalInvocationIdx: case ast::Builtin::kLocalInvocationIndex:
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";

View File

@ -99,14 +99,14 @@ INSTANTIATE_TEST_SUITE_P(
MslGeneratorImplTest, MslGeneratorImplTest,
MslBuiltinConversionTest, MslBuiltinConversionTest,
testing::Values(MslBuiltinData{ast::Builtin::kPosition, "position"}, testing::Values(MslBuiltinData{ast::Builtin::kPosition, "position"},
MslBuiltinData{ast::Builtin::kVertexIdx, "vertex_id"}, MslBuiltinData{ast::Builtin::kVertexIndex, "vertex_id"},
MslBuiltinData{ast::Builtin::kInstanceIdx, "instance_id"}, MslBuiltinData{ast::Builtin::kInstanceIndex, "instance_id"},
MslBuiltinData{ast::Builtin::kFrontFacing, "front_facing"}, MslBuiltinData{ast::Builtin::kFrontFacing, "front_facing"},
MslBuiltinData{ast::Builtin::kFragCoord, "position"}, MslBuiltinData{ast::Builtin::kFragCoord, "position"},
MslBuiltinData{ast::Builtin::kFragDepth, "depth(any)"}, MslBuiltinData{ast::Builtin::kFragDepth, "depth(any)"},
MslBuiltinData{ast::Builtin::kLocalInvocationId, MslBuiltinData{ast::Builtin::kLocalInvocationId,
"thread_position_in_threadgroup"}, "thread_position_in_threadgroup"},
MslBuiltinData{ast::Builtin::kLocalInvocationIdx, MslBuiltinData{ast::Builtin::kLocalInvocationIndex,
"thread_index_in_threadgroup"}, "thread_index_in_threadgroup"},
MslBuiltinData{ast::Builtin::kGlobalInvocationId, MslBuiltinData{ast::Builtin::kGlobalInvocationId,
"thread_position_in_grid"})); "thread_position_in_grid"}));

View File

@ -3132,9 +3132,9 @@ SpvBuiltIn Builder::ConvertBuiltin(ast::Builtin builtin) const {
switch (builtin) { switch (builtin) {
case ast::Builtin::kPosition: case ast::Builtin::kPosition:
return SpvBuiltInPosition; return SpvBuiltInPosition;
case ast::Builtin::kVertexIdx: case ast::Builtin::kVertexIndex:
return SpvBuiltInVertexIndex; return SpvBuiltInVertexIndex;
case ast::Builtin::kInstanceIdx: case ast::Builtin::kInstanceIndex:
return SpvBuiltInInstanceIndex; return SpvBuiltInInstanceIndex;
case ast::Builtin::kFrontFacing: case ast::Builtin::kFrontFacing:
return SpvBuiltInFrontFacing; return SpvBuiltInFrontFacing;
@ -3144,7 +3144,7 @@ SpvBuiltIn Builder::ConvertBuiltin(ast::Builtin builtin) const {
return SpvBuiltInFragDepth; return SpvBuiltInFragDepth;
case ast::Builtin::kLocalInvocationId: case ast::Builtin::kLocalInvocationId:
return SpvBuiltInLocalInvocationId; return SpvBuiltInLocalInvocationId;
case ast::Builtin::kLocalInvocationIdx: case ast::Builtin::kLocalInvocationIndex:
return SpvBuiltInLocalInvocationIndex; return SpvBuiltInLocalInvocationIndex;
case ast::Builtin::kGlobalInvocationId: case ast::Builtin::kGlobalInvocationId:
return SpvBuiltInGlobalInvocationId; return SpvBuiltInGlobalInvocationId;

View File

@ -360,16 +360,16 @@ INSTANTIATE_TEST_SUITE_P(
BuiltinData{ast::Builtin::kNone, SpvBuiltInMax}, BuiltinData{ast::Builtin::kNone, SpvBuiltInMax},
BuiltinData{ast::Builtin::kPosition, SpvBuiltInPosition}, BuiltinData{ast::Builtin::kPosition, SpvBuiltInPosition},
BuiltinData{ BuiltinData{
ast::Builtin::kVertexIdx, ast::Builtin::kVertexIndex,
SpvBuiltInVertexIndex, SpvBuiltInVertexIndex,
}, },
BuiltinData{ast::Builtin::kInstanceIdx, SpvBuiltInInstanceIndex}, BuiltinData{ast::Builtin::kInstanceIndex, SpvBuiltInInstanceIndex},
BuiltinData{ast::Builtin::kFrontFacing, SpvBuiltInFrontFacing}, BuiltinData{ast::Builtin::kFrontFacing, SpvBuiltInFrontFacing},
BuiltinData{ast::Builtin::kFragCoord, SpvBuiltInFragCoord}, BuiltinData{ast::Builtin::kFragCoord, SpvBuiltInFragCoord},
BuiltinData{ast::Builtin::kFragDepth, SpvBuiltInFragDepth}, BuiltinData{ast::Builtin::kFragDepth, SpvBuiltInFragDepth},
BuiltinData{ast::Builtin::kLocalInvocationId, BuiltinData{ast::Builtin::kLocalInvocationId,
SpvBuiltInLocalInvocationId}, SpvBuiltInLocalInvocationId},
BuiltinData{ast::Builtin::kLocalInvocationIdx, BuiltinData{ast::Builtin::kLocalInvocationIndex,
SpvBuiltInLocalInvocationIndex}, SpvBuiltInLocalInvocationIndex},
BuiltinData{ast::Builtin::kGlobalInvocationId, BuiltinData{ast::Builtin::kGlobalInvocationId,
SpvBuiltInGlobalInvocationId})); SpvBuiltInGlobalInvocationId}));

View File

@ -19,7 +19,7 @@ const pos : array<vec2<f32>, 3> = array<vec2<f32>, 3>(
vec2<f32>(0.5, -0.5)); vec2<f32>(0.5, -0.5));
[[builtin(position)]] var<out> Position : vec4<f32>; [[builtin(position)]] var<out> Position : vec4<f32>;
[[builtin(vertex_idx)]] var<in> VertexIndex : i32; [[builtin(vertex_index)]] var<in> VertexIndex : i32;
[[stage(vertex)]] [[stage(vertex)]]
fn vtx_main() -> void { fn vtx_main() -> void {