diff options
author | Treehugger Robot <treehugger-gerrit@google.com> | 2022-08-03 01:32:37 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2022-08-03 01:32:37 +0000 |
commit | 3784ee8181ab600b8a1d009a5e03cf9afe78865a (patch) | |
tree | bb3cad9142033f433cf9d88a79f07cf9d5bc850a | |
parent | f5428a8d62304e2c3fc5b0aadccbcba5f3203399 (diff) | |
parent | 00be2bde2061593af4e9f55a42f6bd23b092256a (diff) | |
download | qemu-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
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; |