aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTreehugger Robot <treehugger-gerrit@google.com>2022-08-03 01:32:37 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2022-08-03 01:32:37 +0000
commit3784ee8181ab600b8a1d009a5e03cf9afe78865a (patch)
treebb3cad9142033f433cf9d88a79f07cf9d5bc850a
parentf5428a8d62304e2c3fc5b0aadccbcba5f3203399 (diff)
parent00be2bde2061593af4e9f55a42f6bd23b092256a (diff)
downloadqemu-sparse-8904354-L88300000955770083.tar.gz
Merge changes from topic "gfxstream-vk-astc-emulation-feature" into emu-master-devsparse-8904354-L88300000955770083sparse-8904354-L13900000955790977emu-32-dev
* changes: Automatically add license for gfxstream targets vulkan: add feature to disable ASTC emulation
-rw-r--r--android-qemu2-glue/main.cpp1
-rw-r--r--android/android-emu/android/metrics/DependentMetrics.cpp2
-rw-r--r--android/android-emugl/combined/CMakeLists.txt58
-rw-r--r--android/android-emugl/host/libs/libOpenglRender/FrameBuffer.cpp2
-rw-r--r--android/android-emugl/host/libs/libOpenglRender/vulkan/VkCommonOperations.cpp9
-rw-r--r--android/android-emugl/host/libs/libOpenglRender/vulkan/VkCommonOperations.h5
-rw-r--r--android/android-emugl/host/libs/libOpenglRender/vulkan/VkDecoderGlobalState.cpp10
-rw-r--r--android/data/advancedFeatures.ini4
-rw-r--r--android/data/advancedFeaturesCanary.ini4
-rw-r--r--android/emu/feature/include/android/featurecontrol/FeatureControlDefHost.h1
-rw-r--r--android/emu/feature/test/android/featurecontrol/FeatureControl_unittest.cpp91
-rw-r--r--android/emu/metrics/protos/studio_stats.proto3
12 files changed, 115 insertions, 75 deletions
diff --git a/android-qemu2-glue/main.cpp b/android-qemu2-glue/main.cpp
index 48da9473d1..d6bb0c4926 100644
--- a/android-qemu2-glue/main.cpp
+++ b/android-qemu2-glue/main.cpp
@@ -1375,6 +1375,7 @@ extern "C" int main(int argc, char** argv) {
fc::setIfNotOverriden(fc::VirtioGpuFenceContexts, false);
fc::setIfNotOverriden(fc::HostComposition, true);
fc::setIfNotOverriden(fc::AsyncComposeSupport, true);
+ fc::setIfNotOverriden(fc::VulkanAstcLdrEmulation, true);
int lcdWidth = 1280;
int lcdHeight = 720;
diff --git a/android/android-emu/android/metrics/DependentMetrics.cpp b/android/android-emu/android/metrics/DependentMetrics.cpp
index 7fd9c0b354..f50ad93dd9 100644
--- a/android/android-emu/android/metrics/DependentMetrics.cpp
+++ b/android/android-emu/android/metrics/DependentMetrics.cpp
@@ -493,6 +493,8 @@ toClearcutFeatureFlag(android::featurecontrol::Feature feature) {
case android::featurecontrol::VsockSnapshotLoadFixed_b231345789:
return android_studio::EmulatorFeatureFlagState::
VSOCK_SNAPSHOT_LOAD_FIXED_B231345789;
+ case android::featurecontrol::VulkanAstcLdrEmulation:
+ return android_studio::EmulatorFeatureFlagState::VULKAN_ASTC_LDR_EMULATION;
}
return android_studio::EmulatorFeatureFlagState::
EMULATOR_FEATURE_FLAG_UNSPECIFIED;
diff --git a/android/android-emugl/combined/CMakeLists.txt b/android/android-emugl/combined/CMakeLists.txt
index 96192ffa8d..82f401d812 100644
--- a/android/android-emugl/combined/CMakeLists.txt
+++ b/android/android-emugl/combined/CMakeLists.txt
@@ -19,6 +19,35 @@ if(OPTION_GFXSTREAM_BACKEND)
set(BUILD_STANDALONE OFF)
set(ENABLE_VKCEREAL_TESTS ON)
+ function(discover_gfxstream_internal_targets result subdir)
+ if(CMAKE_VERSION VERSION_LESS "3.7.0")
+ message(
+ FATAL_ERROR
+ "This function cannot be used by older cmake versions (${CMAKE_VERSION}<3.7.0)"
+ )
+ endif()
+ get_filename_component(abs_subdir ${subdir} ABSOLUTE)
+ set(GFXSTREAM_THIRD_PARTY_ROOT ${GFXSTREAM_REPO_ROOT})
+ cmake_path(APPEND GFXSTREAM_THIRD_PARTY_ROOT "third-party")
+ cmake_path(IS_PREFIX GFXSTREAM_THIRD_PARTY_ROOT ${abs_subdir} NORMALIZE IS_THIRD_PARTY)
+ if(IS_THIRD_PARTY)
+ return()
+ endif()
+ cmake_path(IS_PREFIX GFXSTREAM_REPO_ROOT ${abs_subdir} NORMALIZE IS_GFXSTREAM_SUBDIR)
+ if(NOT IS_GFXSTREAM_SUBDIR)
+ return()
+ endif()
+
+ get_directory_property(subdirs DIRECTORY "${abs_subdir}" SUBDIRECTORIES)
+ foreach(subdir IN LISTS subdirs)
+ discover_gfxstream_internal_targets(${result} "${subdir}")
+ endforeach()
+
+ get_property(targets_in_dir DIRECTORY "${subdir}"
+ PROPERTY BUILDSYSTEM_TARGETS)
+ set(${result} ${${result}} ${targets_in_dir} PARENT_SCOPE)
+ endfunction()
+
android_add_library(
TARGET aemu-vkcereal-base
LICENSE Apache-2.0
@@ -171,32 +200,15 @@ if(OPTION_GFXSTREAM_BACKEND)
add_opengl_dependencies(OpenglRender_unittests)
add_opengl_dependencies(OpenglRender_snapshot_unittests)
+ get_directory_property(GFXSTREAM_SUBDIRS SUBDIRECTORIES)
+ foreach(GFXSTREAM_SUBDIR IN LISTS GFXSTREAM_SUBDIRS)
+ discover_gfxstream_internal_targets(GFXSTREAM_INTERNAL_TARGETS ${GFXSTREAM_SUBDIR})
+ endforeach()
set(GFXSTREAM_DEPENDENCIES
+ ${GFXSTREAM_INTERNAL_TARGETS}
angle_common
angle_shader_translator
- apigen-codec-common
- EGL_translator_static
- gfxstream-base
- gfxstream-base.headers
- gfxstream-compressedTextures
- gfxstream-host-common
- gfxstream-host-common.headers
- gfxstream-snapshot
- gfxstream-vulkan-server
- gfxstream_backend
- gfxstream_backend_static
- gles1_dec
- gles2_dec
- GLcommon
- GLSnapshot
- GLES_CM_translator_static
- GLES_V2_translator_static
- logging-base
- OpenGLESDispatch
- OpenglRender_vulkan_cereal
- renderControl_dec
- renderdoc
- gfxstream-host-common.product-feature-override)
+ renderdoc)
android_license(TARGET "${GFXSTREAM_DEPENDENCIES}"
LIBNAME gfxstream
URL "https://android.googlesource.com/device/generic/vulkan-cereal/+/refs/heads/master"
diff --git a/android/android-emugl/host/libs/libOpenglRender/FrameBuffer.cpp b/android/android-emugl/host/libs/libOpenglRender/FrameBuffer.cpp
index 94f8c07e58..d39d2ee8a8 100644
--- a/android/android-emugl/host/libs/libOpenglRender/FrameBuffer.cpp
+++ b/android/android-emugl/host/libs/libOpenglRender/FrameBuffer.cpp
@@ -371,6 +371,8 @@ bool FrameBuffer::initialize(int width, int height, bool useSubWindow,
} else {
GL_LOG("Doesn't support id properties, no vulkan device UUID");
}
+ bool enableAstcLdrEmulation = emugl::emugl_feature_is_enabled(android::featurecontrol::VulkanAstcLdrEmulation);
+ goldfish_vk::setEnableAstcLdrEmulation(vkEmu, enableAstcLdrEmulation);
}
fb->m_glRenderer = std::string(vkEmu->deviceInfo.physdevProps.deviceName);
}
diff --git a/android/android-emugl/host/libs/libOpenglRender/vulkan/VkCommonOperations.cpp b/android/android-emugl/host/libs/libOpenglRender/vulkan/VkCommonOperations.cpp
index 389e27abe2..7a3a229678 100644
--- a/android/android-emugl/host/libs/libOpenglRender/vulkan/VkCommonOperations.cpp
+++ b/android/android-emugl/host/libs/libOpenglRender/vulkan/VkCommonOperations.cpp
@@ -1031,6 +1031,15 @@ void setUseCreateResourcesWithRequirements(VkEmulation* emu, bool useCreateResou
emu->useCreateResourcesWithRequirements = useCreateResourcesWithRequirements;
}
+
+void setEnableAstcLdrEmulation(VkEmulation* emu, bool enableAstcLdrEmulation) {
+ if (!emu) return;
+ if (!emu->live) return;
+
+ LOG(VERBOSE) << "Enable ASTC LDR emulation: " << enableAstcLdrEmulation;
+ emu->enableAstcLdrEmulation = enableAstcLdrEmulation;
+}
+
VkEmulation* getGlobalVkEmulation() {
if (sVkEmulation && !sVkEmulation->live) return nullptr;
return sVkEmulation;
diff --git a/android/android-emugl/host/libs/libOpenglRender/vulkan/VkCommonOperations.h b/android/android-emugl/host/libs/libOpenglRender/vulkan/VkCommonOperations.h
index af90d03db7..c1ba4a4904 100644
--- a/android/android-emugl/host/libs/libOpenglRender/vulkan/VkCommonOperations.h
+++ b/android/android-emugl/host/libs/libOpenglRender/vulkan/VkCommonOperations.h
@@ -70,6 +70,10 @@ struct VkEmulation {
// Whether to fuse memory requirements getting with resource creation.
bool useCreateResourcesWithRequirements = false;
+ // Whether to use ASTC emulation. Our current ASTC decoder implementation may lead to device
+ // lost on certain device on Windows.
+ bool enableAstcLdrEmulation = false;
+
// Instance and device for creating the system-wide shareable objects.
VkInstance instance = VK_NULL_HANDLE;
VkPhysicalDevice physdev = VK_NULL_HANDLE;
@@ -324,6 +328,7 @@ VkEmulation* createOrGetGlobalVkEmulation(VulkanDispatch* vk);
void setGlInteropSupported(bool supported);
void setUseDeferredCommands(VkEmulation* emu, bool useDeferred);
void setUseCreateResourcesWithRequirements(VkEmulation* emu, bool useCreateResourcesWithRequirements);
+void setEnableAstcLdrEmulation(VkEmulation*, bool enableAstcLdrEmulation);
VkEmulation* getGlobalVkEmulation();
void teardownGlobalVkEmulation();
diff --git a/android/android-emugl/host/libs/libOpenglRender/vulkan/VkDecoderGlobalState.cpp b/android/android-emugl/host/libs/libOpenglRender/vulkan/VkDecoderGlobalState.cpp
index 7d7ba8f914..8f2eedeaf6 100644
--- a/android/android-emugl/host/libs/libOpenglRender/vulkan/VkDecoderGlobalState.cpp
+++ b/android/android-emugl/host/libs/libOpenglRender/vulkan/VkDecoderGlobalState.cpp
@@ -703,7 +703,7 @@ public:
vk->vkGetPhysicalDeviceFeatures(physicalDevice, pFeatures);
pFeatures->textureCompressionETC2 = true;
- pFeatures->textureCompressionASTC_LDR |= kEmulateAstc;
+ pFeatures->textureCompressionASTC_LDR |= m_emu->enableAstcLdrEmulation;
#ifdef __APPLE__
// MoltenVK does not support geometryShader, and dEQP expects it to be
@@ -751,7 +751,7 @@ public:
}
pFeatures->features.textureCompressionETC2 = true;
- pFeatures->features.textureCompressionASTC_LDR |= kEmulateAstc;
+ pFeatures->features.textureCompressionASTC_LDR |= m_emu->enableAstcLdrEmulation;
#ifdef __APPLE__
// MoltenVK does not support geometryShader, and dEQP expects it to be
@@ -5159,7 +5159,6 @@ public:
VkDecoderSnapshot* snapshot() { return &mSnapshot; }
private:
- static const bool kEmulateAstc = true;
bool isEmulatedExtension(const char* name) const {
for (auto emulatedExt : kEmulatedExtensions) {
if (!strcmp(emulatedExt, name)) return true;
@@ -5881,9 +5880,8 @@ private:
return !feature.textureCompressionETC2;
}
- static bool needEmulatedAstc(VkPhysicalDevice physicalDevice,
- goldfish_vk::VulkanDispatch* vk) {
- if (!kEmulateAstc) {
+ bool needEmulatedAstc(VkPhysicalDevice physicalDevice, goldfish_vk::VulkanDispatch* vk) {
+ if (!m_emu->enableAstcLdrEmulation) {
return false;
}
VkPhysicalDeviceFeatures feature;
diff --git a/android/data/advancedFeatures.ini b/android/data/advancedFeatures.ini
index f843b3b699..86b9a067de 100644
--- a/android/data/advancedFeatures.ini
+++ b/android/data/advancedFeatures.ini
@@ -435,3 +435,7 @@ VirtioGpuFenceContexts = off
# VsockSnapshotLoadFixed_b231345789---------------------------------------------
# Send the RST frame when the VSOCK device is loaded from a snapshot.
VsockSnapshotLoadFixed_b231345789 = on
+
+# VulkanAstcLdrEmulation--------------------------------------------------------
+# Enable Vulkan ASTC LDR emulation.
+VulkanAstcLdrEmulation = on
diff --git a/android/data/advancedFeaturesCanary.ini b/android/data/advancedFeaturesCanary.ini
index 3ffff24038..4f3ede0334 100644
--- a/android/data/advancedFeaturesCanary.ini
+++ b/android/data/advancedFeaturesCanary.ini
@@ -435,3 +435,7 @@ VirtioGpuFenceContexts = off
# VsockSnapshotLoadFixed_b231345789---------------------------------------------
# Send the RST frame when the VSOCK device is loaded from a snapshot.
VsockSnapshotLoadFixed_b231345789 = on
+
+# VulkanAstcLdrEmulation--------------------------------------------------------
+# Enable Vulkan ASTC LDR emulation.
+VulkanAstcLdrEmulation = on
diff --git a/android/emu/feature/include/android/featurecontrol/FeatureControlDefHost.h b/android/emu/feature/include/android/featurecontrol/FeatureControlDefHost.h
index ea76789827..9505faf2a8 100644
--- a/android/emu/feature/include/android/featurecontrol/FeatureControlDefHost.h
+++ b/android/emu/feature/include/android/featurecontrol/FeatureControlDefHost.h
@@ -73,3 +73,4 @@ FEATURE_CONTROL_ITEM(VirtioGpuFenceContexts)
FEATURE_CONTROL_ITEM(AsyncComposeSupport)
FEATURE_CONTROL_ITEM(NoDraw)
FEATURE_CONTROL_ITEM(MigratableSnapshotSave)
+FEATURE_CONTROL_ITEM(VulkanAstcLdrEmulation)
diff --git a/android/emu/feature/test/android/featurecontrol/FeatureControl_unittest.cpp b/android/emu/feature/test/android/featurecontrol/FeatureControl_unittest.cpp
index f07b663e28..64b9569b61 100644
--- a/android/emu/feature/test/android/featurecontrol/FeatureControl_unittest.cpp
+++ b/android/emu/feature/test/android/featurecontrol/FeatureControl_unittest.cpp
@@ -329,51 +329,52 @@ Feature: 'VirtioGpuFenceContexts' (42), value: 0, default: 0, is overridden: 0
Feature: 'AsyncComposeSupport' (43), value: 0, default: 0, is overridden: 0
Feature: 'NoDraw' (44), value: 0, default: 0, is overridden: 0
Feature: 'MigratableSnapshotSave' (45), value: 0, default: 0, is overridden: 0
-Feature: 'GrallocSync' (46), value: 0, default: 0, is overridden: 0
-Feature: 'EncryptUserData' (47), value: 1, default: 0, is overridden: 1
-Feature: 'IntelPerformanceMonitoringUnit' (48), value: 0, default: 0, is overridden: 0
-Feature: 'GLAsyncSwap' (49), value: 0, default: 0, is overridden: 0
-Feature: 'GLDMA' (50), value: 0, default: 0, is overridden: 0
-Feature: 'GLDMA2' (51), value: 0, default: 0, is overridden: 0
-Feature: 'GLDirectMem' (52), value: 0, default: 0, is overridden: 0
-Feature: 'GLESDynamicVersion' (53), value: 0, default: 0, is overridden: 0
-Feature: 'Wifi' (54), value: 1, default: 0, is overridden: 1
-Feature: 'PlayStoreImage' (55), value: 0, default: 0, is overridden: 0
-Feature: 'LogcatPipe' (56), value: 0, default: 0, is overridden: 0
-Feature: 'SystemAsRoot' (57), value: 0, default: 0, is overridden: 0
-Feature: 'KernelDeviceTreeBlobSupport' (58), value: 0, default: 0, is overridden: 0
-Feature: 'DynamicPartition' (59), value: 0, default: 0, is overridden: 0
-Feature: 'RefCountPipe' (60), value: 0, default: 0, is overridden: 0
-Feature: 'HostComposition' (61), value: 0, default: 0, is overridden: 0
-Feature: 'WifiConfigurable' (62), value: 0, default: 0, is overridden: 0
-Feature: 'VirtioInput' (63), value: 0, default: 0, is overridden: 0
-Feature: 'MultiDisplay' (64), value: 0, default: 0, is overridden: 0
-Feature: 'VulkanNullOptionalStrings' (65), value: 0, default: 0, is overridden: 0
-Feature: 'YUV420888toNV21' (66), value: 0, default: 0, is overridden: 0
-Feature: 'YUVCache' (67), value: 0, default: 0, is overridden: 0
-Feature: 'KeycodeForwarding' (68), value: 0, default: 0, is overridden: 0
-Feature: 'VulkanIgnoredHandles' (69), value: 0, default: 0, is overridden: 0
-Feature: 'VirtioGpuNext' (70), value: 0, default: 0, is overridden: 0
-Feature: 'Mac80211hwsimUserspaceManaged' (71), value: 0, default: 0, is overridden: 0
-Feature: 'HardwareDecoder' (72), value: 0, default: 0, is overridden: 0
-Feature: 'VirtioWifi' (73), value: 0, default: 0, is overridden: 0
-Feature: 'ModemSimulator' (74), value: 0, default: 0, is overridden: 0
-Feature: 'VirtioMouse' (75), value: 0, default: 0, is overridden: 0
-Feature: 'VirtconsoleLogcat' (76), value: 0, default: 0, is overridden: 0
-Feature: 'VirtioVsockPipe' (77), value: 0, default: 0, is overridden: 0
-Feature: 'VulkanQueueSubmitWithCommands' (78), value: 0, default: 0, is overridden: 0
-Feature: 'VulkanBatchedDescriptorSetUpdate' (79), value: 0, default: 0, is overridden: 0
-Feature: 'Minigbm' (80), value: 0, default: 0, is overridden: 0
-Feature: 'GnssGrpcV1' (81), value: 0, default: 0, is overridden: 0
-Feature: 'AndroidbootProps' (82), value: 0, default: 0, is overridden: 0
-Feature: 'AndroidbootProps2' (83), value: 0, default: 0, is overridden: 0
-Feature: 'DeviceSkinOverlay' (84), value: 0, default: 0, is overridden: 0
-Feature: 'BluetoothEmulation' (85), value: 0, default: 0, is overridden: 0
-Feature: 'DeviceStateOnBoot' (86), value: 0, default: 0, is overridden: 0
-Feature: 'HWCMultiConfigs' (87), value: 0, default: 0, is overridden: 0
-Feature: 'VirtioSndCard' (88), value: 0, default: 0, is overridden: 0
-Feature: 'VirtioTablet' (89), value: 0, default: 0, is overridden: 0
-Feature: 'VsockSnapshotLoadFixed_b231345789' (90), value: 0, default: 0, is overridden: 0
+Feature: 'VulkanAstcLdrEmulation' (46), value: 0, default: 0, is overridden: 0
+Feature: 'GrallocSync' (47), value: 0, default: 0, is overridden: 0
+Feature: 'EncryptUserData' (48), value: 1, default: 0, is overridden: 1
+Feature: 'IntelPerformanceMonitoringUnit' (49), value: 0, default: 0, is overridden: 0
+Feature: 'GLAsyncSwap' (50), value: 0, default: 0, is overridden: 0
+Feature: 'GLDMA' (51), value: 0, default: 0, is overridden: 0
+Feature: 'GLDMA2' (52), value: 0, default: 0, is overridden: 0
+Feature: 'GLDirectMem' (53), value: 0, default: 0, is overridden: 0
+Feature: 'GLESDynamicVersion' (54), value: 0, default: 0, is overridden: 0
+Feature: 'Wifi' (55), value: 1, default: 0, is overridden: 1
+Feature: 'PlayStoreImage' (56), value: 0, default: 0, is overridden: 0
+Feature: 'LogcatPipe' (57), value: 0, default: 0, is overridden: 0
+Feature: 'SystemAsRoot' (58), value: 0, default: 0, is overridden: 0
+Feature: 'KernelDeviceTreeBlobSupport' (59), value: 0, default: 0, is overridden: 0
+Feature: 'DynamicPartition' (60), value: 0, default: 0, is overridden: 0
+Feature: 'RefCountPipe' (61), value: 0, default: 0, is overridden: 0
+Feature: 'HostComposition' (62), value: 0, default: 0, is overridden: 0
+Feature: 'WifiConfigurable' (63), value: 0, default: 0, is overridden: 0
+Feature: 'VirtioInput' (64), value: 0, default: 0, is overridden: 0
+Feature: 'MultiDisplay' (65), value: 0, default: 0, is overridden: 0
+Feature: 'VulkanNullOptionalStrings' (66), value: 0, default: 0, is overridden: 0
+Feature: 'YUV420888toNV21' (67), value: 0, default: 0, is overridden: 0
+Feature: 'YUVCache' (68), value: 0, default: 0, is overridden: 0
+Feature: 'KeycodeForwarding' (69), value: 0, default: 0, is overridden: 0
+Feature: 'VulkanIgnoredHandles' (70), value: 0, default: 0, is overridden: 0
+Feature: 'VirtioGpuNext' (71), value: 0, default: 0, is overridden: 0
+Feature: 'Mac80211hwsimUserspaceManaged' (72), value: 0, default: 0, is overridden: 0
+Feature: 'HardwareDecoder' (73), value: 0, default: 0, is overridden: 0
+Feature: 'VirtioWifi' (74), value: 0, default: 0, is overridden: 0
+Feature: 'ModemSimulator' (75), value: 0, default: 0, is overridden: 0
+Feature: 'VirtioMouse' (76), value: 0, default: 0, is overridden: 0
+Feature: 'VirtconsoleLogcat' (77), value: 0, default: 0, is overridden: 0
+Feature: 'VirtioVsockPipe' (78), value: 0, default: 0, is overridden: 0
+Feature: 'VulkanQueueSubmitWithCommands' (79), value: 0, default: 0, is overridden: 0
+Feature: 'VulkanBatchedDescriptorSetUpdate' (80), value: 0, default: 0, is overridden: 0
+Feature: 'Minigbm' (81), value: 0, default: 0, is overridden: 0
+Feature: 'GnssGrpcV1' (82), value: 0, default: 0, is overridden: 0
+Feature: 'AndroidbootProps' (83), value: 0, default: 0, is overridden: 0
+Feature: 'AndroidbootProps2' (84), value: 0, default: 0, is overridden: 0
+Feature: 'DeviceSkinOverlay' (85), value: 0, default: 0, is overridden: 0
+Feature: 'BluetoothEmulation' (86), value: 0, default: 0, is overridden: 0
+Feature: 'DeviceStateOnBoot' (87), value: 0, default: 0, is overridden: 0
+Feature: 'HWCMultiConfigs' (88), value: 0, default: 0, is overridden: 0
+Feature: 'VirtioSndCard' (89), value: 0, default: 0, is overridden: 0
+Feature: 'VirtioTablet' (90), value: 0, default: 0, is overridden: 0
+Feature: 'VsockSnapshotLoadFixed_b231345789' (91), value: 0, default: 0, is overridden: 0
)#";
EXPECT_EQ(feature_list, ss.str());
}
diff --git a/android/emu/metrics/protos/studio_stats.proto b/android/emu/metrics/protos/studio_stats.proto
index c3b7bcb8b1..843db3890c 100644
--- a/android/emu/metrics/protos/studio_stats.proto
+++ b/android/emu/metrics/protos/studio_stats.proto
@@ -1510,7 +1510,8 @@ message EmulatorFeatureFlagState {
VULKAN_NATIVE_SWAPCHAIN = 92;
VIRTIO_GPU_FENCE_CONTEXTS = 93;
VSOCK_SNAPSHOT_LOAD_FIXED_B231345789 = 94;
- // Next tag: 95
+ VULKAN_ASTC_LDR_EMULATION = 95;
+ // Next tag: 96
}
// Which features were enabled by default or through the server-side config.
repeated EmulatorFeatureFlag attempted_enabled_feature_flags = 1;