Add Android host build support
... as Cuttlefish would like to move SwiftShader out of the guest
Android virtual machine and onto the host to avoid the need for
sepolicy hacks to enable executable memory.
Bug: b/242184599
Test: lunch aosp_cf_x86_64_phone-userdebug && m
Test: Android presubmit on aosp/2528699
Change-Id: Ic04f421fea68d2f0a1f96486076ec3e781db78e0
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/71369
Reviewed-by: Chris Forbes <chrisforbes@google.com>
Tested-by: Jason Macnak <natsu@google.com>
Commit-Queue: Jason Macnak <natsu@google.com>
Kokoro-Result: kokoro <noreply+kokoro@google.com>
diff --git a/Android.bp b/Android.bp
index 6931936..6a0d6ff 100644
--- a/Android.bp
+++ b/Android.bp
@@ -63,7 +63,6 @@
cppflags: [
"-Woverloaded-virtual",
- "-DVK_USE_PLATFORM_ANDROID_KHR",
"-DVK_EXPORT= ",
],
cpp_std: "c++17",
@@ -82,6 +81,11 @@
},
target: {
+ android: {
+ cppflags: [
+ "-DVK_USE_PLATFORM_ANDROID_KHR",
+ ],
+ },
host: {
cppflags: [
"-fno-rtti",
diff --git a/src/Android.bp b/src/Android.bp
index 023157c..7bf68f7 100644
--- a/src/Android.bp
+++ b/src/Android.bp
@@ -26,6 +26,8 @@
cc_defaults {
name: "libswiftshadervk_llvm_defaults",
+ host_supported: true,
+
header_libs: [
"swiftshader_platform_headers",
],
@@ -82,6 +84,7 @@
cc_defaults {
name: "libvk_swiftshader_defaults",
+ host_supported: true,
vendor: true,
defaults: [ "swiftshader_common" ],
@@ -91,11 +94,6 @@
"-D__STDC_LIMIT_MACROS",
"-D__STDC_CONSTANT_MACROS",
"-D__STDC_FORMAT_MACROS",
- "-DHAVE_GRALLOC1",
- "-DHAVE_GRALLOC3",
- "-DHAVE_GRALLOC4",
- // FIXME: Use <android/api-level.h> instead?
- "-DANDROID_PLATFORM_SDK_VERSION=10000",
"-Wno-implicit-fallthrough",
"-Wno-unused-parameter",
"-Wno-unused-local-typedef",
@@ -117,8 +115,6 @@
local_include_dirs: [ "Vulkan" ],
- version_script: "Vulkan/android_vk_swiftshader.lds",
-
generated_headers: [ "commit_header" ],
target: {
@@ -143,6 +139,17 @@
static_libs: [
"libarect",
],
+ cflags: [
+ "-DHAVE_GRALLOC1",
+ "-DHAVE_GRALLOC3",
+ "-DHAVE_GRALLOC4",
+ // FIXME: Use <android/api-level.h> instead?
+ "-DANDROID_PLATFORM_SDK_VERSION=10000",
+ ],
+ version_script: "Vulkan/android_vk_swiftshader.lds",
+ },
+ host: {
+ version_script: "Vulkan/android_host_vk_swiftshader.lds",
},
},
}
@@ -150,6 +157,8 @@
cc_library_static {
name: "swiftshader_debug",
+ host_supported: true,
+
vendor_available: true,
cflags: [
@@ -174,7 +183,6 @@
cflags: [
"-DLOG_TAG=\"swiftshader\"",
- "-DSWIFTSHADER_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER",
"-DSWIFTSHADER_ENABLE_ASTC", // TODO(b/150130101)
//"-DSWIFTSHADER_DEVICE_MEMORY_REPORT",
],
@@ -183,7 +191,6 @@
"System/Build.cpp",
"System/Configurator.cpp",
"System/CPUID.cpp",
- "System/GrallocAndroid.cpp",
"System/Half.cpp",
"System/Linux/MemFd.cpp",
"System/Math.cpp",
@@ -193,7 +200,41 @@
"System/Timer.cpp",
"Device/*.cpp",
"Pipeline/*.cpp",
- "Vulkan/*.cpp",
+ "Vulkan/libVulkan.cpp",
+ "Vulkan/main.cpp",
+ "Vulkan/VkBuffer.cpp",
+ "Vulkan/VkBufferView.cpp",
+ "Vulkan/VkCommandBuffer.cpp",
+ "Vulkan/VkCommandPool.cpp",
+ "Vulkan/VkDebugUtilsMessenger.cpp",
+ "Vulkan/VkDescriptorPool.cpp",
+ "Vulkan/VkDescriptorSet.cpp",
+ "Vulkan/VkDescriptorSetLayout.cpp",
+ "Vulkan/VkDescriptorUpdateTemplate.cpp",
+ "Vulkan/VkDevice.cpp",
+ "Vulkan/VkDeviceMemory.cpp",
+ "Vulkan/VkDeviceMemoryExternalHost.cpp",
+ "Vulkan/VkFormat.cpp",
+ "Vulkan/VkFramebuffer.cpp",
+ "Vulkan/VkGetProcAddress.cpp",
+ "Vulkan/VkImage.cpp",
+ "Vulkan/VkImageView.cpp",
+ "Vulkan/VkInstance.cpp",
+ "Vulkan/VkMemory.cpp",
+ "Vulkan/VkPhysicalDevice.cpp",
+ "Vulkan/VkPipelineCache.cpp",
+ "Vulkan/VkPipeline.cpp",
+ "Vulkan/VkPipelineLayout.cpp",
+ "Vulkan/VkPromotedExtensions.cpp",
+ "Vulkan/VkQueryPool.cpp",
+ "Vulkan/VkQueue.cpp",
+ "Vulkan/VkRenderPass.cpp",
+ "Vulkan/VkSampler.cpp",
+ "Vulkan/VkSemaphore.cpp",
+ "Vulkan/VkShaderModule.cpp",
+ "Vulkan/VkSpecializationInfo.cpp",
+ "Vulkan/VkStringify.cpp",
+ "Vulkan/VkTimelineSemaphore.cpp",
"WSI/HeadlessSurfaceKHR.cpp",
"WSI/VkSurfaceKHR.cpp",
],
@@ -209,6 +250,26 @@
"external/swiftshader/third_party/SPIRV-Headers/include",
"external/swiftshader/include",
],
+
+ target: {
+ android: {
+ srcs: [
+ "System/GrallocAndroid.cpp",
+ "Vulkan/VkDeviceMemoryExternalAndroid.cpp",
+ ],
+ cflags: [
+ "-DSWIFTSHADER_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER",
+ ],
+ },
+ host: {
+ srcs: [
+ "WSI/VkSwapchainKHR.cpp",
+ ],
+ cflags: [
+ "-DSWIFTSHADER_EXTERNAL_MEMORY_OPAQUE_FD",
+ ],
+ },
+ },
}
cc_library_shared {
@@ -245,3 +306,10 @@
"libvk_swiftshader_defaults",
],
}
+
+filegroup {
+ name: "swiftshader_icd_json_template",
+ srcs: [
+ "Vulkan/vk_swiftshader_icd.json.tmpl",
+ ],
+}
diff --git a/src/Vulkan/android_host_vk_swiftshader.lds b/src/Vulkan/android_host_vk_swiftshader.lds
new file mode 100644
index 0000000..d9663ed
--- /dev/null
+++ b/src/Vulkan/android_host_vk_swiftshader.lds
@@ -0,0 +1,274 @@
+{
+global:
+ # Loader-ICD interface functions
+ vk_icdGetInstanceProcAddr;
+ vk_icdNegotiateLoaderICDInterfaceVersion;
+
+ # Vulkan 1.0 API entry functions
+ vkCreateInstance;
+ vkDestroyInstance;
+ vkEnumeratePhysicalDevices;
+ vkGetPhysicalDeviceFeatures;
+ vkGetPhysicalDeviceFormatProperties;
+ vkGetPhysicalDeviceImageFormatProperties;
+ vkGetPhysicalDeviceProperties;
+ vkGetPhysicalDeviceQueueFamilyProperties;
+ vkGetPhysicalDeviceMemoryProperties;
+ vkGetInstanceProcAddr;
+ vkGetDeviceProcAddr;
+ vkCreateDevice;
+ vkDestroyDevice;
+ vkEnumerateInstanceExtensionProperties;
+ vkEnumerateDeviceExtensionProperties;
+ vkEnumerateInstanceLayerProperties;
+ vkEnumerateDeviceLayerProperties;
+ vkGetDeviceQueue;
+ vkQueueSubmit;
+ vkQueueWaitIdle;
+ vkDeviceWaitIdle;
+ vkAllocateMemory;
+ vkFreeMemory;
+ vkMapMemory;
+ vkUnmapMemory;
+ vkFlushMappedMemoryRanges;
+ vkInvalidateMappedMemoryRanges;
+ vkGetDeviceMemoryCommitment;
+ vkBindBufferMemory;
+ vkBindImageMemory;
+ vkGetBufferMemoryRequirements;
+ vkGetImageMemoryRequirements;
+ vkGetImageSparseMemoryRequirements;
+ vkGetPhysicalDeviceSparseImageFormatProperties;
+ vkQueueBindSparse;
+ vkCreateFence;
+ vkDestroyFence;
+ vkResetFences;
+ vkGetFenceStatus;
+ vkWaitForFences;
+ vkCreateSemaphore;
+ vkDestroySemaphore;
+ vkCreateEvent;
+ vkDestroyEvent;
+ vkGetEventStatus;
+ vkSetEvent;
+ vkResetEvent;
+ vkCreateQueryPool;
+ vkDestroyQueryPool;
+ vkGetQueryPoolResults;
+ vkCreateBuffer;
+ vkDestroyBuffer;
+ vkCreateBufferView;
+ vkDestroyBufferView;
+ vkCreateImage;
+ vkDestroyImage;
+ vkGetImageSubresourceLayout;
+ vkCreateImageView;
+ vkDestroyImageView;
+ vkCreateShaderModule;
+ vkDestroyShaderModule;
+ vkCreatePipelineCache;
+ vkDestroyPipelineCache;
+ vkGetPipelineCacheData;
+ vkMergePipelineCaches;
+ vkCreateGraphicsPipelines;
+ vkCreateComputePipelines;
+ vkDestroyPipeline;
+ vkCreatePipelineLayout;
+ vkDestroyPipelineLayout;
+ vkCreateSampler;
+ vkDestroySampler;
+ vkCreateDescriptorSetLayout;
+ vkDestroyDescriptorSetLayout;
+ vkCreateDescriptorPool;
+ vkDestroyDescriptorPool;
+ vkResetDescriptorPool;
+ vkAllocateDescriptorSets;
+ vkFreeDescriptorSets;
+ vkUpdateDescriptorSets;
+ vkCreateFramebuffer;
+ vkDestroyFramebuffer;
+ vkCreateRenderPass;
+ vkDestroyRenderPass;
+ vkGetRenderAreaGranularity;
+ vkCreateCommandPool;
+ vkDestroyCommandPool;
+ vkResetCommandPool;
+ vkAllocateCommandBuffers;
+ vkFreeCommandBuffers;
+ vkBeginCommandBuffer;
+ vkEndCommandBuffer;
+ vkResetCommandBuffer;
+ vkCmdBindPipeline;
+ vkCmdSetViewport;
+ vkCmdSetScissor;
+ vkCmdSetLineWidth;
+ vkCmdSetDepthBias;
+ vkCmdSetBlendConstants;
+ vkCmdSetDepthBounds;
+ vkCmdSetStencilCompareMask;
+ vkCmdSetStencilWriteMask;
+ vkCmdSetStencilReference;
+ vkCmdBindDescriptorSets;
+ vkCmdBindIndexBuffer;
+ vkCmdBindVertexBuffers;
+ vkCmdDraw;
+ vkCmdDrawIndexed;
+ vkCmdDrawIndirect;
+ vkCmdDrawIndexedIndirect;
+ vkCmdDispatch;
+ vkCmdDispatchIndirect;
+ vkCmdCopyBuffer;
+ vkCmdCopyImage;
+ vkCmdBlitImage;
+ vkCmdCopyBufferToImage;
+ vkCmdCopyImageToBuffer;
+ vkCmdUpdateBuffer;
+ vkCmdFillBuffer;
+ vkCmdClearColorImage;
+ vkCmdClearDepthStencilImage;
+ vkCmdClearAttachments;
+ vkCmdResolveImage;
+ vkCmdSetEvent;
+ vkCmdResetEvent;
+ vkCmdWaitEvents;
+ vkCmdPipelineBarrier;
+ vkCmdBeginQuery;
+ vkCmdEndQuery;
+ vkCmdResetQueryPool;
+ vkCmdWriteTimestamp;
+ vkCmdCopyQueryPoolResults;
+ vkCmdPushConstants;
+ vkCmdBeginRenderPass;
+ vkCmdNextSubpass;
+ vkCmdEndRenderPass;
+ vkCmdExecuteCommands;
+ vkDestroySurfaceKHR;
+ vkGetPhysicalDeviceSurfaceSupportKHR;
+ vkGetPhysicalDeviceSurfaceCapabilitiesKHR;
+ vkGetPhysicalDeviceSurfaceFormatsKHR;
+
+ # VK_KHR_get_surface_capabilities2
+ vkGetPhysicalDeviceSurfaceCapabilities2KHR;
+ vkGetPhysicalDeviceSurfaceFormats2KHR;
+
+ # VK_EXT_swapchain_maintenance1
+ vkReleaseSwapchainImagesEXT;
+
+ # VK_KHR_surface
+ vkGetPhysicalDeviceSurfacePresentModesKHR;
+ vkCreateSwapchainKHR;
+ vkDestroySwapchainKHR;
+ vkGetSwapchainImagesKHR;
+ vkAcquireNextImageKHR;
+ vkQueuePresentKHR;
+
+ # VK_KHR_display
+ #vkGetPhysicalDeviceDisplayPropertiesKHR;
+ #vkGetPhysicalDeviceDisplayPlanePropertiesKHR;
+ #vkGetDisplayPlaneSupportedDisplaysKHR;
+ #vkGetDisplayModePropertiesKHR;
+ #vkCreateDisplayModeKHR;
+ #vkGetDisplayPlaneCapabilitiesKHR;
+ #vkCreateDisplayPlaneSurfaceKHR;
+
+ # VK_KHR_display_swapchain
+ #vkCreateSharedSwapchainsKHR;
+
+ # Vulkan 1.1 API entry functions
+ vkEnumerateInstanceVersion;
+ vkEnumeratePhysicalDeviceGroups;
+ vkGetPhysicalDeviceFeatures2;
+ vkGetPhysicalDeviceProperties2;
+ vkGetPhysicalDeviceFormatProperties2;
+ vkGetPhysicalDeviceQueueFamilyProperties2;
+ vkGetPhysicalDeviceMemoryProperties2;
+ vkGetPhysicalDeviceSparseImageFormatProperties2;
+ vkGetPhysicalDeviceExternalBufferProperties;
+ vkGetPhysicalDeviceExternalSemaphoreProperties;
+ vkGetPhysicalDeviceExternalFenceProperties;
+ vkBindBufferMemory2;
+ vkBindImageMemory2;
+ vkGetDeviceGroupPeerMemoryFeatures;
+ vkCmdSetDeviceMask;
+ vkCmdDispatchBase;
+ vkGetImageMemoryRequirements2;
+ vkGetBufferMemoryRequirements2;
+ vkTrimCommandPool;
+ vkGetDeviceQueue2;
+ vkCreateSamplerYcbcrConversion;
+ vkDestroySamplerYcbcrConversion;
+ vkGetDescriptorSetLayoutSupport;
+ vkGetDeviceGroupPresentCapabilitiesKHR;
+ vkGetDeviceGroupSurfacePresentModesKHR;
+ vkGetPhysicalDevicePresentRectanglesKHR;
+ vkAcquireNextImage2KHR;
+ vkCreateDescriptorUpdateTemplate;
+ vkDestroyDescriptorUpdateTemplate;
+ vkUpdateDescriptorSetWithTemplate;
+
+ # VK_KHR_get_display_properties2
+ #vkGetPhysicalDeviceDisplayProperties2KHR;
+ #vkGetPhysicalDeviceDisplayPlaneProperties2KHR;
+ #vkGetDisplayModeProperties2KHR;
+ #vkGetDisplayPlaneCapabilities2KHR;
+
+ # Vulkan 1.2 API entry functions
+ vkGetImageSparseMemoryRequirements2;
+ vkGetPhysicalDeviceImageFormatProperties2;
+
+ vkCreateRenderPass2;
+ vkCmdBeginRenderPass2;
+ vkCmdNextSubpass2;
+ vkCmdEndRenderPass2;
+ vkCmdDrawIndirectCount;
+ vkCmdDrawIndexedIndirectCount;
+ vkGetSemaphoreCounterValue;
+ vkWaitSemaphores;
+ vkSignalSemaphore;
+ vkGetBufferDeviceAddress;
+ vkGetBufferOpaqueCaptureAddress;
+ vkGetDeviceMemoryOpaqueCaptureAddress;
+ vkResetQueryPool;
+
+ # Vulkan 1.3 API entry functions
+ vkCmdBeginRendering;
+ vkCmdBindVertexBuffers2;
+ vkCmdBlitImage2;
+ vkCmdCopyBuffer2;
+ vkCmdCopyBufferToImage2;
+ vkCmdCopyImage2;
+ vkCmdCopyImageToBuffer2;
+ vkCmdEndRendering;
+ vkCmdPipelineBarrier2;
+ vkCmdResetEvent2;
+ vkCmdResolveImage2;
+ vkCmdSetCullMode;
+ vkCmdSetDepthBiasEnable;
+ vkCmdSetDepthBoundsTestEnable;
+ vkCmdSetDepthCompareOp;
+ vkCmdSetDepthTestEnable;
+ vkCmdSetDepthWriteEnable;
+ vkCmdSetEvent2;
+ vkCmdSetFrontFace;
+ vkCmdSetPrimitiveRestartEnable;
+ vkCmdSetPrimitiveTopology;
+ vkCmdSetRasterizerDiscardEnable;
+ vkCmdSetScissorWithCount;
+ vkCmdSetStencilOp;
+ vkCmdSetStencilTestEnable;
+ vkCmdSetViewportWithCount;
+ vkCmdWaitEvents2;
+ vkCmdWriteTimestamp2;
+ vkCreatePrivateDataSlot;
+ vkDestroyPrivateDataSlot;
+ vkGetDeviceBufferMemoryRequirements;
+ vkGetDeviceImageMemoryRequirements;
+ vkGetDeviceImageSparseMemoryRequirements;
+ vkGetPhysicalDeviceToolProperties;
+ vkGetPrivateData;
+ vkQueueSubmit2;
+ vkSetPrivateData;
+
+local:
+ *;
+};
diff --git a/third_party/SPIRV-Tools/Android.bp b/third_party/SPIRV-Tools/Android.bp
index 3739ae0..a760d5d 100644
--- a/third_party/SPIRV-Tools/Android.bp
+++ b/third_party/SPIRV-Tools/Android.bp
@@ -125,6 +125,7 @@
cc_library_static {
name: "swiftshader_spirv-tools",
+ host_supported: true,
vendor_available: true,
srcs: [
"source/*.cpp",
diff --git a/third_party/astc-encoder/Android.bp b/third_party/astc-encoder/Android.bp
index 9139f28..5767809 100644
--- a/third_party/astc-encoder/Android.bp
+++ b/third_party/astc-encoder/Android.bp
@@ -36,6 +36,8 @@
cc_library_static {
name: "swiftshader_astc",
+ host_supported:true,
+
vendor_available: true,
cflags: [
diff --git a/third_party/marl/Android.bp b/third_party/marl/Android.bp
index 139efaf..38c5643 100644
--- a/third_party/marl/Android.bp
+++ b/third_party/marl/Android.bp
@@ -35,6 +35,7 @@
cc_library_static {
name: "swiftshader_marl",
+ host_supported: true,
vendor_available: true,
srcs: [
"src/debug.cpp",