[Vulkan] Rename STMVkProperties to STMAHBProperties

All of these properties are for the AHB (including the format flags,
which we will be adding in a followup). Following discussion with Austin
we are doing the rename and requiring that the
SharedTextureMemoryAHardwareBuffer feature be set when chaining this
struct.

Bug: dawn:2476
Change-Id: I71fc894aa420edc5875982e4ec3e7ab7220b5ada
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/188560
Commit-Queue: Colin Blundell <blundell@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
diff --git a/src/dawn/dawn.json b/src/dawn/dawn.json
index 2167b30..b1366b8 100644
--- a/src/dawn/dawn.json
+++ b/src/dawn/dawn.json
@@ -1919,7 +1919,7 @@
             {"name": "format", "type": "texture format"}
         ]
     },
-    "shared texture memory vk properties": {
+    "shared texture memory a hardware buffer properties": {
         "category": "structure",
         "chained": "out",
         "chain roots": ["shared texture memory properties"],
@@ -3817,7 +3817,7 @@
             {"value": 1215, "name": "shared buffer memory D3D12 resource descriptor", "tags": ["dawn", "native"]},
             {"value": 1216, "name": "static sampler binding layout", "tags": ["dawn"]},
             {"value": 1217, "name": "y cb cr vk descriptor", "tags": ["dawn"]},
-            {"value": 1218, "name": "shared texture memory vk properties", "tags": ["dawn", "native"]}
+            {"value": 1218, "name": "shared texture memory a hardware buffer properties", "tags": ["dawn", "native"]}
         ]
     },
     "texture": {
diff --git a/src/dawn/native/SharedTextureMemory.cpp b/src/dawn/native/SharedTextureMemory.cpp
index ef3691f..3c715bd 100644
--- a/src/dawn/native/SharedTextureMemory.cpp
+++ b/src/dawn/native/SharedTextureMemory.cpp
@@ -107,15 +107,28 @@
 }
 
 void SharedTextureMemoryBase::APIGetProperties(SharedTextureMemoryProperties* properties) const {
+    if (GetDevice()->ConsumedError(GetProperties(properties), "calling %s.GetProperties", this)) {
+        return;
+    }
+}
+
+MaybeError SharedTextureMemoryBase::GetProperties(SharedTextureMemoryProperties* properties) const {
     properties->usage = mProperties.usage;
     properties->size = mProperties.size;
     properties->format = mProperties.format;
 
     UnpackedPtr<SharedTextureMemoryProperties> unpacked;
-    if (GetDevice()->ConsumedError(ValidateAndUnpack(properties), &unpacked,
-                                   "calling %s.GetProperties", this)) {
-        return;
+    DAWN_TRY_ASSIGN(unpacked, ValidateAndUnpack(properties));
+
+    if (unpacked.Get<SharedTextureMemoryAHardwareBufferProperties>()) {
+        DAWN_INVALID_IF(
+            !GetDevice()->HasFeature(Feature::SharedTextureMemoryAHardwareBuffer),
+            "SharedTextureMemory properties (%s) have a chained "
+            "SharedTextureMemoryAHardwareBufferProperties without the %s feature being set.",
+            this, ToAPI(Feature::SharedTextureMemoryAHardwareBuffer));
     }
+
+    return {};
 }
 
 TextureBase* SharedTextureMemoryBase::APICreateTexture(const TextureDescriptor* descriptor) {
diff --git a/src/dawn/native/SharedTextureMemory.h b/src/dawn/native/SharedTextureMemory.h
index 1346231..0455e01 100644
--- a/src/dawn/native/SharedTextureMemory.h
+++ b/src/dawn/native/SharedTextureMemory.h
@@ -70,6 +70,7 @@
 
   private:
     ResultOrError<Ref<TextureBase>> CreateTexture(const TextureDescriptor* rawDescriptor);
+    MaybeError GetProperties(SharedTextureMemoryProperties* properties) const;
 
     virtual ResultOrError<Ref<TextureBase>> CreateTextureImpl(
         const UnpackedPtr<TextureDescriptor>& descriptor) = 0;
diff --git a/src/dawn/tests/white_box/SharedTextureMemoryTests.cpp b/src/dawn/tests/white_box/SharedTextureMemoryTests.cpp
index 534487c..325ae01 100644
--- a/src/dawn/tests/white_box/SharedTextureMemoryTests.cpp
+++ b/src/dawn/tests/white_box/SharedTextureMemoryTests.cpp
@@ -1021,6 +1021,33 @@
     EXPECT_EQ(properties1.format, properties2.format);
 }
 
+// Test that calling GetProperties with a chained
+// SharedTextureMemoryAHardwareBufferProperties struct will generate an error
+// unless the required feature is present. In either case, the base properties
+// should still be populated.
+TEST_P(SharedTextureMemoryTests, GetPropertiesAHardwareBufferPropertiesRequiresAHBFeature) {
+    wgpu::SharedTextureMemory memory =
+        GetParam().mBackend->CreateSharedTextureMemory(device, GetParam().mLayerCount);
+
+    wgpu::SharedTextureMemoryAHardwareBufferProperties aHBProps;
+    wgpu::SharedTextureMemoryProperties properties1;
+    properties1.nextInChain = &aHBProps;
+    if (device.HasFeature(wgpu::FeatureName::SharedTextureMemoryAHardwareBuffer)) {
+        memory.GetProperties(&properties1);
+    } else {
+        ASSERT_DEVICE_ERROR(memory.GetProperties(&properties1));
+    }
+
+    wgpu::SharedTextureMemoryProperties properties2;
+    memory.GetProperties(&properties2);
+
+    EXPECT_EQ(properties1.usage, properties2.usage);
+    EXPECT_EQ(properties1.size.width, properties2.size.width);
+    EXPECT_EQ(properties1.size.height, properties2.size.height);
+    EXPECT_EQ(properties1.size.depthOrArrayLayers, properties2.size.depthOrArrayLayers);
+    EXPECT_EQ(properties1.format, properties2.format);
+}
+
 // Test that texture usages must be a subset of the shared texture memory's usage.
 TEST_P(SharedTextureMemoryTests, UsageValidation) {
     for (wgpu::SharedTextureMemory memory :