primitive_id -> primitive_index
Update the name of the primitive_id feature to primitive_index based on
final name decided on by the working group. The old
chromium-experimental-primitive-id feature is kept around temporarily to
assist in rolling into Chrome but should be removed soon as it's
unlikely that any Dawn users have begun using this version of the
feature.
Using No-Presubmit to avoid a bug with Tint presubmit checks and
renaming a symbol. See https://issues.chromium.org/u/1/issues/440321534
Bug: 342172182
Change-Id: Ifa73188eee044b234ce6cfb9479608cbae25bd61
No-Presubmit: true
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/257695
Reviewed-by: dan sinclair <dsinclair@chromium.org>
Commit-Queue: Brandon Jones <bajones@chromium.org>
diff --git a/src/dawn/dawn.json b/src/dawn/dawn.json
index 868cda2..630039c 100644
--- a/src/dawn/dawn.json
+++ b/src/dawn/dawn.json
@@ -2330,6 +2330,7 @@
{"value": 18, "name": "subgroups"},
{"value": 19, "name": "texture formats tier1"},
{"value": 20, "name": "texture formats tier2"},
+ {"value": 21, "name": "primitive index"},
{"value": 0, "name": "dawn internal usages", "tags": ["dawn"]},
{"value": 1, "name": "dawn multi planar formats", "tags": ["dawn"]},
diff --git a/src/dawn/native/Device.cpp b/src/dawn/native/Device.cpp
index 010849d..0aa28c3 100644
--- a/src/dawn/native/Device.cpp
+++ b/src/dawn/native/Device.cpp
@@ -1732,9 +1732,9 @@
mWGSLAllowedFeatures.extensions.insert(
tint::wgsl::Extension::kChromiumExperimentalSubgroupMatrix);
}
- if (mEnabledFeatures.IsEnabled(Feature::ChromiumExperimentalPrimitiveId)) {
- mWGSLAllowedFeatures.extensions.insert(
- tint::wgsl::Extension::kChromiumExperimentalPrimitiveId);
+ if (mEnabledFeatures.IsEnabled(Feature::PrimitiveIndex) ||
+ mEnabledFeatures.IsEnabled(Feature::ChromiumExperimentalPrimitiveId)) {
+ mWGSLAllowedFeatures.extensions.insert(tint::wgsl::Extension::kPrimitiveIndex);
}
// Language features are enabled instance-wide.
diff --git a/src/dawn/native/Features.cpp b/src/dawn/native/Features.cpp
index b85e8e9..7885c90 100644
--- a/src/dawn/native/Features.cpp
+++ b/src/dawn/native/Features.cpp
@@ -430,10 +430,13 @@
"dawn_device_allocator_control.md",
FeatureInfo::FeatureState::Experimental}},
{Feature::ChromiumExperimentalPrimitiveId,
- {"Supports the \"enable chromium_experimental_primitive_id;\" directive in WGSL",
- "https://dawn.googlesource.com/dawn/+/refs/heads/main/docs/tint/extensions/"
- "chromium_experimental_primitive_id.md",
+ {"(Deprecated) Supports the \"enable primitive_index;\" directive in WGSL",
+ "https://gpuweb.github.io/gpuweb/#dom-gpufeaturename-primitive-index",
FeatureInfo::FeatureState::Experimental}},
+ {Feature::PrimitiveIndex,
+ {"Supports the \"enable primitive_index;\" directive in WGSL",
+ "https://gpuweb.github.io/gpuweb/#dom-gpufeaturename-primitive-index",
+ FeatureInfo::FeatureState::Stable}},
{Feature::ChromiumExperimentalBindless,
{"Experimental support for the prototype of a bindless extension",
"https://hackmd.io/@kangz/bindless-proposal", FeatureInfo::FeatureState::Experimental}}};
diff --git a/src/dawn/native/d3d11/PhysicalDeviceD3D11.cpp b/src/dawn/native/d3d11/PhysicalDeviceD3D11.cpp
index 2801402..540bccc 100644
--- a/src/dawn/native/d3d11/PhysicalDeviceD3D11.cpp
+++ b/src/dawn/native/d3d11/PhysicalDeviceD3D11.cpp
@@ -162,7 +162,7 @@
EnableFeature(Feature::DawnPartialLoadResolveTexture);
EnableFeature(Feature::RG11B10UfloatRenderable);
EnableFeature(Feature::TextureFormatsTier1);
- EnableFeature(Feature::ChromiumExperimentalPrimitiveId);
+ EnableFeature(Feature::PrimitiveIndex);
if (mDeviceInfo.isUMA && mDeviceInfo.supportsMapNoOverwriteDynamicBuffers) {
// With UMA we should allow mapping usages on more type of buffers.
diff --git a/src/dawn/native/d3d12/PhysicalDeviceD3D12.cpp b/src/dawn/native/d3d12/PhysicalDeviceD3D12.cpp
index e6ed307..6e66189 100644
--- a/src/dawn/native/d3d12/PhysicalDeviceD3D12.cpp
+++ b/src/dawn/native/d3d12/PhysicalDeviceD3D12.cpp
@@ -175,7 +175,7 @@
EnableFeature(Feature::FlexibleTextureViews);
EnableFeature(Feature::TextureFormatsTier1);
EnableFeature(Feature::TextureComponentSwizzle);
- EnableFeature(Feature::ChromiumExperimentalPrimitiveId);
+ EnableFeature(Feature::PrimitiveIndex);
EnableFeature(Feature::DawnLoadResolveTexture);
EnableFeature(Feature::DawnPartialLoadResolveTexture);
diff --git a/src/dawn/native/metal/PhysicalDeviceMTL.mm b/src/dawn/native/metal/PhysicalDeviceMTL.mm
index b657a02..4d3306b 100644
--- a/src/dawn/native/metal/PhysicalDeviceMTL.mm
+++ b/src/dawn/native/metal/PhysicalDeviceMTL.mm
@@ -700,7 +700,7 @@
EnableFeature(Feature::ChromiumExperimentalSubgroupMatrix);
// TODO(342172182): This may be available in more places?
// (mwyrzykowski says "Apple7 and all Macs")
- EnableFeature(Feature::ChromiumExperimentalPrimitiveId);
+ EnableFeature(Feature::PrimitiveIndex);
}
EnableFeature(Feature::SharedTextureMemoryIOSurface);
diff --git a/src/dawn/native/vulkan/DeviceVk.cpp b/src/dawn/native/vulkan/DeviceVk.cpp
index b24fcda7..d18e123 100644
--- a/src/dawn/native/vulkan/DeviceVk.cpp
+++ b/src/dawn/native/vulkan/DeviceVk.cpp
@@ -547,7 +547,7 @@
usedKnobs.features.depthClamp = VK_TRUE;
}
- if (HasFeature(Feature::ChromiumExperimentalPrimitiveId)) {
+ if (HasFeature(Feature::PrimitiveIndex)) {
DAWN_ASSERT(mDeviceInfo.features.geometryShader == VK_TRUE);
usedKnobs.features.geometryShader = VK_TRUE;
}
diff --git a/src/dawn/native/vulkan/PhysicalDeviceVk.cpp b/src/dawn/native/vulkan/PhysicalDeviceVk.cpp
index 64cc3b4..d582776 100644
--- a/src/dawn/native/vulkan/PhysicalDeviceVk.cpp
+++ b/src/dawn/native/vulkan/PhysicalDeviceVk.cpp
@@ -333,10 +333,10 @@
EnableFeature(Feature::ClipDistances);
}
- // primitive_id is currently exposed if we support geometry shaders.
+ // primitive_index is currently exposed if we support geometry shaders.
// TODO(342172182): We could also potentially use tessellation or mesh shaders.
if (mDeviceInfo.features.geometryShader == VK_TRUE) {
- EnableFeature(Feature::ChromiumExperimentalPrimitiveId);
+ EnableFeature(Feature::PrimitiveIndex);
}
bool shaderF16Enabled = false;
diff --git a/src/dawn/node/binding/Converter.cpp b/src/dawn/node/binding/Converter.cpp
index 2bf2711..758cd11 100644
--- a/src/dawn/node/binding/Converter.cpp
+++ b/src/dawn/node/binding/Converter.cpp
@@ -1628,7 +1628,8 @@
out = wgpu::FeatureName::TextureComponentSwizzle;
return true;
case interop::GPUFeatureName::kChromiumExperimentalPrimitiveId:
- out = wgpu::FeatureName::ChromiumExperimentalPrimitiveId;
+ case interop::GPUFeatureName::kPrimitiveIndex:
+ out = wgpu::FeatureName::PrimitiveIndex;
return true;
}
return false;
@@ -1664,7 +1665,7 @@
CASE(TextureFormatsTier1, kTextureFormatsTier1);
CASE(TextureFormatsTier2, kTextureFormatsTier2);
CASE(TextureComponentSwizzle, kTextureComponentSwizzle);
- CASE(ChromiumExperimentalPrimitiveId, kChromiumExperimentalPrimitiveId);
+ CASE(PrimitiveIndex, kPrimitiveIndex);
#undef CASE
@@ -1724,6 +1725,7 @@
case wgpu::FeatureName::DawnTexelCopyBufferRowAlignment:
case wgpu::FeatureName::FlexibleTextureViews:
case wgpu::FeatureName::ChromiumExperimentalBindless:
+ case wgpu::FeatureName::ChromiumExperimentalPrimitiveId:
return false;
}
return false;
diff --git a/src/dawn/node/interop/DawnExtensions.idl b/src/dawn/node/interop/DawnExtensions.idl
index 3e69eea..701aa1a 100644
--- a/src/dawn/node/interop/DawnExtensions.idl
+++ b/src/dawn/node/interop/DawnExtensions.idl
@@ -33,6 +33,7 @@
"chromium-experimental-subgroup-matrix",
"texture-component-swizzle",
"chromium-experimental-primitive-id",
+ "primitive-index",
};
enum GPUSubgroupMatrixComponentType {
diff --git a/src/dawn/tests/BUILD.gn b/src/dawn/tests/BUILD.gn
index fb04c69..dafc5d6 100644
--- a/src/dawn/tests/BUILD.gn
+++ b/src/dawn/tests/BUILD.gn
@@ -659,7 +659,7 @@
"end2end/PipelineLayoutTests.cpp",
"end2end/PixelLocalStorageTests.cpp",
"end2end/PolyfillBuiltinSimpleTests.cpp",
- "end2end/PrimitiveIdTests.cpp",
+ "end2end/PrimitiveIndexTests.cpp",
"end2end/PrimitiveStateTests.cpp",
"end2end/PrimitiveTopologyTests.cpp",
"end2end/QueryTests.cpp",
diff --git a/src/dawn/tests/end2end/PrimitiveIdTests.cpp b/src/dawn/tests/end2end/PrimitiveIndexTests.cpp
similarity index 82%
rename from src/dawn/tests/end2end/PrimitiveIdTests.cpp
rename to src/dawn/tests/end2end/PrimitiveIndexTests.cpp
index 904c7ca..e1c9446 100644
--- a/src/dawn/tests/end2end/PrimitiveIdTests.cpp
+++ b/src/dawn/tests/end2end/PrimitiveIndexTests.cpp
@@ -37,13 +37,12 @@
constexpr uint32_t kRTSize = 16;
constexpr wgpu::TextureFormat kFormat = wgpu::TextureFormat::RGBA8Unorm;
-constexpr wgpu::FeatureName kPrimitiveIdFeature =
- wgpu::FeatureName::ChromiumExperimentalPrimitiveId;
+constexpr wgpu::FeatureName kPrimitiveIndexFeature = wgpu::FeatureName::PrimitiveIndex;
-using RequirePrimitiveIdFeature = bool;
-DAWN_TEST_PARAM_STRUCT(PrimitiveIdTestsParams, RequirePrimitiveIdFeature);
+using RequirePrimitiveIndexFeature = bool;
+DAWN_TEST_PARAM_STRUCT(PrimitiveIndexTestsParams, RequirePrimitiveIndexFeature);
-class PrimitiveIdTests : public DawnTestWithParams<PrimitiveIdTestsParams> {
+class PrimitiveIndexTests : public DawnTestWithParams<PrimitiveIndexTestsParams> {
public:
wgpu::Texture CreateDefault2DTexture() {
wgpu::TextureDescriptor descriptor;
@@ -60,32 +59,32 @@
protected:
std::vector<wgpu::FeatureName> GetRequiredFeatures() override {
- mIsPrimitiveIdSupportedOnAdapter = SupportsFeatures({kPrimitiveIdFeature});
- if (!mIsPrimitiveIdSupportedOnAdapter) {
+ mIsPrimitiveIndexSupportedOnAdapter = SupportsFeatures({kPrimitiveIndexFeature});
+ if (!mIsPrimitiveIndexSupportedOnAdapter) {
return {};
}
- if (GetParam().mRequirePrimitiveIdFeature) {
- return {kPrimitiveIdFeature};
+ if (GetParam().mRequirePrimitiveIndexFeature) {
+ return {kPrimitiveIndexFeature};
}
return {};
}
- bool IsPrimitiveIdSupportedOnAdapter() const { return mIsPrimitiveIdSupportedOnAdapter; }
+ bool IsPrimitiveIndexSupportedOnAdapter() const { return mIsPrimitiveIndexSupportedOnAdapter; }
private:
- bool mIsPrimitiveIdSupportedOnAdapter = false;
+ bool mIsPrimitiveIndexSupportedOnAdapter = false;
};
-// Test simple primitive ID within shader with enable directive. The result should be as expected if
-// the device enables the extension, otherwise a shader creation error should be caught.
-TEST_P(PrimitiveIdTests, BasicPrimitiveIdFeaturesTest) {
+// Test simple primitive index within shader with enable directive. The result should be as expected
+// if the device enables the extension, otherwise a shader creation error should be caught.
+TEST_P(PrimitiveIndexTests, BasicPrimitiveIndexFeaturesTest) {
// Skip if device doesn't support the extension.
- DAWN_TEST_UNSUPPORTED_IF(!device.HasFeature(kPrimitiveIdFeature));
+ DAWN_TEST_UNSUPPORTED_IF(!device.HasFeature(kPrimitiveIndexFeature));
const char* shader = R"(
-enable chromium_experimental_primitive_id;
+enable primitive_index;
@vertex
fn VSMain(@builtin(vertex_index) VertexIndex : u32) -> @builtin(position) vec4f {
@@ -105,8 +104,8 @@
);
@fragment
-fn FSMain(@builtin(primitive_id) pid : u32) -> @location(0) vec4f {
- // Select a color based on the primitive ID
+fn FSMain(@builtin(primitive_index) pid : u32) -> @location(0) vec4f {
+ // Select a color based on the primitive index
return vec4f(colorId[pid%5], 1.0);
})";
@@ -162,7 +161,7 @@
}
// DawnTestBase::CreateDeviceImpl always enables allow_unsafe_apis toggle.
-DAWN_INSTANTIATE_TEST_P(PrimitiveIdTests,
+DAWN_INSTANTIATE_TEST_P(PrimitiveIndexTests,
{
D3D11Backend(),
D3D12Backend(),
diff --git a/src/dawn/tests/unittests/validation/ShaderModuleValidationTests.cpp b/src/dawn/tests/unittests/validation/ShaderModuleValidationTests.cpp
index b6458d4..e92b212 100644
--- a/src/dawn/tests/unittests/validation/ShaderModuleValidationTests.cpp
+++ b/src/dawn/tests/unittests/validation/ShaderModuleValidationTests.cpp
@@ -877,12 +877,12 @@
{"clip_distances", false, {"clip-distances"}, {}},
{"dual_source_blending", false, {"dual-source-blending"}, {}},
{"subgroups", false, {"subgroups"}, {}},
+ {"primitive_index", false, {"primitive-index"}, {}},
{"chromium_experimental_pixel_local", true, {"pixel-local-storage-coherent"}, {}},
{"chromium_disable_uniformity_analysis", true, {}, {}},
{"chromium_internal_graphite", true, {}, {}},
{"chromium_experimental_framebuffer_fetch", true, {"framebuffer-fetch"}, {}},
{"chromium_experimental_subgroup_matrix", true, {"chromium-experimental-subgroup-matrix"}, {}},
- {"chromium_experimental_primitive_id", true, {"chromium-experimental-primitive-id"}, {}},
// Currently the following WGSL extensions are not enabled under any situation.
/*
diff --git a/src/dawn/wire/SupportedFeatures.cpp b/src/dawn/wire/SupportedFeatures.cpp
index 01643e4..7014887 100644
--- a/src/dawn/wire/SupportedFeatures.cpp
+++ b/src/dawn/wire/SupportedFeatures.cpp
@@ -123,6 +123,7 @@
case WGPUFeatureName_TextureComponentSwizzle:
case WGPUFeatureName_ChromiumExperimentalPrimitiveId:
case WGPUFeatureName_ChromiumExperimentalBindless:
+ case WGPUFeatureName_PrimitiveIndex:
return true;
}
diff --git a/src/tint/cmd/bench/enums_core_bench.cc b/src/tint/cmd/bench/enums_core_bench.cc
index 3c283ca..25cb055 100644
--- a/src/tint/cmd/bench/enums_core_bench.cc
+++ b/src/tint/cmd/bench/enums_core_bench.cc
@@ -1063,13 +1063,13 @@
"AAUUs1timm",
"XosAftion",
"posVVvvn",
- "pprimitive_id",
- "primitiTTe_id",
- "krimijjive_i00",
- "primitive_id",
- "primtive_id",
- "rimitiveyyid",
- "prYYzztive_id",
+ "pprimitive_index",
+ "primitive_TTndex",
+ "prkmitivjj_inde00",
+ "primitive_index",
+ "primitie_index",
+ "rimitive_inyyex",
+ "pzzimitive_ideYY",
"siWmple_Wndex",
"6a70UU_index",
"sale_indUUx",
diff --git a/src/tint/cmd/bench/enums_wgsl_bench.cc b/src/tint/cmd/bench/enums_wgsl_bench.cc
index 66a213c..b58f451 100644
--- a/src/tint/cmd/bench/enums_wgsl_bench.cc
+++ b/src/tint/cmd/bench/enums_wgsl_bench.cc
@@ -138,55 +138,55 @@
"chromffum_expeKmentG_pixel_local",
"chromiuq_KKxperimental_pixel_local",
"chromium_eFpe3imental_mmixel_local",
- "chromium_experimenal_primitive_id",
- "chromium_experieqtal_primitive_id",
- "chromium_experimbntal_prbbmitve_id",
- "chromium_experimental_primitive_id",
- "chromiumexpermental_primitive_iid",
- "chromiOO_experimental_primqtive_id",
- "chroTTium_experimental_privvitive_id",
- "chromium_experimental_subgrouFF_matrix",
- "chromifm_experimenta00PsubgroQp_mtrix",
- "chromium_experPmental_subgroup_matrix",
+ "chromium_experimental_subgroup_mtrix",
+ "chromium_experimental_subgoqp_matrix",
+ "chromium_ebperimental_subgroub_matrix",
"chromium_experimental_subgroup_matrix",
- "cssomium_experimental_subgroup_mat77ix",
- "chromium_exbberimenCal_subgroup_mRRtrix",
- "chromium_experimental_subgroup_mXXtrix",
- "chromium_inqerOCCal_OOaphite",
- "chrmium_Lntesnal_guaphite",
- "chromium_internal_gXaphite",
+ "ciiomim_experimental_subgroup_matrix",
+ "chromOOum_experimeqtal_subgroup_matix",
+ "chrovvium_experimentalTTsubgroup_matrix",
+ "chromium_internal_grapFFite",
+ "chromPumQintenal_g00aphfte",
+ "chromium_iPternal_graphite",
"chromium_internal_graphite",
- "cromium_internal_graphite",
- "chromiOm_inerqqal_gahite",
- "chr22mium_internal_graphite",
- "chzzomium0inteXXny_input_attachments",
- "chromium_internalVVinpP_aitachments",
- "chnnomium_internalCinput_attachmnts",
+ "hromium_interna77s_graphite",
+ "chromium_iRRtCrnal_graphbbte",
+ "chromium_internal_graphXXte",
+ "chOOomOCCum_interna_iqput_attachments",
+ "chosium_iuternal_input_attachmentL",
+ "chromium_internXl_input_attachments",
"chromium_internal_input_attachments",
- "chrHHmim_inqqernalinput_attachmentAA",
- "chromium_internal_input_attchments",
- "chromiuf_internal_input_KKachments",
- "clipditaPcggs",
- "clip_istances",
- "4lip_disTTaNcec",
+ "chromium_internal_input_attachmets",
+ "chomium_interna_input_tOachmenqqs",
+ "chromium_internal_i22put_attachments",
+ "clip_is0yzzceXX",
+ "clip_ditaVPies",
+ "clp_distnnnCes",
"clip_distances",
- "cli_distpp7lces",
- "cgzip_dstancNs",
- "uulip_bitanXXes",
- "dual_soure_blending",
- "dualsoQrce_bled88nK",
- "dual_souce_blend9qg",
+ "clip_disqanceHA",
+ "clip_dstances",
+ "flidistKKnces",
+ "dul_sourceggbPnding",
+ "dua_source_blending",
+ "duNl_sourcec4lenTTing",
"dual_source_blending",
- "dual_source_bl11nding",
- "Fuaii_source_bl22ding",
- "dual_soure_b77ending",
- "NN6",
- "VV16",
- "Fw11W",
+ "dual_sppurce_blendin7",
+ "dul_zzgurce_NNlendig",
+ "bXXual_suuurce_bnding",
+ "f6",
+ "88",
+ "9q",
"f16",
- "ww6",
- "fD6",
- "fK",
+ "f116",
+ "f122",
+ "776",
+ "primitNN2e_indx",
+ "primitVVve_index",
+ "FrimiWWive_inw11x",
+ "primitive_index",
+ "primitvewwindex",
+ "pDimitive_index",
+ "primitiv_indeK",
"sub11PPfrph",
"subgroup",
"suYYgroups",
diff --git a/src/tint/cmd/fuzz/wgsl/dictionary.txt b/src/tint/cmd/fuzz/wgsl/dictionary.txt
index b1b05db..08b5d8d 100644
--- a/src/tint/cmd/fuzz/wgsl/dictionary.txt
+++ b/src/tint/cmd/fuzz/wgsl/dictionary.txt
@@ -165,7 +165,6 @@
"chromium_experimental_framebuffer_fetch"
"chromium_experimental_immediate"
"chromium_experimental_pixel_local"
-"chromium_experimental_primitive_id"
"chromium_experimental_subgroup_matrix"
"chromium_internal_graphite"
"chromium_internal_input_attachments"
@@ -337,7 +336,7 @@
"pointer_composite_access"
"position"
"pow"
-"primitive_id"
+"primitive_index"
"print"
"private"
"ptr"
diff --git a/src/tint/lang/core/core.def b/src/tint/lang/core/core.def
index a078ea6..07e94ec 100644
--- a/src/tint/lang/core/core.def
+++ b/src/tint/lang/core/core.def
@@ -65,8 +65,8 @@
subgroup_id
subgroup_invocation_id
subgroup_size
- primitive_id
barycentric_coord
+ primitive_index
@internal __point_size
@internal __cull_distance
}
diff --git a/src/tint/lang/core/enums.cc b/src/tint/lang/core/enums.cc
index 83d1bb4..29dcb46 100644
--- a/src/tint/lang/core/enums.cc
+++ b/src/tint/lang/core/enums.cc
@@ -997,8 +997,8 @@
if (str == "position") {
return BuiltinValue::kPosition;
}
- if (str == "primitive_id") {
- return BuiltinValue::kPrimitiveId;
+ if (str == "primitive_index") {
+ return BuiltinValue::kPrimitiveIndex;
}
if (str == "sample_index") {
return BuiltinValue::kSampleIndex;
@@ -1051,8 +1051,8 @@
return "num_workgroups";
case BuiltinValue::kPosition:
return "position";
- case BuiltinValue::kPrimitiveId:
- return "primitive_id";
+ case BuiltinValue::kPrimitiveIndex:
+ return "primitive_index";
case BuiltinValue::kSampleIndex:
return "sample_index";
case BuiltinValue::kSampleMask:
diff --git a/src/tint/lang/core/enums.h b/src/tint/lang/core/enums.h
index 7a0e114..9cfe4f2 100644
--- a/src/tint/lang/core/enums.h
+++ b/src/tint/lang/core/enums.h
@@ -538,7 +538,7 @@
kLocalInvocationIndex,
kNumWorkgroups,
kPosition,
- kPrimitiveId,
+ kPrimitiveIndex,
kSampleIndex,
kSampleMask,
kSubgroupId,
@@ -577,7 +577,7 @@
"local_invocation_index",
"num_workgroups",
"position",
- "primitive_id",
+ "primitive_index",
"sample_index",
"sample_mask",
"subgroup_id",
diff --git a/src/tint/lang/core/enums_test.cc b/src/tint/lang/core/enums_test.cc
index 0a971b5..7020fcd 100644
--- a/src/tint/lang/core/enums_test.cc
+++ b/src/tint/lang/core/enums_test.cc
@@ -884,7 +884,7 @@
{"local_invocation_index", BuiltinValue::kLocalInvocationIndex},
{"num_workgroups", BuiltinValue::kNumWorkgroups},
{"position", BuiltinValue::kPosition},
- {"primitive_id", BuiltinValue::kPrimitiveId},
+ {"primitive_index", BuiltinValue::kPrimitiveIndex},
{"sample_index", BuiltinValue::kSampleIndex},
{"sample_mask", BuiltinValue::kSampleMask},
{"subgroup_id", BuiltinValue::kSubgroupId},
@@ -925,9 +925,9 @@
{"pnnsition", BuiltinValue::kUndefined},
{"HositkkZ22n", BuiltinValue::kUndefined},
{"positio", BuiltinValue::kUndefined},
- {"primRiveid", BuiltinValue::kUndefined},
- {"primi99ivqq_id", BuiltinValue::kUndefined},
- {"p77imitive_id", BuiltinValue::kUndefined},
+ {"pimitRve_idex", BuiltinValue::kUndefined},
+ {"primiqqive_inde99", BuiltinValue::kUndefined},
+ {"prim77tive_index", BuiltinValue::kUndefined},
{"samp3_inde", BuiltinValue::kUndefined},
{"ccamle_iuudex", BuiltinValue::kUndefined},
{"ampRRe_inde1", BuiltinValue::kUndefined},
diff --git a/src/tint/lang/core/ir/binary/decode.cc b/src/tint/lang/core/ir/binary/decode.cc
index ec37693..414fbde 100644
--- a/src/tint/lang/core/ir/binary/decode.cc
+++ b/src/tint/lang/core/ir/binary/decode.cc
@@ -1608,8 +1608,8 @@
return core::BuiltinValue::kWorkgroupId;
case pb::BuiltinValue::clip_distances:
return core::BuiltinValue::kClipDistances;
- case pb::BuiltinValue::primitive_id:
- return core::BuiltinValue::kPrimitiveId;
+ case pb::BuiltinValue::primitive_index:
+ return core::BuiltinValue::kPrimitiveIndex;
case pb::BuiltinValue::barycentric_coord:
return core::BuiltinValue::kBarycentricCoord;
case pb::BuiltinValue::BuiltinValue_INT_MIN_SENTINEL_DO_NOT_USE_:
diff --git a/src/tint/lang/core/ir/binary/encode.cc b/src/tint/lang/core/ir/binary/encode.cc
index e9a75d4..fc43034 100644
--- a/src/tint/lang/core/ir/binary/encode.cc
+++ b/src/tint/lang/core/ir/binary/encode.cc
@@ -1082,8 +1082,8 @@
return pb::BuiltinValue::workgroup_id;
case core::BuiltinValue::kClipDistances:
return pb::BuiltinValue::clip_distances;
- case core::BuiltinValue::kPrimitiveId:
- return pb::BuiltinValue::primitive_id;
+ case core::BuiltinValue::kPrimitiveIndex:
+ return pb::BuiltinValue::primitive_index;
case core::BuiltinValue::kBarycentricCoord:
return pb::BuiltinValue::barycentric_coord;
case core::BuiltinValue::kUndefined:
diff --git a/src/tint/lang/core/ir/validator.cc b/src/tint/lang/core/ir/validator.cc
index 7c1340a..f3e2491 100644
--- a/src/tint/lang/core/ir/validator.cc
+++ b/src/tint/lang/core/ir/validator.cc
@@ -463,13 +463,13 @@
/* type_error */ "workgroup_id must be an vec3<u32>",
};
-constexpr BuiltinChecker kPrimitiveIdChecker{
- /* name */ "primitive_id",
+constexpr BuiltinChecker kPrimitiveIndexChecker{
+ /* name */ "primitive_index",
/* stages */ EnumSet<Function::PipelineStage>(Function::PipelineStage::kFragment),
/* direction */ BuiltinChecker::IODirection::kInput,
/* type_check */
[](const core::type::Type* ty) -> bool { return ty->Is<core::type::U32>(); },
- /* type_error */ "primitive_id must be an u32",
+ /* type_error */ "primitive_index must be an u32",
};
constexpr BuiltinChecker kBarycentricCoordChecker{
@@ -516,8 +516,8 @@
return kVertexIndexChecker;
case BuiltinValue::kWorkgroupId:
return kWorkgroupIdChecker;
- case BuiltinValue::kPrimitiveId:
- return kPrimitiveIdChecker;
+ case BuiltinValue::kPrimitiveIndex:
+ return kPrimitiveIndexChecker;
case BuiltinValue::kBarycentricCoord:
return kBarycentricCoordChecker;
case BuiltinValue::kPosition:
diff --git a/src/tint/lang/glsl/writer/printer/printer.cc b/src/tint/lang/glsl/writer/printer/printer.cc
index 15888df..350b69f 100644
--- a/src/tint/lang/glsl/writer/printer/printer.cc
+++ b/src/tint/lang/glsl/writer/printer/printer.cc
@@ -1985,7 +1985,7 @@
}
case core::BuiltinValue::kPointSize:
return "gl_PointSize";
- case core::BuiltinValue::kPrimitiveId:
+ case core::BuiltinValue::kPrimitiveIndex:
if (options_.version.IsES() && options_.version.major_version == 3 &&
options_.version.minor_version == 1) {
EmitExtension(kEXTGeometryShader);
diff --git a/src/tint/lang/glsl/writer/raise/shader_io.cc b/src/tint/lang/glsl/writer/raise/shader_io.cc
index a02c334..4b980aa 100644
--- a/src/tint/lang/glsl/writer/raise/shader_io.cc
+++ b/src/tint/lang/glsl/writer/raise/shader_io.cc
@@ -87,7 +87,7 @@
break;
case core::BuiltinValue::kVertexIndex:
case core::BuiltinValue::kInstanceIndex:
- case core::BuiltinValue::kPrimitiveId:
+ case core::BuiltinValue::kPrimitiveIndex:
case core::BuiltinValue::kSampleIndex:
ptr = ty.ptr(addrspace, ty.i32(), access);
break;
@@ -149,7 +149,7 @@
switch (builtin.value()) {
case core::BuiltinValue::kVertexIndex:
case core::BuiltinValue::kInstanceIndex:
- case core::BuiltinValue::kPrimitiveId:
+ case core::BuiltinValue::kPrimitiveIndex:
case core::BuiltinValue::kSampleIndex: {
// GLSL uses i32 for these, so convert to u32.
value = builder.Convert(ty.u32(), value)->Result();
diff --git a/src/tint/lang/hlsl/writer/printer/printer.cc b/src/tint/lang/hlsl/writer/printer/printer.cc
index 17a7910..8bc1929 100644
--- a/src/tint/lang/hlsl/writer/printer/printer.cc
+++ b/src/tint/lang/hlsl/writer/printer/printer.cc
@@ -1689,7 +1689,7 @@
return "SV_SampleIndex";
case core::BuiltinValue::kSampleMask:
return "SV_Coverage";
- case core::BuiltinValue::kPrimitiveId:
+ case core::BuiltinValue::kPrimitiveIndex:
return "SV_PrimitiveId";
case core::BuiltinValue::kBarycentricCoord:
return "SV_Barycentrics";
diff --git a/src/tint/lang/hlsl/writer/raise/shader_io.cc b/src/tint/lang/hlsl/writer/raise/shader_io.cc
index 427707e..02068a4 100644
--- a/src/tint/lang/hlsl/writer/raise/shader_io.cc
+++ b/src/tint/lang/hlsl/writer/raise/shader_io.cc
@@ -116,7 +116,7 @@
return 13;
case core::BuiltinValue::kClipDistances:
return 14;
- case core::BuiltinValue::kPrimitiveId:
+ case core::BuiltinValue::kPrimitiveIndex:
return 15;
case core::BuiltinValue::kBarycentricCoord:
return 16;
diff --git a/src/tint/lang/msl/writer/common/printer_support.cc b/src/tint/lang/msl/writer/common/printer_support.cc
index 642fdb0..027482f 100644
--- a/src/tint/lang/msl/writer/common/printer_support.cc
+++ b/src/tint/lang/msl/writer/common/printer_support.cc
@@ -81,7 +81,7 @@
return "threads_per_simdgroup";
case core::BuiltinValue::kClipDistances:
return "clip_distance";
- case core::BuiltinValue::kPrimitiveId:
+ case core::BuiltinValue::kPrimitiveIndex:
return "primitive_id";
case core::BuiltinValue::kBarycentricCoord:
return "barycentric_coord";
diff --git a/src/tint/lang/msl/writer/common/printer_support_test.cc b/src/tint/lang/msl/writer/common/printer_support_test.cc
index 6a9657f..e78c376 100644
--- a/src/tint/lang/msl/writer/common/printer_support_test.cc
+++ b/src/tint/lang/msl/writer/common/printer_support_test.cc
@@ -65,7 +65,7 @@
MslBuiltinData{core::BuiltinValue::kSampleIndex, "sample_id"},
MslBuiltinData{core::BuiltinValue::kSampleMask, "sample_mask"},
MslBuiltinData{core::BuiltinValue::kPointSize, "point_size"},
- MslBuiltinData{core::BuiltinValue::kPrimitiveId, "primitive_id"},
+ MslBuiltinData{core::BuiltinValue::kPrimitiveIndex, "primitive_id"},
MslBuiltinData{core::BuiltinValue::kBarycentricCoord, "barycentric_coord"}));
} // namespace
diff --git a/src/tint/lang/spirv/reader/parser/parser.cc b/src/tint/lang/spirv/reader/parser/parser.cc
index d79879a..401dc13 100644
--- a/src/tint/lang/spirv/reader/parser/parser.cc
+++ b/src/tint/lang/spirv/reader/parser/parser.cc
@@ -634,7 +634,7 @@
case spv::BuiltIn::CullDistance:
return core::BuiltinValue::kCullDistance;
case spv::BuiltIn::PrimitiveId:
- return core::BuiltinValue::kPrimitiveId;
+ return core::BuiltinValue::kPrimitiveIndex;
default:
TINT_UNIMPLEMENTED() << "unhandled SPIR-V BuiltIn: " << static_cast<uint32_t>(b);
}
diff --git a/src/tint/lang/spirv/reader/parser/var_test.cc b/src/tint/lang/spirv/reader/parser/var_test.cc
index 235516d..9d26c01 100644
--- a/src/tint/lang/spirv/reader/parser/var_test.cc
+++ b/src/tint/lang/spirv/reader/parser/var_test.cc
@@ -3362,7 +3362,7 @@
)");
}
-TEST_F(SpirvParserTest, PrimitiveId) {
+TEST_F(SpirvParserTest, PrimitiveIndex) {
EXPECT_IR(R"(
OpCapability Shader
OpCapability Geometry
@@ -3404,7 +3404,7 @@
)",
R"(
$B1: { # root
- %main_primitive_id_Input:ptr<__in, u32, read> = var undef @builtin(primitive_id)
+ %main_primitive_id_Input:ptr<__in, u32, read> = var undef @builtin(primitive_index)
%main_loc0_Output:ptr<__out, vec4<f32>, read_write> = var undef @location(0)
}
diff --git a/src/tint/lang/spirv/writer/printer/printer.cc b/src/tint/lang/spirv/writer/printer/printer.cc
index 8d3882b..534d93e 100644
--- a/src/tint/lang/spirv/writer/printer/printer.cc
+++ b/src/tint/lang/spirv/writer/printer/printer.cc
@@ -399,7 +399,7 @@
case core::BuiltinValue::kClipDistances:
module_.PushCapability(SpvCapabilityClipDistance);
return SpvBuiltInClipDistance;
- case core::BuiltinValue::kPrimitiveId:
+ case core::BuiltinValue::kPrimitiveIndex:
// TODO(dsinclair): This can be others, but use geometry for now.
module_.PushCapability(SpvCapabilityGeometry);
return SpvBuiltInPrimitiveId;
diff --git a/src/tint/lang/wgsl/enums.cc b/src/tint/lang/wgsl/enums.cc
index 710f259..37a5cbb 100644
--- a/src/tint/lang/wgsl/enums.cc
+++ b/src/tint/lang/wgsl/enums.cc
@@ -61,9 +61,6 @@
if (str == "chromium_experimental_pixel_local") {
return Extension::kChromiumExperimentalPixelLocal;
}
- if (str == "chromium_experimental_primitive_id") {
- return Extension::kChromiumExperimentalPrimitiveId;
- }
if (str == "chromium_experimental_subgroup_matrix") {
return Extension::kChromiumExperimentalSubgroupMatrix;
}
@@ -82,6 +79,9 @@
if (str == "f16") {
return Extension::kF16;
}
+ if (str == "primitive_index") {
+ return Extension::kPrimitiveIndex;
+ }
if (str == "subgroups") {
return Extension::kSubgroups;
}
@@ -101,8 +101,6 @@
return "chromium_experimental_immediate";
case Extension::kChromiumExperimentalPixelLocal:
return "chromium_experimental_pixel_local";
- case Extension::kChromiumExperimentalPrimitiveId:
- return "chromium_experimental_primitive_id";
case Extension::kChromiumExperimentalSubgroupMatrix:
return "chromium_experimental_subgroup_matrix";
case Extension::kChromiumInternalGraphite:
@@ -115,6 +113,8 @@
return "dual_source_blending";
case Extension::kF16:
return "f16";
+ case Extension::kPrimitiveIndex:
+ return "primitive_index";
case Extension::kSubgroups:
return "subgroups";
}
diff --git a/src/tint/lang/wgsl/enums.h b/src/tint/lang/wgsl/enums.h
index 4e6a33e..5195320 100644
--- a/src/tint/lang/wgsl/enums.h
+++ b/src/tint/lang/wgsl/enums.h
@@ -118,13 +118,13 @@
kChromiumExperimentalFramebufferFetch,
kChromiumExperimentalImmediate,
kChromiumExperimentalPixelLocal,
- kChromiumExperimentalPrimitiveId,
kChromiumExperimentalSubgroupMatrix,
kChromiumInternalGraphite,
kChromiumInternalInputAttachments,
kClipDistances,
kDualSourceBlending,
kF16,
+ kPrimitiveIndex,
kSubgroups,
};
@@ -152,13 +152,13 @@
"chromium_experimental_framebuffer_fetch",
"chromium_experimental_immediate",
"chromium_experimental_pixel_local",
- "chromium_experimental_primitive_id",
"chromium_experimental_subgroup_matrix",
"chromium_internal_graphite",
"chromium_internal_input_attachments",
"clip_distances",
"dual_source_blending",
"f16",
+ "primitive_index",
"subgroups",
};
@@ -169,13 +169,13 @@
Extension::kChromiumExperimentalFramebufferFetch,
Extension::kChromiumExperimentalImmediate,
Extension::kChromiumExperimentalPixelLocal,
- Extension::kChromiumExperimentalPrimitiveId,
Extension::kChromiumExperimentalSubgroupMatrix,
Extension::kChromiumInternalGraphite,
Extension::kChromiumInternalInputAttachments,
Extension::kClipDistances,
Extension::kDualSourceBlending,
Extension::kF16,
+ Extension::kPrimitiveIndex,
Extension::kSubgroups,
};
diff --git a/src/tint/lang/wgsl/enums_test.cc b/src/tint/lang/wgsl/enums_test.cc
index 7ed5855..7ce886b 100644
--- a/src/tint/lang/wgsl/enums_test.cc
+++ b/src/tint/lang/wgsl/enums_test.cc
@@ -231,13 +231,13 @@
{"chromium_experimental_framebuffer_fetch", Extension::kChromiumExperimentalFramebufferFetch},
{"chromium_experimental_immediate", Extension::kChromiumExperimentalImmediate},
{"chromium_experimental_pixel_local", Extension::kChromiumExperimentalPixelLocal},
- {"chromium_experimental_primitive_id", Extension::kChromiumExperimentalPrimitiveId},
{"chromium_experimental_subgroup_matrix", Extension::kChromiumExperimentalSubgroupMatrix},
{"chromium_internal_graphite", Extension::kChromiumInternalGraphite},
{"chromium_internal_input_attachments", Extension::kChromiumInternalInputAttachments},
{"clip_distances", Extension::kClipDistances},
{"dual_source_blending", Extension::kDualSourceBlending},
{"f16", Extension::kF16},
+ {"primitive_index", Extension::kPrimitiveIndex},
{"subgroups", Extension::kSubgroups},
};
@@ -257,27 +257,27 @@
{"chromium_experimentjl_pixel_local", Extension::kUndefined},
{"chroium_experimental_pixel_local", Extension::kUndefined},
{"cromium_qxperimental_pixl_local", Extension::kUndefined},
- {"chromium_experimental_priNNitiv_id", Extension::kUndefined},
- {"chroim_expvvrimental_primitive_id", Extension::kUndefined},
- {"chromium_experimental_pQQimitie_id", Extension::kUndefined},
- {"hromium_exprimertal_subgroup_ffatrix", Extension::kUndefined},
- {"chromium_ejperimental_subgroup_matrix", Extension::kUndefined},
- {"chromium_expewim8n2al_subgroupNNmatrix", Extension::kUndefined},
- {"chromium_internl_graphite", Extension::kUndefined},
- {"chromium_irrternal_graphite", Extension::kUndefined},
- {"cGromium_internal_graphite", Extension::kUndefined},
- {"chromium_internal_input_attFFchments", Extension::kUndefined},
- {"chromium_iEteral_input_attahment", Extension::kUndefined},
- {"chrmium_internal_inprrt_attachments", Extension::kUndefined},
- {"lip_distanes", Extension::kUndefined},
- {"DXp_diJJtances", Extension::kUndefined},
- {"cl8pdistane", Extension::kUndefined},
- {"dul_okrc_blen11ing", Extension::kUndefined},
- {"dua_source_blending", Extension::kUndefined},
- {"duJl_source_blendig", Extension::kUndefined},
- {"c16", Extension::kUndefined},
- {"fO6", Extension::kUndefined},
- {"_KKttvv", Extension::kUndefined},
+ {"chromium_experimental_sNbgroup_matrix", Extension::kUndefined},
+ {"chromium_exprimenta_suvvgroup_matrix", Extension::kUndefined},
+ {"chromium_experimentaQQ_sbgroup_matrix", Extension::kUndefined},
+ {"chroium_ffnternal_grahire", Extension::kUndefined},
+ {"chromium_internal_grjphite", Extension::kUndefined},
+ {"chromum_inwwerna2_grapNNite", Extension::kUndefined},
+ {"chromium_internalinput_attachments", Extension::kUndefined},
+ {"crrromium_internal_input_attachments", Extension::kUndefined},
+ {"Ghromium_internal_input_attachments", Extension::kUndefined},
+ {"clip_distanceFF", Extension::kUndefined},
+ {"cEipdtances", Extension::kUndefined},
+ {"cli_rristances", Extension::kUndefined},
+ {"dual_suce_blending", Extension::kUndefined},
+ {"dul_DoXrcJJ_blending", Extension::kUndefined},
+ {"dul_source_lening", Extension::kUndefined},
+ {"k", Extension::kUndefined},
+ {"16", Extension::kUndefined},
+ {"J1", Extension::kUndefined},
+ {"primitive_incex", Extension::kUndefined},
+ {"pOimitive_index", Extension::kUndefined},
+ {"__rimiKKitte_indevv", Extension::kUndefined},
{"xubgro5p8", Extension::kUndefined},
{"suFq__ups", Extension::kUndefined},
{"sqqgroups", Extension::kUndefined},
diff --git a/src/tint/lang/wgsl/reader/parser/enable_directive_test.cc b/src/tint/lang/wgsl/reader/parser/enable_directive_test.cc
index 77decec..f8e2b5b 100644
--- a/src/tint/lang/wgsl/reader/parser/enable_directive_test.cc
+++ b/src/tint/lang/wgsl/reader/parser/enable_directive_test.cc
@@ -175,7 +175,7 @@
// Error when unknown extension found
EXPECT_TRUE(p->has_error());
EXPECT_EQ(p->error(), R"(1:8: expected extension
-Possible values: 'clip_distances', 'dual_source_blending', 'f16', 'subgroups')");
+Possible values: 'clip_distances', 'dual_source_blending', 'f16', 'primitive_index', 'subgroups')");
auto program = p->program();
auto& ast = program.AST();
EXPECT_EQ(ast.Enables().Length(), 0u);
@@ -189,7 +189,7 @@
EXPECT_TRUE(p->has_error());
EXPECT_EQ(p->error(), R"(1:8: expected extension
Did you mean 'f16'?
-Possible values: 'clip_distances', 'dual_source_blending', 'f16', 'subgroups')");
+Possible values: 'clip_distances', 'dual_source_blending', 'f16', 'primitive_index', 'subgroups')");
auto program = p->program();
auto& ast = program.AST();
EXPECT_EQ(ast.Enables().Length(), 0u);
@@ -203,7 +203,7 @@
// Error when unknown extension found
EXPECT_TRUE(p->has_error());
EXPECT_EQ(p->error(), R"(1:8: expected extension
-Possible values: 'chromium_disable_uniformity_analysis', 'chromium_experimental_barycentric_coord', 'chromium_experimental_framebuffer_fetch', 'chromium_experimental_immediate', 'chromium_experimental_pixel_local', 'chromium_experimental_primitive_id', 'chromium_experimental_subgroup_matrix', 'chromium_internal_graphite', 'chromium_internal_input_attachments', 'clip_distances', 'dual_source_blending', 'f16', 'subgroups')");
+Possible values: 'chromium_disable_uniformity_analysis', 'chromium_experimental_barycentric_coord', 'chromium_experimental_framebuffer_fetch', 'chromium_experimental_immediate', 'chromium_experimental_pixel_local', 'chromium_experimental_subgroup_matrix', 'chromium_internal_graphite', 'chromium_internal_input_attachments', 'clip_distances', 'dual_source_blending', 'f16', 'primitive_index', 'subgroups')");
auto program = p->program();
auto& ast = program.AST();
EXPECT_EQ(ast.Enables().Length(), 0u);
@@ -251,7 +251,7 @@
p->translation_unit();
EXPECT_TRUE(p->has_error());
EXPECT_EQ(p->error(), R"(1:8: expected extension
-Possible values: 'clip_distances', 'dual_source_blending', 'f16', 'subgroups')");
+Possible values: 'clip_distances', 'dual_source_blending', 'f16', 'primitive_index', 'subgroups')");
auto program = p->program();
auto& ast = program.AST();
EXPECT_EQ(ast.Enables().Length(), 0u);
@@ -262,7 +262,7 @@
p->translation_unit();
EXPECT_TRUE(p->has_error());
EXPECT_EQ(p->error(), R"(1:8: expected extension
-Possible values: 'clip_distances', 'dual_source_blending', 'f16', 'subgroups')");
+Possible values: 'clip_distances', 'dual_source_blending', 'f16', 'primitive_index', 'subgroups')");
auto program = p->program();
auto& ast = program.AST();
EXPECT_EQ(ast.Enables().Length(), 0u);
@@ -274,7 +274,7 @@
EXPECT_TRUE(p->has_error());
EXPECT_EQ(p->error(), R"(1:8: expected extension
Did you mean 'f16'?
-Possible values: 'clip_distances', 'dual_source_blending', 'f16', 'subgroups')");
+Possible values: 'clip_distances', 'dual_source_blending', 'f16', 'primitive_index', 'subgroups')");
auto program = p->program();
auto& ast = program.AST();
EXPECT_EQ(ast.Enables().Length(), 0u);
diff --git a/src/tint/lang/wgsl/reader/parser/variable_attribute_test.cc b/src/tint/lang/wgsl/reader/parser/variable_attribute_test.cc
index 7b4f8a9..36cdb0c 100644
--- a/src/tint/lang/wgsl/reader/parser/variable_attribute_test.cc
+++ b/src/tint/lang/wgsl/reader/parser/variable_attribute_test.cc
@@ -307,7 +307,7 @@
EXPECT_EQ(attr.value, nullptr);
EXPECT_TRUE(p->has_error());
EXPECT_EQ(p->error(), R"(1:9: expected builtin value name
-Possible values: 'barycentric_coord', 'clip_distances', 'frag_depth', 'front_facing', 'global_invocation_id', 'instance_index', 'local_invocation_id', 'local_invocation_index', 'num_workgroups', 'position', 'primitive_id', 'sample_index', 'sample_mask', 'subgroup_id', 'subgroup_invocation_id', 'subgroup_size', 'vertex_index', 'workgroup_id')");
+Possible values: 'barycentric_coord', 'clip_distances', 'frag_depth', 'front_facing', 'global_invocation_id', 'instance_index', 'local_invocation_id', 'local_invocation_index', 'num_workgroups', 'position', 'primitive_index', 'sample_index', 'sample_mask', 'subgroup_id', 'subgroup_invocation_id', 'subgroup_size', 'vertex_index', 'workgroup_id')");
}
TEST_F(WGSLParserTest, Attribute_Builtin_MisspelledValue) {
@@ -319,7 +319,7 @@
EXPECT_TRUE(p->has_error());
EXPECT_EQ(p->error(), R"(1:9: expected builtin value name
Did you mean 'position'?
-Possible values: 'barycentric_coord', 'clip_distances', 'frag_depth', 'front_facing', 'global_invocation_id', 'instance_index', 'local_invocation_id', 'local_invocation_index', 'num_workgroups', 'position', 'primitive_id', 'sample_index', 'sample_mask', 'subgroup_id', 'subgroup_invocation_id', 'subgroup_size', 'vertex_index', 'workgroup_id')");
+Possible values: 'barycentric_coord', 'clip_distances', 'frag_depth', 'front_facing', 'global_invocation_id', 'instance_index', 'local_invocation_id', 'local_invocation_index', 'num_workgroups', 'position', 'primitive_index', 'sample_index', 'sample_mask', 'subgroup_id', 'subgroup_invocation_id', 'subgroup_size', 'vertex_index', 'workgroup_id')");
}
TEST_F(WGSLParserTest, Attribute_Interpolate_Flat) {
diff --git a/src/tint/lang/wgsl/resolver/BUILD.bazel b/src/tint/lang/wgsl/resolver/BUILD.bazel
index de8010a..cb5763b 100644
--- a/src/tint/lang/wgsl/resolver/BUILD.bazel
+++ b/src/tint/lang/wgsl/resolver/BUILD.bazel
@@ -139,7 +139,7 @@
"materialize_test.cc",
"override_test.cc",
"pixel_local_extension_test.cc",
- "primitive_id_extension_test.cc",
+ "primitive_index_extension_test.cc",
"ptr_ref_test.cc",
"ptr_ref_validation_test.cc",
"resolver_behavior_test.cc",
diff --git a/src/tint/lang/wgsl/resolver/BUILD.cmake b/src/tint/lang/wgsl/resolver/BUILD.cmake
index 3022b37..8bb3e62 100644
--- a/src/tint/lang/wgsl/resolver/BUILD.cmake
+++ b/src/tint/lang/wgsl/resolver/BUILD.cmake
@@ -140,7 +140,7 @@
lang/wgsl/resolver/materialize_test.cc
lang/wgsl/resolver/override_test.cc
lang/wgsl/resolver/pixel_local_extension_test.cc
- lang/wgsl/resolver/primitive_id_extension_test.cc
+ lang/wgsl/resolver/primitive_index_extension_test.cc
lang/wgsl/resolver/ptr_ref_test.cc
lang/wgsl/resolver/ptr_ref_validation_test.cc
lang/wgsl/resolver/resolver_behavior_test.cc
diff --git a/src/tint/lang/wgsl/resolver/BUILD.gn b/src/tint/lang/wgsl/resolver/BUILD.gn
index b204c23..760f86d 100644
--- a/src/tint/lang/wgsl/resolver/BUILD.gn
+++ b/src/tint/lang/wgsl/resolver/BUILD.gn
@@ -140,7 +140,7 @@
"materialize_test.cc",
"override_test.cc",
"pixel_local_extension_test.cc",
- "primitive_id_extension_test.cc",
+ "primitive_index_extension_test.cc",
"ptr_ref_test.cc",
"ptr_ref_validation_test.cc",
"resolver_behavior_test.cc",
diff --git a/src/tint/lang/wgsl/resolver/primitive_id_extension_test.cc b/src/tint/lang/wgsl/resolver/primitive_index_extension_test.cc
similarity index 71%
rename from src/tint/lang/wgsl/resolver/primitive_id_extension_test.cc
rename to src/tint/lang/wgsl/resolver/primitive_index_extension_test.cc
index aa4520c..d5a1426 100644
--- a/src/tint/lang/wgsl/resolver/primitive_id_extension_test.cc
+++ b/src/tint/lang/wgsl/resolver/primitive_index_extension_test.cc
@@ -36,64 +36,65 @@
namespace {
-using ResolverPrimitiveIdExtensionTest = ResolverTest;
+using ResolverPrimitiveIndexExtensionTest = ResolverTest;
-TEST_F(ResolverPrimitiveIdExtensionTest, UsePrimitiveIdWithoutExtensionError) {
+TEST_F(ResolverPrimitiveIndexExtensionTest, UsePrimitiveIndexWithoutExtensionError) {
Structure("Inputs",
Vector{
- Member("a", ty.u32(), Vector{Builtin(core::BuiltinValue::kPrimitiveId)}),
+ Member("a", ty.u32(), Vector{Builtin(core::BuiltinValue::kPrimitiveIndex)}),
});
EXPECT_FALSE(r()->Resolve());
EXPECT_EQ(
r()->error(),
- R"(error: use of '@builtin(primitive_id)' requires enabling extension 'chromium_experimental_primitive_id')");
+ R"(error: use of '@builtin(primitive_index)' requires enabling extension 'primitive_index')");
}
-TEST_F(ResolverPrimitiveIdExtensionTest, UsePrimitiveIdWithExtension) {
- Enable(wgsl::Extension::kChromiumExperimentalPrimitiveId);
+TEST_F(ResolverPrimitiveIndexExtensionTest, UsePrimitiveIndexWithExtension) {
+ Enable(wgsl::Extension::kPrimitiveIndex);
Structure("Inputs",
Vector{
- Member("a", ty.u32(), Vector{Builtin(core::BuiltinValue::kPrimitiveId)}),
+ Member("a", ty.u32(), Vector{Builtin(core::BuiltinValue::kPrimitiveIndex)}),
});
EXPECT_TRUE(r()->Resolve()) << r()->error();
}
-TEST_F(ResolverPrimitiveIdExtensionTest, PrimitiveIdI32Error) {
- Enable(wgsl::Extension::kChromiumExperimentalPrimitiveId);
+TEST_F(ResolverPrimitiveIndexExtensionTest, PrimitiveIndexI32Error) {
+ Enable(wgsl::Extension::kPrimitiveIndex);
Structure("Inputs",
Vector{
- Member("a", ty.i32(), Vector{Builtin(core::BuiltinValue::kPrimitiveId)}),
+ Member("a", ty.i32(), Vector{Builtin(core::BuiltinValue::kPrimitiveIndex)}),
});
EXPECT_FALSE(r()->Resolve());
- EXPECT_EQ(r()->error(), "error: store type of '@builtin(primitive_id)' must be 'u32'");
+ EXPECT_EQ(r()->error(), "error: store type of '@builtin(primitive_index)' must be 'u32'");
}
-TEST_F(ResolverPrimitiveIdExtensionTest, PrimitiveIdVertexShader) {
- Enable(wgsl::Extension::kChromiumExperimentalPrimitiveId);
- Func("main", Vector{Param("pi", ty.u32(), Vector{Builtin(core::BuiltinValue::kPrimitiveId)})},
+TEST_F(ResolverPrimitiveIndexExtensionTest, PrimitiveIndexVertexShader) {
+ Enable(wgsl::Extension::kPrimitiveIndex);
+ Func("main",
+ Vector{Param("pi", ty.u32(), Vector{Builtin(core::BuiltinValue::kPrimitiveIndex)})},
ty.void_(), Empty, Vector{Stage(ast::PipelineStage::kVertex)});
EXPECT_FALSE(r()->Resolve());
EXPECT_EQ(r()->error(),
- "error: '@builtin(primitive_id)' cannot be used for vertex shader input");
+ "error: '@builtin(primitive_index)' cannot be used for vertex shader input");
}
-TEST_F(ResolverPrimitiveIdExtensionTest, PrimitiveIdFragmentShaderOutput) {
- Enable(wgsl::Extension::kChromiumExperimentalPrimitiveId);
+TEST_F(ResolverPrimitiveIndexExtensionTest, PrimitiveIndexFragmentShaderOutput) {
+ Enable(wgsl::Extension::kPrimitiveIndex);
Func("main", tint::Empty, ty.u32(),
Vector{
Return(Call<u32>()),
},
Vector{Stage(ast::PipelineStage::kFragment)},
- Vector{Builtin(Source{{1, 2}}, core::BuiltinValue::kPrimitiveId)});
+ Vector{Builtin(Source{{1, 2}}, core::BuiltinValue::kPrimitiveIndex)});
EXPECT_FALSE(r()->Resolve());
EXPECT_EQ(r()->error(),
- "1:2 error: '@builtin(primitive_id)' cannot be used for fragment shader output");
+ "1:2 error: '@builtin(primitive_index)' cannot be used for fragment shader output");
}
} // namespace
diff --git a/src/tint/lang/wgsl/resolver/uniformity_test.cc b/src/tint/lang/wgsl/resolver/uniformity_test.cc
index cba4406..ddb6456 100644
--- a/src/tint/lang/wgsl/resolver/uniformity_test.cc
+++ b/src/tint/lang/wgsl/resolver/uniformity_test.cc
@@ -772,8 +772,8 @@
std::string src = "";
if (GetParam().name == "subgroup_size") {
src += "enable subgroups;\n";
- } else if (GetParam().name == "primitive_id") {
- src += "enable chromium_experimental_primitive_id;\n";
+ } else if (GetParam().name == "primitive_index") {
+ src += "enable primitive_index;\n";
} else if (GetParam().name == "barycentric_coord") {
src += "enable chromium_experimental_barycentric_coord;\n";
asScalar = "vec3(b).x";
@@ -818,8 +818,8 @@
std::string src = "";
if (GetParam().name == "subgroup_size") {
src += "enable subgroups;\n";
- } else if (GetParam().name == "primitive_id") {
- src += "enable chromium_experimental_primitive_id;\n";
+ } else if (GetParam().name == "primitive_index") {
+ src += "enable primitive_index;\n";
} else if (GetParam().name == "barycentric_coord") {
src += "enable chromium_experimental_barycentric_coord;\n";
asScalar = "vec3(s.b).x";
@@ -869,7 +869,7 @@
BuiltinEntry{"front_facing", "bool", false},
BuiltinEntry{"sample_index", "u32", false},
BuiltinEntry{"sample_mask", "u32", false},
- BuiltinEntry{"primitive_id", "u32", false},
+ BuiltinEntry{"primitive_index", "u32", false},
BuiltinEntry{"subgroup_size", "u32", false},
BuiltinEntry{"barycentric_coord", "vec3<f32>", false}),
[](const ::testing::TestParamInfo<FragmentBuiltin::ParamType>& p) {
diff --git a/src/tint/lang/wgsl/resolver/validator.cc b/src/tint/lang/wgsl/resolver/validator.cc
index 5944311..9ce6ca8 100644
--- a/src/tint/lang/wgsl/resolver/validator.cc
+++ b/src/tint/lang/wgsl/resolver/validator.cc
@@ -1160,12 +1160,12 @@
}
break;
}
- case core::BuiltinValue::kPrimitiveId: {
- if (!enabled_extensions_.Contains(wgsl::Extension::kChromiumExperimentalPrimitiveId)) {
- AddError(attr->source) << "use of " << style::Attribute("@builtin")
- << style::Code("(", style::Enum(builtin), ")")
- << " requires enabling extension "
- << style::Code("chromium_experimental_primitive_id");
+ case core::BuiltinValue::kPrimitiveIndex: {
+ if (!enabled_extensions_.Contains(wgsl::Extension::kPrimitiveIndex)) {
+ AddError(attr->source)
+ << "use of " << style::Attribute("@builtin")
+ << style::Code("(", style::Enum(builtin), ")")
+ << " requires enabling extension " << style::Code("primitive_index");
return false;
}
if (!type->Is<core::type::U32>()) {
diff --git a/src/tint/lang/wgsl/wgsl.def b/src/tint/lang/wgsl/wgsl.def
index e38d6e7..b250427 100644
--- a/src/tint/lang/wgsl/wgsl.def
+++ b/src/tint/lang/wgsl/wgsl.def
@@ -79,6 +79,8 @@
dual_source_blending
// WGSL Extension "subgroups"
subgroups
+ // WGSL Extension "primitive_index"
+ primitive_index
// A Chromium-specific extension for disabling uniformity analysis.
chromium_disable_uniformity_analysis
@@ -97,8 +99,6 @@
chromium_experimental_framebuffer_fetch
// A Chromium-specific extension for subgroup matrix support
chromium_experimental_subgroup_matrix
- // A Chromium-specific extension for primitive_id support
- chromium_experimental_primitive_id
// A Chromium-specific extension for barycentric_coord support
chromium_experimental_barycentric_coord
}
diff --git a/src/tint/lang/wgsl/writer/ir_to_program/ir_to_program.cc b/src/tint/lang/wgsl/writer/ir_to_program/ir_to_program.cc
index 6636c09..a765155 100644
--- a/src/tint/lang/wgsl/writer/ir_to_program/ir_to_program.cc
+++ b/src/tint/lang/wgsl/writer/ir_to_program/ir_to_program.cc
@@ -268,9 +268,9 @@
Enable(wgsl::Extension::kClipDistances);
attrs.Push(b.Builtin(core::BuiltinValue::kClipDistances));
break;
- case core::BuiltinValue::kPrimitiveId:
- Enable(wgsl::Extension::kChromiumExperimentalPrimitiveId);
- attrs.Push(b.Builtin(core::BuiltinValue::kPrimitiveId));
+ case core::BuiltinValue::kPrimitiveIndex:
+ Enable(wgsl::Extension::kPrimitiveIndex);
+ attrs.Push(b.Builtin(core::BuiltinValue::kPrimitiveIndex));
break;
default:
TINT_UNIMPLEMENTED() << builtin.value();
diff --git a/src/tint/lang/wgsl/writer/ir_to_program/ir_to_program_test.cc b/src/tint/lang/wgsl/writer/ir_to_program/ir_to_program_test.cc
index c6d50d7..e9ecc98 100644
--- a/src/tint/lang/wgsl/writer/ir_to_program/ir_to_program_test.cc
+++ b/src/tint/lang/wgsl/writer/ir_to_program/ir_to_program_test.cc
@@ -327,17 +327,17 @@
MakeBuiltinParam(b, ty.u32(), core::BuiltinValue::kSampleIndex),
MakeBuiltinParam(b, ty.u32(), core::BuiltinValue::kSampleMask),
MakeBuiltinParam(b, ty.u32(), core::BuiltinValue::kSubgroupSize),
- MakeBuiltinParam(b, ty.u32(), core::BuiltinValue::kPrimitiveId),
+ MakeBuiltinParam(b, ty.u32(), core::BuiltinValue::kPrimitiveIndex),
});
fn->Block()->Append(b.Return(fn));
EXPECT_WGSL(R"(
enable subgroups;
-enable chromium_experimental_primitive_id;
+enable primitive_index;
@fragment
-fn f(@builtin(front_facing) v : bool, @builtin(sample_index) v_1 : u32, @builtin(sample_mask) v_2 : u32, @builtin(subgroup_size) v_3 : u32, @builtin(primitive_id) v_4 : u32) {
+fn f(@builtin(front_facing) v : bool, @builtin(sample_index) v_1 : u32, @builtin(sample_mask) v_2 : u32, @builtin(subgroup_size) v_3 : u32, @builtin(primitive_index) v_4 : u32) {
}
)");
}
diff --git a/src/tint/utils/protos/ir/ir.proto b/src/tint/utils/protos/ir/ir.proto
index 9b9135c..562b1a7 100644
--- a/src/tint/utils/protos/ir/ir.proto
+++ b/src/tint/utils/protos/ir/ir.proto
@@ -578,7 +578,7 @@
clip_distances = 15;
cull_distance = 16;
subgroup_id = 17;
- primitive_id = 18;
+ primitive_index = 18;
barycentric_coord = 19;
}
diff --git a/test/tint/extensions/primitive_id/basic.wgsl b/test/tint/extensions/primitive_id/basic.wgsl
deleted file mode 100644
index 2c92d6e..0000000
--- a/test/tint/extensions/primitive_id/basic.wgsl
+++ /dev/null
@@ -1,6 +0,0 @@
-enable chromium_experimental_primitive_id;
-
-@fragment
-fn main(@builtin(primitive_id) prim_id : u32) -> @location(0) vec4f {
- return vec4f(f32(prim_id));
-}
diff --git a/test/tint/extensions/primitive_id/basic.wgsl.expected.dxc.hlsl b/test/tint/extensions/primitive_id/basic.wgsl.expected.dxc.hlsl
deleted file mode 100644
index 0526058..0000000
--- a/test/tint/extensions/primitive_id/basic.wgsl.expected.dxc.hlsl
+++ /dev/null
@@ -1,18 +0,0 @@
-struct main_outputs {
- float4 tint_symbol : SV_Target0;
-};
-
-struct main_inputs {
- uint prim_id : SV_PrimitiveId;
-};
-
-
-float4 main_inner(uint prim_id) {
- return float4((float(prim_id)).xxxx);
-}
-
-main_outputs main(main_inputs inputs) {
- main_outputs v = {main_inner(inputs.prim_id)};
- return v;
-}
-
diff --git a/test/tint/extensions/primitive_id/basic.wgsl.expected.fxc.hlsl b/test/tint/extensions/primitive_id/basic.wgsl.expected.fxc.hlsl
deleted file mode 100644
index 0526058..0000000
--- a/test/tint/extensions/primitive_id/basic.wgsl.expected.fxc.hlsl
+++ /dev/null
@@ -1,18 +0,0 @@
-struct main_outputs {
- float4 tint_symbol : SV_Target0;
-};
-
-struct main_inputs {
- uint prim_id : SV_PrimitiveId;
-};
-
-
-float4 main_inner(uint prim_id) {
- return float4((float(prim_id)).xxxx);
-}
-
-main_outputs main(main_inputs inputs) {
- main_outputs v = {main_inner(inputs.prim_id)};
- return v;
-}
-
diff --git a/test/tint/extensions/primitive_id/basic.wgsl.expected.msl b/test/tint/extensions/primitive_id/basic.wgsl.expected.msl
deleted file mode 100644
index 88e2b40..0000000
--- a/test/tint/extensions/primitive_id/basic.wgsl.expected.msl
+++ /dev/null
@@ -1,16 +0,0 @@
-#include <metal_stdlib>
-using namespace metal;
-
-struct main_outputs {
- float4 tint_symbol [[color(0)]];
-};
-
-float4 main_inner(uint prim_id) {
- return float4(float(prim_id));
-}
-
-fragment main_outputs v(uint prim_id [[primitive_id]]) {
- main_outputs tint_wrapper_result = {};
- tint_wrapper_result.tint_symbol = main_inner(prim_id);
- return tint_wrapper_result;
-}
diff --git a/test/tint/extensions/primitive_id/basic.wgsl.expected.wgsl b/test/tint/extensions/primitive_id/basic.wgsl.expected.wgsl
deleted file mode 100644
index 6eb4405..0000000
--- a/test/tint/extensions/primitive_id/basic.wgsl.expected.wgsl
+++ /dev/null
@@ -1,6 +0,0 @@
-enable chromium_experimental_primitive_id;
-
-@fragment
-fn main(@builtin(primitive_id) prim_id : u32) -> @location(0) vec4f {
- return vec4f(f32(prim_id));
-}
diff --git a/test/tint/extensions/primitive_index/basic.wgsl b/test/tint/extensions/primitive_index/basic.wgsl
new file mode 100644
index 0000000..89e78f9
--- /dev/null
+++ b/test/tint/extensions/primitive_index/basic.wgsl
@@ -0,0 +1,6 @@
+enable primitive_index;
+
+@fragment
+fn main(@builtin(primitive_index) prim_idx : u32) -> @location(0) vec4f {
+ return vec4f(f32(prim_idx));
+}
diff --git a/test/tint/extensions/primitive_index/basic.wgsl.expected.dxc.hlsl b/test/tint/extensions/primitive_index/basic.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..c0863ac
--- /dev/null
+++ b/test/tint/extensions/primitive_index/basic.wgsl.expected.dxc.hlsl
@@ -0,0 +1,18 @@
+struct main_outputs {
+ float4 tint_symbol : SV_Target0;
+};
+
+struct main_inputs {
+ uint prim_idx : SV_PrimitiveId;
+};
+
+
+float4 main_inner(uint prim_idx) {
+ return float4((float(prim_idx)).xxxx);
+}
+
+main_outputs main(main_inputs inputs) {
+ main_outputs v = {main_inner(inputs.prim_idx)};
+ return v;
+}
+
diff --git a/test/tint/extensions/primitive_index/basic.wgsl.expected.fxc.hlsl b/test/tint/extensions/primitive_index/basic.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..c0863ac
--- /dev/null
+++ b/test/tint/extensions/primitive_index/basic.wgsl.expected.fxc.hlsl
@@ -0,0 +1,18 @@
+struct main_outputs {
+ float4 tint_symbol : SV_Target0;
+};
+
+struct main_inputs {
+ uint prim_idx : SV_PrimitiveId;
+};
+
+
+float4 main_inner(uint prim_idx) {
+ return float4((float(prim_idx)).xxxx);
+}
+
+main_outputs main(main_inputs inputs) {
+ main_outputs v = {main_inner(inputs.prim_idx)};
+ return v;
+}
+
diff --git a/test/tint/extensions/primitive_id/basic.wgsl.expected.glsl b/test/tint/extensions/primitive_index/basic.wgsl.expected.glsl
similarity index 77%
rename from test/tint/extensions/primitive_id/basic.wgsl.expected.glsl
rename to test/tint/extensions/primitive_index/basic.wgsl.expected.glsl
index e4f94ad..de8fe2e 100644
--- a/test/tint/extensions/primitive_id/basic.wgsl.expected.glsl
+++ b/test/tint/extensions/primitive_index/basic.wgsl.expected.glsl
@@ -4,8 +4,8 @@
precision highp int;
layout(location = 0) out vec4 main_loc0_Output;
-vec4 main_inner(uint prim_id) {
- return vec4(float(prim_id));
+vec4 main_inner(uint prim_idx) {
+ return vec4(float(prim_idx));
}
void main() {
main_loc0_Output = main_inner(uint(gl_PrimitiveID));
diff --git a/test/tint/extensions/primitive_index/basic.wgsl.expected.msl b/test/tint/extensions/primitive_index/basic.wgsl.expected.msl
new file mode 100644
index 0000000..6b0b785
--- /dev/null
+++ b/test/tint/extensions/primitive_index/basic.wgsl.expected.msl
@@ -0,0 +1,16 @@
+#include <metal_stdlib>
+using namespace metal;
+
+struct main_outputs {
+ float4 tint_symbol [[color(0)]];
+};
+
+float4 main_inner(uint prim_idx) {
+ return float4(float(prim_idx));
+}
+
+fragment main_outputs v(uint prim_idx [[primitive_id]]) {
+ main_outputs tint_wrapper_result = {};
+ tint_wrapper_result.tint_symbol = main_inner(prim_idx);
+ return tint_wrapper_result;
+}
diff --git a/test/tint/extensions/primitive_id/basic.wgsl.expected.spvasm b/test/tint/extensions/primitive_index/basic.wgsl.expected.spvasm
similarity index 72%
rename from test/tint/extensions/primitive_id/basic.wgsl.expected.spvasm
rename to test/tint/extensions/primitive_index/basic.wgsl.expected.spvasm
index 3f64a83..5c81bf9 100644
--- a/test/tint/extensions/primitive_id/basic.wgsl.expected.spvasm
+++ b/test/tint/extensions/primitive_index/basic.wgsl.expected.spvasm
@@ -6,19 +6,19 @@
OpCapability Shader
OpCapability Geometry
OpMemoryModel Logical GLSL450
- OpEntryPoint Fragment %main "main" %main_primitive_id_Input %main_loc0_Output
+ OpEntryPoint Fragment %main "main" %main_primitive_index_Input %main_loc0_Output
OpExecutionMode %main OriginUpperLeft
- OpName %main_primitive_id_Input "main_primitive_id_Input"
+ OpName %main_primitive_index_Input "main_primitive_index_Input"
OpName %main_loc0_Output "main_loc0_Output"
OpName %main_inner "main_inner"
- OpName %prim_id "prim_id"
+ OpName %prim_idx "prim_idx"
OpName %main "main"
- OpDecorate %main_primitive_id_Input Flat
- OpDecorate %main_primitive_id_Input BuiltIn PrimitiveId
+ OpDecorate %main_primitive_index_Input Flat
+ OpDecorate %main_primitive_index_Input BuiltIn PrimitiveId
OpDecorate %main_loc0_Output Location 0
%uint = OpTypeInt 32 0
%_ptr_Input_uint = OpTypePointer Input %uint
-%main_primitive_id_Input = OpVariable %_ptr_Input_uint Input
+%main_primitive_index_Input = OpVariable %_ptr_Input_uint Input
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
%_ptr_Output_v4float = OpTypePointer Output %v4float
@@ -27,15 +27,15 @@
%void = OpTypeVoid
%16 = OpTypeFunction %void
%main_inner = OpFunction %v4float None %10
- %prim_id = OpFunctionParameter %uint
+ %prim_idx = OpFunctionParameter %uint
%11 = OpLabel
- %12 = OpConvertUToF %float %prim_id
+ %12 = OpConvertUToF %float %prim_idx
%13 = OpCompositeConstruct %v4float %12 %12 %12 %12
OpReturnValue %13
OpFunctionEnd
%main = OpFunction %void None %16
%17 = OpLabel
- %18 = OpLoad %uint %main_primitive_id_Input None
+ %18 = OpLoad %uint %main_primitive_index_Input None
%19 = OpFunctionCall %v4float %main_inner %18
OpStore %main_loc0_Output %19 None
OpReturn
diff --git a/test/tint/extensions/primitive_index/basic.wgsl.expected.wgsl b/test/tint/extensions/primitive_index/basic.wgsl.expected.wgsl
new file mode 100644
index 0000000..f47d459
--- /dev/null
+++ b/test/tint/extensions/primitive_index/basic.wgsl.expected.wgsl
@@ -0,0 +1,6 @@
+enable primitive_index;
+
+@fragment
+fn main(@builtin(primitive_index) prim_idx : u32) -> @location(0) vec4f {
+ return vec4f(f32(prim_idx));
+}
diff --git a/third_party/webgpu-headers/webgpu.h.diff b/third_party/webgpu-headers/webgpu.h.diff
index e69de29..7c48439 100644
--- a/third_party/webgpu-headers/webgpu.h.diff
+++ b/third_party/webgpu-headers/webgpu.h.diff
@@ -0,0 +1,10 @@
+--- webgpu_header
++++ dawn_header
+@@
+ WGPUFeatureName_Subgroups = 0x00000012,
+ WGPUFeatureName_TextureFormatsTier1 = 0x00000013,
+ WGPUFeatureName_TextureFormatsTier2 = 0x00000014,
++ WGPUFeatureName_PrimitiveIndex = 0x00000015,
+ WGPUFeatureName_Force32 = 0x7FFFFFFF
+ } WGPUFeatureName WGPU_ENUM_ATTRIBUTE;
+