Merge "goldfish-codecs: Handle decoding to buffer mode"
diff --git a/android-emu/CMakeLists.txt b/android-emu/CMakeLists.txt
index 5b4b280..f490697 100644
--- a/android-emu/CMakeLists.txt
+++ b/android-emu/CMakeLists.txt
@@ -3,7 +3,7 @@
# which will re-generate this file.
android_validate_sha256("${GOLDFISH_DEVICE_ROOT}/android-emu/Android.mk" "e7c9acc2277e7c651d6e722f96705a1fd445441b5ab6bb5b6d5b4c46dddfc702")
set(androidemu_src android/base/AlignedBuf.cpp android/base/files/MemStream.cpp android/base/files/Stream.cpp android/base/files/StreamSerializing.cpp android/base/Pool.cpp android/base/ring_buffer.c android/base/StringFormat.cpp android/base/AndroidSubAllocator.cpp android/base/synchronization/AndroidMessageChannel.cpp android/base/threads/AndroidFunctorThread.cpp android/base/threads/AndroidThreadStore.cpp android/base/threads/AndroidThread_pthread.cpp android/base/threads/AndroidWorkPool.cpp android/base/Tracing.cpp android/utils/debug.c)
-android_add_shared_library(androidemu)
+android_add_library(TARGET androidemu SHARED LICENSE Apache-2.0 SRC android/base/AlignedBuf.cpp android/base/files/MemStream.cpp android/base/files/Stream.cpp android/base/files/StreamSerializing.cpp android/base/Pool.cpp android/base/ring_buffer.c android/base/StringFormat.cpp android/base/AndroidSubAllocator.cpp android/base/synchronization/AndroidMessageChannel.cpp android/base/threads/AndroidFunctorThread.cpp android/base/threads/AndroidThreadStore.cpp android/base/threads/AndroidThread_pthread.cpp android/base/threads/AndroidWorkPool.cpp android/base/Tracing.cpp android/utils/debug.c)
target_include_directories(androidemu PRIVATE ${GOLDFISH_DEVICE_ROOT}/android-emu ${GOLDFISH_DEVICE_ROOT}/./host/include/libOpenglRender ${GOLDFISH_DEVICE_ROOT}/./system/include ${GOLDFISH_DEVICE_ROOT}/./../../../external/qemu/android/android-emugl/guest)
target_compile_definitions(androidemu PRIVATE "-DWITH_GLES2" "-DPLATFORM_SDK_VERSION=29" "-DGOLDFISH_HIDL_GRALLOC" "-DEMULATOR_OPENGL_POST_O=1" "-DHOST_BUILD" "-DANDROID" "-DGL_GLEXT_PROTOTYPES" "-DPAGE_SIZE=4096" "-DGOLDFISH_VULKAN" "-DLOG_TAG=\"androidemu\"")
target_compile_options(androidemu PRIVATE "-fvisibility=default" "-Wno-unused-parameter" "-Wno-missing-field-initializers" "-fstrict-aliasing")
diff --git a/cmake_transform.py b/cmake_transform.py
index 3e8d9c5..3583ec8 100644
--- a/cmake_transform.py
+++ b/cmake_transform.py
@@ -88,9 +88,9 @@
'android_validate_sha256("${GOLDFISH_DEVICE_ROOT}/%s" "%s")' % (mkfile, sha256))
make.append('set(%s_src %s)' % (name, ' '.join(module['src'])))
if module['type'] == 'SHARED_LIBRARY':
- make.append('android_add_shared_library(%s)' % name)
+ make.append('android_add_library(TARGET {} SHARED LICENSE Apache-2.0 SRC {})'.format(name, ' '.join(module['src'])))
elif module['type'] == 'STATIC_LIBRARY':
- make.append('android_add_library(%s)' % name)
+ make.append('android_add_library(TARGET {} LICENSE Apache-2.0 SRC {})'.format(name, ' '.join(module['src'])))
else:
raise ValueError('Unexpected module type: %s' % module['type'])
diff --git a/shared/OpenglCodecCommon/CMakeLists.txt b/shared/OpenglCodecCommon/CMakeLists.txt
index ade4cc2..4528e13 100644
--- a/shared/OpenglCodecCommon/CMakeLists.txt
+++ b/shared/OpenglCodecCommon/CMakeLists.txt
@@ -3,7 +3,7 @@
# which will re-generate this file.
android_validate_sha256("${GOLDFISH_DEVICE_ROOT}/shared/OpenglCodecCommon/Android.mk" "b93e7098601bba92b0e1b4d4a94cee25d2181a9842c7902d5f339c405c862cea")
set(OpenglCodecCommon_host_src GLClientState.cpp GLESTextureUtils.cpp ChecksumCalculator.cpp GLSharedGroup.cpp glUtils.cpp IndexRangeCache.cpp SocketStream.cpp TcpStream.cpp auto_goldfish_dma_context.cpp goldfish_address_space.cpp goldfish_dma_host.cpp qemu_pipe_host.cpp)
-android_add_shared_library(OpenglCodecCommon_host)
+android_add_library(TARGET OpenglCodecCommon_host SHARED LICENSE Apache-2.0 SRC GLClientState.cpp GLESTextureUtils.cpp ChecksumCalculator.cpp GLSharedGroup.cpp glUtils.cpp IndexRangeCache.cpp SocketStream.cpp TcpStream.cpp auto_goldfish_dma_context.cpp goldfish_address_space.cpp goldfish_dma_host.cpp qemu_pipe_host.cpp)
target_include_directories(OpenglCodecCommon_host PRIVATE ${GOLDFISH_DEVICE_ROOT}/shared/OpenglCodecCommon ${GOLDFISH_DEVICE_ROOT}/./host/include/libOpenglRender ${GOLDFISH_DEVICE_ROOT}/./system/include ${GOLDFISH_DEVICE_ROOT}/./../../../external/qemu/android/android-emugl/guest)
target_compile_definitions(OpenglCodecCommon_host PRIVATE "-DWITH_GLES2" "-DPLATFORM_SDK_VERSION=29" "-DGOLDFISH_HIDL_GRALLOC" "-DEMULATOR_OPENGL_POST_O=1" "-DHOST_BUILD" "-DANDROID" "-DGL_GLEXT_PROTOTYPES" "-DPAGE_SIZE=4096" "-DGOLDFISH_VULKAN" "-DLOG_TAG=\"eglCodecCommon\"")
target_compile_options(OpenglCodecCommon_host PRIVATE "-fvisibility=default" "-Wno-unused-parameter" "-Wno-unused-private-field")
diff --git a/system/GLESv1/CMakeLists.txt b/system/GLESv1/CMakeLists.txt
index 5685013..a8dc669 100644
--- a/system/GLESv1/CMakeLists.txt
+++ b/system/GLESv1/CMakeLists.txt
@@ -3,7 +3,7 @@
# which will re-generate this file.
android_validate_sha256("${GOLDFISH_DEVICE_ROOT}/system/GLESv1/Android.mk" "e095cb082e3791719749cfc80b90560afd7348eb0d7895449d2509aa129bea75")
set(GLESv1_CM_emulation_src gl.cpp)
-android_add_shared_library(GLESv1_CM_emulation)
+android_add_library(TARGET GLESv1_CM_emulation SHARED LICENSE Apache-2.0 SRC gl.cpp)
target_include_directories(GLESv1_CM_emulation PRIVATE ${GOLDFISH_DEVICE_ROOT}/system/OpenglSystemCommon/bionic-include ${GOLDFISH_DEVICE_ROOT}/system/OpenglSystemCommon ${GOLDFISH_DEVICE_ROOT}/bionic/libc/private ${GOLDFISH_DEVICE_ROOT}/bionic/libc/platform ${GOLDFISH_DEVICE_ROOT}/system/vulkan_enc ${GOLDFISH_DEVICE_ROOT}/android-emu ${GOLDFISH_DEVICE_ROOT}/system/renderControl_enc ${GOLDFISH_DEVICE_ROOT}/system/GLESv2_enc ${GOLDFISH_DEVICE_ROOT}/system/GLESv1_enc ${GOLDFISH_DEVICE_ROOT}/shared/OpenglCodecCommon ${GOLDFISH_DEVICE_ROOT}/./host/include/libOpenglRender ${GOLDFISH_DEVICE_ROOT}/./system/include ${GOLDFISH_DEVICE_ROOT}/./../../../external/qemu/android/android-emugl/guest)
target_compile_definitions(GLESv1_CM_emulation PRIVATE "-DWITH_GLES2" "-DPLATFORM_SDK_VERSION=29" "-DGOLDFISH_HIDL_GRALLOC" "-DEMULATOR_OPENGL_POST_O=1" "-DHOST_BUILD" "-DANDROID" "-DGL_GLEXT_PROTOTYPES" "-DPAGE_SIZE=4096" "-DGOLDFISH_VULKAN" "-DLOG_TAG=\"GLES_emulation\"")
target_compile_options(GLESv1_CM_emulation PRIVATE "-fvisibility=default" "-Wno-unused-parameter")
diff --git a/system/GLESv1_enc/CMakeLists.txt b/system/GLESv1_enc/CMakeLists.txt
index 2849dcc..8acc4ff 100644
--- a/system/GLESv1_enc/CMakeLists.txt
+++ b/system/GLESv1_enc/CMakeLists.txt
@@ -3,7 +3,7 @@
# which will re-generate this file.
android_validate_sha256("${GOLDFISH_DEVICE_ROOT}/system/GLESv1_enc/Android.mk" "953e6b7371d10eed63a4be555f8f1fb6f347338484a78102fa8f55dff96f5d3b")
set(GLESv1_enc_src GLEncoder.cpp GLEncoderUtils.cpp gl_client_context.cpp gl_enc.cpp gl_entry.cpp)
-android_add_shared_library(GLESv1_enc)
+android_add_library(TARGET GLESv1_enc SHARED LICENSE Apache-2.0 SRC GLEncoder.cpp GLEncoderUtils.cpp gl_client_context.cpp gl_enc.cpp gl_entry.cpp)
target_include_directories(GLESv1_enc PRIVATE ${GOLDFISH_DEVICE_ROOT}/system/GLESv1_enc ${GOLDFISH_DEVICE_ROOT}/shared/OpenglCodecCommon ${GOLDFISH_DEVICE_ROOT}/./host/include/libOpenglRender ${GOLDFISH_DEVICE_ROOT}/./system/include ${GOLDFISH_DEVICE_ROOT}/./../../../external/qemu/android/android-emugl/guest)
target_compile_definitions(GLESv1_enc PRIVATE "-DWITH_GLES2" "-DPLATFORM_SDK_VERSION=29" "-DGOLDFISH_HIDL_GRALLOC" "-DEMULATOR_OPENGL_POST_O=1" "-DHOST_BUILD" "-DANDROID" "-DGL_GLEXT_PROTOTYPES" "-DPAGE_SIZE=4096" "-DGOLDFISH_VULKAN" "-DLOG_TAG=\"emuglGLESv1_enc\"")
target_compile_options(GLESv1_enc PRIVATE "-fvisibility=default" "-Wno-unused-parameter")
diff --git a/system/GLESv2/CMakeLists.txt b/system/GLESv2/CMakeLists.txt
index 0b28934..e2f5f4e 100644
--- a/system/GLESv2/CMakeLists.txt
+++ b/system/GLESv2/CMakeLists.txt
@@ -3,7 +3,7 @@
# which will re-generate this file.
android_validate_sha256("${GOLDFISH_DEVICE_ROOT}/system/GLESv2/Android.mk" "d8f9dda69ec57ad8b7a65f02c3335b16a4724f612dec1d1a2cd793c28c0a10f9")
set(GLESv2_emulation_src gl2.cpp)
-android_add_shared_library(GLESv2_emulation)
+android_add_library(TARGET GLESv2_emulation SHARED LICENSE Apache-2.0 SRC gl2.cpp)
target_include_directories(GLESv2_emulation PRIVATE ${GOLDFISH_DEVICE_ROOT}/system/OpenglSystemCommon/bionic-include ${GOLDFISH_DEVICE_ROOT}/system/OpenglSystemCommon ${GOLDFISH_DEVICE_ROOT}/bionic/libc/private ${GOLDFISH_DEVICE_ROOT}/bionic/libc/platform ${GOLDFISH_DEVICE_ROOT}/system/vulkan_enc ${GOLDFISH_DEVICE_ROOT}/android-emu ${GOLDFISH_DEVICE_ROOT}/system/renderControl_enc ${GOLDFISH_DEVICE_ROOT}/system/GLESv2_enc ${GOLDFISH_DEVICE_ROOT}/system/GLESv1_enc ${GOLDFISH_DEVICE_ROOT}/shared/OpenglCodecCommon ${GOLDFISH_DEVICE_ROOT}/./host/include/libOpenglRender ${GOLDFISH_DEVICE_ROOT}/./system/include ${GOLDFISH_DEVICE_ROOT}/./../../../external/qemu/android/android-emugl/guest)
target_compile_definitions(GLESv2_emulation PRIVATE "-DWITH_GLES2" "-DPLATFORM_SDK_VERSION=29" "-DGOLDFISH_HIDL_GRALLOC" "-DEMULATOR_OPENGL_POST_O=1" "-DHOST_BUILD" "-DANDROID" "-DGL_GLEXT_PROTOTYPES" "-DPAGE_SIZE=4096" "-DGOLDFISH_VULKAN" "-DLOG_TAG=\"GLESv2_emulation\"")
target_compile_options(GLESv2_emulation PRIVATE "-fvisibility=default" "-Wno-unused-parameter")
diff --git a/system/GLESv2_enc/CMakeLists.txt b/system/GLESv2_enc/CMakeLists.txt
index 747a356..72afa76 100644
--- a/system/GLESv2_enc/CMakeLists.txt
+++ b/system/GLESv2_enc/CMakeLists.txt
@@ -3,7 +3,7 @@
# which will re-generate this file.
android_validate_sha256("${GOLDFISH_DEVICE_ROOT}/system/GLESv2_enc/Android.mk" "d4fc971ccdbafbf971253b27bbc2168682b2994476079f4f81fb7a33c27070e0")
set(GLESv2_enc_src GL2EncoderUtils.cpp GL2Encoder.cpp GLESv2Validation.cpp gl2_client_context.cpp gl2_enc.cpp gl2_entry.cpp ../enc_common/IOStream_common.cpp)
-android_add_shared_library(GLESv2_enc)
+android_add_library(TARGET GLESv2_enc SHARED LICENSE Apache-2.0 SRC GL2EncoderUtils.cpp GL2Encoder.cpp GLESv2Validation.cpp gl2_client_context.cpp gl2_enc.cpp gl2_entry.cpp ../enc_common/IOStream_common.cpp)
target_include_directories(GLESv2_enc PRIVATE ${GOLDFISH_DEVICE_ROOT}/shared/OpenglCodecCommon ${GOLDFISH_DEVICE_ROOT}/system/GLESv2_enc ${GOLDFISH_DEVICE_ROOT}/./host/include/libOpenglRender ${GOLDFISH_DEVICE_ROOT}/./system/include ${GOLDFISH_DEVICE_ROOT}/./../../../external/qemu/android/android-emugl/guest)
target_compile_definitions(GLESv2_enc PRIVATE "-DWITH_GLES2" "-DPLATFORM_SDK_VERSION=29" "-DGOLDFISH_HIDL_GRALLOC" "-DEMULATOR_OPENGL_POST_O=1" "-DHOST_BUILD" "-DANDROID" "-DGL_GLEXT_PROTOTYPES" "-DPAGE_SIZE=4096" "-DGOLDFISH_VULKAN" "-DLOG_TAG=\"emuglGLESv2_enc\"")
target_compile_options(GLESv2_enc PRIVATE "-fvisibility=default" "-Wno-unused-parameter" "-Wno-unused-private-field")
diff --git a/system/OpenglSystemCommon/CMakeLists.txt b/system/OpenglSystemCommon/CMakeLists.txt
index 9fd7306..7feb903 100644
--- a/system/OpenglSystemCommon/CMakeLists.txt
+++ b/system/OpenglSystemCommon/CMakeLists.txt
@@ -3,7 +3,7 @@
# which will re-generate this file.
android_validate_sha256("${GOLDFISH_DEVICE_ROOT}/system/OpenglSystemCommon/Android.mk" "6fedb15afaabb2c4e6cd24123f711639d6574b47356b2fa626a668bb497b8977")
set(OpenglSystemCommon_src FormatConversions.cpp HostConnection.cpp QemuPipeStream.cpp ProcessPipe.cpp AddressSpaceStream.cpp ThreadInfo_host.cpp)
-android_add_shared_library(OpenglSystemCommon)
+android_add_library(TARGET OpenglSystemCommon SHARED LICENSE Apache-2.0 SRC FormatConversions.cpp HostConnection.cpp QemuPipeStream.cpp ProcessPipe.cpp AddressSpaceStream.cpp ThreadInfo_host.cpp)
target_include_directories(OpenglSystemCommon PRIVATE ${GOLDFISH_DEVICE_ROOT}/system/OpenglSystemCommon ${GOLDFISH_DEVICE_ROOT}/bionic/libc/platform ${GOLDFISH_DEVICE_ROOT}/bionic/libc/private ${GOLDFISH_DEVICE_ROOT}/system/OpenglSystemCommon/bionic-include ${GOLDFISH_DEVICE_ROOT}/system/vulkan_enc ${GOLDFISH_DEVICE_ROOT}/android-emu ${GOLDFISH_DEVICE_ROOT}/system/renderControl_enc ${GOLDFISH_DEVICE_ROOT}/system/GLESv2_enc ${GOLDFISH_DEVICE_ROOT}/system/GLESv1_enc ${GOLDFISH_DEVICE_ROOT}/shared/OpenglCodecCommon ${GOLDFISH_DEVICE_ROOT}/./host/include/libOpenglRender ${GOLDFISH_DEVICE_ROOT}/./system/include ${GOLDFISH_DEVICE_ROOT}/./../../../external/qemu/android/android-emugl/guest)
target_compile_definitions(OpenglSystemCommon PRIVATE "-DWITH_GLES2" "-DPLATFORM_SDK_VERSION=29" "-DGOLDFISH_HIDL_GRALLOC" "-DEMULATOR_OPENGL_POST_O=1" "-DHOST_BUILD" "-DANDROID" "-DGL_GLEXT_PROTOTYPES" "-DPAGE_SIZE=4096" "-DGOLDFISH_VULKAN")
target_compile_options(OpenglSystemCommon PRIVATE "-fvisibility=default" "-Wno-unused-parameter" "-Wno-unused-variable")
diff --git a/system/OpenglSystemCommon/EmulatorFeatureInfo.h b/system/OpenglSystemCommon/EmulatorFeatureInfo.h
index e20c129..4edf1fd 100644
--- a/system/OpenglSystemCommon/EmulatorFeatureInfo.h
+++ b/system/OpenglSystemCommon/EmulatorFeatureInfo.h
@@ -97,6 +97,9 @@
// GL protocol v2
static const char kAsyncUnmapBuffer[] = "ANDROID_EMU_async_unmap_buffer";
+// virtio-gpu-next
+static const char kVirtioGpuNext[] = "ANDROID_EMU_virtio_gpu_next";
+
// Struct describing available emulator features
struct EmulatorFeatureInfo {
@@ -112,7 +115,8 @@
hasVulkanCreateResourcesWithRequirements(false),
hasVulkanIgnoredHandles(false),
hasYUVCache (false),
- hasAsyncUnmapBuffer (false) { }
+ hasAsyncUnmapBuffer (false),
+ hasVirtioGpuNext (false) { }
SyncImpl syncImpl;
DmaImpl dmaImpl;
@@ -126,6 +130,7 @@
bool hasVulkanIgnoredHandles;
bool hasYUVCache;
bool hasAsyncUnmapBuffer;
+ bool hasVirtioGpuNext;
};
enum HostConnectionType {
diff --git a/system/OpenglSystemCommon/HostConnection.cpp b/system/OpenglSystemCommon/HostConnection.cpp
index f69b1d5..bbe2857 100644
--- a/system/OpenglSystemCommon/HostConnection.cpp
+++ b/system/OpenglSystemCommon/HostConnection.cpp
@@ -613,6 +613,7 @@
queryAndSetVulkanIgnoredHandles(m_rcEnc);
queryAndSetYUVCache(m_rcEnc);
queryAndSetAsyncUnmapBuffer(m_rcEnc);
+ queryAndSetVirtioGpuNext(m_rcEnc);
if (m_processPipe) {
m_processPipe->processPipeInit(m_connectionType, m_rcEnc);
}
@@ -810,3 +811,9 @@
}
}
+void HostConnection::queryAndSetVirtioGpuNext(ExtendedRCEncoderContext* rcEnc) {
+ std::string glExtensions = queryGLExtensions(rcEnc);
+ if (glExtensions.find(kVirtioGpuNext) != std::string::npos) {
+ rcEnc->featureInfo()->hasVirtioGpuNext = true;
+ }
+}
diff --git a/system/OpenglSystemCommon/HostConnection.h b/system/OpenglSystemCommon/HostConnection.h
index 0f262a3..c91af0b 100644
--- a/system/OpenglSystemCommon/HostConnection.h
+++ b/system/OpenglSystemCommon/HostConnection.h
@@ -203,6 +203,7 @@
void queryAndSetVulkanIgnoredHandles(ExtendedRCEncoderContext *rcEnc);
void queryAndSetYUVCache(ExtendedRCEncoderContext *mrcEnc);
void queryAndSetAsyncUnmapBuffer(ExtendedRCEncoderContext *rcEnc);
+ void queryAndSetVirtioGpuNext(ExtendedRCEncoderContext *rcEnc);
private:
HostConnectionType m_connectionType;
diff --git a/system/egl/CMakeLists.txt b/system/egl/CMakeLists.txt
index d3d4b57..25b4cdd 100644
--- a/system/egl/CMakeLists.txt
+++ b/system/egl/CMakeLists.txt
@@ -3,7 +3,7 @@
# which will re-generate this file.
android_validate_sha256("${GOLDFISH_DEVICE_ROOT}/system/egl/Android.mk" "53f944775eac93c4fff6cb2b10ec932462422eb0e4ae0fb616f2f16bb0baf4af")
set(EGL_emulation_src eglDisplay.cpp egl.cpp ClientAPIExts.cpp)
-android_add_shared_library(EGL_emulation)
+android_add_library(TARGET EGL_emulation SHARED LICENSE Apache-2.0 SRC eglDisplay.cpp egl.cpp ClientAPIExts.cpp)
target_include_directories(EGL_emulation PRIVATE ${GOLDFISH_DEVICE_ROOT}/system/OpenglSystemCommon/bionic-include ${GOLDFISH_DEVICE_ROOT}/system/OpenglSystemCommon ${GOLDFISH_DEVICE_ROOT}/bionic/libc/private ${GOLDFISH_DEVICE_ROOT}/bionic/libc/platform ${GOLDFISH_DEVICE_ROOT}/system/vulkan_enc ${GOLDFISH_DEVICE_ROOT}/android-emu ${GOLDFISH_DEVICE_ROOT}/system/renderControl_enc ${GOLDFISH_DEVICE_ROOT}/system/GLESv2_enc ${GOLDFISH_DEVICE_ROOT}/system/GLESv1_enc ${GOLDFISH_DEVICE_ROOT}/shared/OpenglCodecCommon ${GOLDFISH_DEVICE_ROOT}/./host/include/libOpenglRender ${GOLDFISH_DEVICE_ROOT}/./system/include ${GOLDFISH_DEVICE_ROOT}/./../../../external/qemu/android/android-emugl/guest)
target_compile_definitions(EGL_emulation PRIVATE "-DWITH_GLES2" "-DPLATFORM_SDK_VERSION=29" "-DGOLDFISH_HIDL_GRALLOC" "-DEMULATOR_OPENGL_POST_O=1" "-DHOST_BUILD" "-DANDROID" "-DGL_GLEXT_PROTOTYPES" "-DPAGE_SIZE=4096" "-DGOLDFISH_VULKAN" "-DLOG_TAG=\"EGL_emulation\"" "-DEGL_EGLEXT_PROTOTYPES")
target_compile_options(EGL_emulation PRIVATE "-fvisibility=default" "-Wno-unused-parameter" "-Wno-gnu-designator")
diff --git a/system/gralloc/CMakeLists.txt b/system/gralloc/CMakeLists.txt
index 8659f36..cf65352 100644
--- a/system/gralloc/CMakeLists.txt
+++ b/system/gralloc/CMakeLists.txt
@@ -3,7 +3,7 @@
# which will re-generate this file.
android_validate_sha256("${GOLDFISH_DEVICE_ROOT}/system/gralloc/Android.mk" "09618d9293855148fb310e67065028da8c7f6dcf936b02b5695292c82ed4724e")
set(gralloc.goldfish_src gralloc_old.cpp)
-android_add_shared_library(gralloc.goldfish)
+android_add_library(TARGET gralloc.goldfish SHARED LICENSE Apache-2.0 SRC gralloc_old.cpp)
target_include_directories(gralloc.goldfish PRIVATE ${GOLDFISH_DEVICE_ROOT}/system/OpenglSystemCommon/bionic-include ${GOLDFISH_DEVICE_ROOT}/system/OpenglSystemCommon ${GOLDFISH_DEVICE_ROOT}/bionic/libc/private ${GOLDFISH_DEVICE_ROOT}/bionic/libc/platform ${GOLDFISH_DEVICE_ROOT}/system/vulkan_enc ${GOLDFISH_DEVICE_ROOT}/android-emu ${GOLDFISH_DEVICE_ROOT}/system/GLESv2_enc ${GOLDFISH_DEVICE_ROOT}/system/renderControl_enc ${GOLDFISH_DEVICE_ROOT}/system/GLESv1_enc ${GOLDFISH_DEVICE_ROOT}/shared/OpenglCodecCommon ${GOLDFISH_DEVICE_ROOT}/./host/include/libOpenglRender ${GOLDFISH_DEVICE_ROOT}/./system/include ${GOLDFISH_DEVICE_ROOT}/./../../../external/qemu/android/android-emugl/guest)
target_compile_definitions(gralloc.goldfish PRIVATE "-DWITH_GLES2" "-DPLATFORM_SDK_VERSION=29" "-DGOLDFISH_HIDL_GRALLOC" "-DEMULATOR_OPENGL_POST_O=1" "-DHOST_BUILD" "-DANDROID" "-DGL_GLEXT_PROTOTYPES" "-DPAGE_SIZE=4096" "-DGOLDFISH_VULKAN" "-DLOG_TAG=\"gralloc_goldfish\"")
target_compile_options(gralloc.goldfish PRIVATE "-fvisibility=default" "-Wno-unused-parameter" "-Wno-missing-field-initializers" "-Wno-gnu-designator")
@@ -13,7 +13,7 @@
# which will re-generate this file.
android_validate_sha256("${GOLDFISH_DEVICE_ROOT}/system/gralloc/Android.mk" "09618d9293855148fb310e67065028da8c7f6dcf936b02b5695292c82ed4724e")
set(gralloc.ranchu_src gralloc_old.cpp)
-android_add_shared_library(gralloc.ranchu)
+android_add_library(TARGET gralloc.ranchu SHARED LICENSE Apache-2.0 SRC gralloc_old.cpp)
target_include_directories(gralloc.ranchu PRIVATE ${GOLDFISH_DEVICE_ROOT}/system/OpenglSystemCommon/bionic-include ${GOLDFISH_DEVICE_ROOT}/system/OpenglSystemCommon ${GOLDFISH_DEVICE_ROOT}/bionic/libc/private ${GOLDFISH_DEVICE_ROOT}/bionic/libc/platform ${GOLDFISH_DEVICE_ROOT}/system/vulkan_enc ${GOLDFISH_DEVICE_ROOT}/android-emu ${GOLDFISH_DEVICE_ROOT}/system/GLESv2_enc ${GOLDFISH_DEVICE_ROOT}/system/renderControl_enc ${GOLDFISH_DEVICE_ROOT}/system/GLESv1_enc ${GOLDFISH_DEVICE_ROOT}/shared/OpenglCodecCommon ${GOLDFISH_DEVICE_ROOT}/./host/include/libOpenglRender ${GOLDFISH_DEVICE_ROOT}/./system/include ${GOLDFISH_DEVICE_ROOT}/./../../../external/qemu/android/android-emugl/guest)
target_compile_definitions(gralloc.ranchu PRIVATE "-DWITH_GLES2" "-DPLATFORM_SDK_VERSION=29" "-DGOLDFISH_HIDL_GRALLOC" "-DEMULATOR_OPENGL_POST_O=1" "-DHOST_BUILD" "-DANDROID" "-DGL_GLEXT_PROTOTYPES" "-DPAGE_SIZE=4096" "-DGOLDFISH_VULKAN" "-DLOG_TAG=\"gralloc_ranchu\"")
target_compile_options(gralloc.ranchu PRIVATE "-fvisibility=default" "-Wno-unused-parameter" "-Wno-missing-field-initializers" "-Wno-gnu-designator")
diff --git a/system/hals/allocator3.cpp b/system/hals/allocator3.cpp
index e5e182d..6b8bebc 100644
--- a/system/hals/allocator3.cpp
+++ b/system/hals/allocator3.cpp
@@ -399,11 +399,10 @@
}
HostConnectionSession getHostConnectionSession() const {
- return HostConnectionSession(m_hostConn);
+ return HostConnectionSession(m_hostConn.get());
}
- //std::unique_ptr<HostConnection> m_hostConn; // b/142677230
- HostConnection* m_hostConn;
+ std::unique_ptr<HostConnection> m_hostConn;
};
int main(int, char**) {
diff --git a/system/hals/mapper3.cpp b/system/hals/mapper3.cpp
index 99c6514..b48e497 100644
--- a/system/hals/mapper3.cpp
+++ b/system/hals/mapper3.cpp
@@ -42,7 +42,7 @@
static int waitFenceFd(const int fd, const char* logname) {
const int warningTimeout = 5000;
- if (sync_wait(dup(fd), warningTimeout) < 0) {
+ if (sync_wait(fd, warningTimeout) < 0) {
if (errno == ETIME) {
ALOGW("%s: fence %d didn't signal in %d ms", logname, fd, warningTimeout);
if (sync_wait(fd, -1) < 0) {
@@ -586,7 +586,7 @@
}
HostConnectionSession getHostConnectionSession() const {
- return HostConnectionSession(m_hostConn);
+ return HostConnectionSession(m_hostConn.get());
}
static void encodeBufferDescriptorInfo(const BufferDescriptorInfo& d,
@@ -604,8 +604,7 @@
return m_physAddrToOffset + offset;
}
- //std::unique_ptr<HostConnection> m_hostConn; // b/142677230
- HostConnection* m_hostConn;
+ std::unique_ptr<HostConnection> m_hostConn;
uint64_t m_physAddrToOffset;
};
} // namespace
diff --git a/system/renderControl_enc/CMakeLists.txt b/system/renderControl_enc/CMakeLists.txt
index d557a99..c874e25 100644
--- a/system/renderControl_enc/CMakeLists.txt
+++ b/system/renderControl_enc/CMakeLists.txt
@@ -3,7 +3,7 @@
# which will re-generate this file.
android_validate_sha256("${GOLDFISH_DEVICE_ROOT}/system/renderControl_enc/Android.mk" "780a007ac7a3d2255372ddf40e03aeb10e4c759343d2532f6ddf769f4df73810")
set(_renderControl_enc_src renderControl_client_context.cpp renderControl_enc.cpp renderControl_entry.cpp)
-android_add_shared_library(_renderControl_enc)
+android_add_library(TARGET _renderControl_enc SHARED LICENSE Apache-2.0 SRC renderControl_client_context.cpp renderControl_enc.cpp renderControl_entry.cpp)
target_include_directories(_renderControl_enc PRIVATE ${GOLDFISH_DEVICE_ROOT}/shared/OpenglCodecCommon ${GOLDFISH_DEVICE_ROOT}/system/renderControl_enc ${GOLDFISH_DEVICE_ROOT}/./host/include/libOpenglRender ${GOLDFISH_DEVICE_ROOT}/./system/include ${GOLDFISH_DEVICE_ROOT}/./../../../external/qemu/android/android-emugl/guest)
target_compile_definitions(_renderControl_enc PRIVATE "-DWITH_GLES2" "-DPLATFORM_SDK_VERSION=29" "-DGOLDFISH_HIDL_GRALLOC" "-DEMULATOR_OPENGL_POST_O=1" "-DHOST_BUILD" "-DANDROID" "-DGL_GLEXT_PROTOTYPES" "-DPAGE_SIZE=4096" "-DGOLDFISH_VULKAN")
target_compile_options(_renderControl_enc PRIVATE "-fvisibility=default" "-Wno-unused-parameter" "-Wno-unused-function")
diff --git a/system/vulkan/CMakeLists.txt b/system/vulkan/CMakeLists.txt
index c980bda..a71c07f 100644
--- a/system/vulkan/CMakeLists.txt
+++ b/system/vulkan/CMakeLists.txt
@@ -3,7 +3,7 @@
# which will re-generate this file.
android_validate_sha256("${GOLDFISH_DEVICE_ROOT}/system/vulkan/Android.mk" "691427017f29de6b082ad25cb73b87443d4072a04b4316897bb92983674ad5bf")
set(vulkan.ranchu_src func_table.cpp goldfish_vulkan.cpp)
-android_add_shared_library(vulkan.ranchu)
+android_add_library(TARGET vulkan.ranchu SHARED LICENSE Apache-2.0 SRC func_table.cpp goldfish_vulkan.cpp)
target_include_directories(vulkan.ranchu PRIVATE ${GOLDFISH_DEVICE_ROOT}/system/OpenglSystemCommon/bionic-include ${GOLDFISH_DEVICE_ROOT}/system/OpenglSystemCommon ${GOLDFISH_DEVICE_ROOT}/bionic/libc/private ${GOLDFISH_DEVICE_ROOT}/bionic/libc/platform ${GOLDFISH_DEVICE_ROOT}/system/vulkan_enc ${GOLDFISH_DEVICE_ROOT}/android-emu ${GOLDFISH_DEVICE_ROOT}/system/renderControl_enc ${GOLDFISH_DEVICE_ROOT}/system/GLESv2_enc ${GOLDFISH_DEVICE_ROOT}/system/GLESv1_enc ${GOLDFISH_DEVICE_ROOT}/shared/OpenglCodecCommon ${GOLDFISH_DEVICE_ROOT}/system/vulkan ${GOLDFISH_DEVICE_ROOT}/./host/include/libOpenglRender ${GOLDFISH_DEVICE_ROOT}/./system/include ${GOLDFISH_DEVICE_ROOT}/./../../../external/qemu/android/android-emugl/guest ${GOLDFISH_DEVICE_ROOT}/./../../../external/qemu/android/android-emugl/host/include)
target_compile_definitions(vulkan.ranchu PRIVATE "-DWITH_GLES2" "-DPLATFORM_SDK_VERSION=29" "-DGOLDFISH_HIDL_GRALLOC" "-DEMULATOR_OPENGL_POST_O=1" "-DHOST_BUILD" "-DANDROID" "-DGL_GLEXT_PROTOTYPES" "-DPAGE_SIZE=4096" "-DGOLDFISH_VULKAN" "-DLOG_TAG=\"goldfish_vulkan\"" "-DVK_USE_PLATFORM_ANDROID_KHR" "-DVK_NO_PROTOTYPES")
target_compile_options(vulkan.ranchu PRIVATE "-fvisibility=default" "-Wno-unused-parameter" "-Wno-missing-field-initializers" "-fvisibility=hidden" "-fstrict-aliasing" "-Wno-unused-function")
diff --git a/system/vulkan/func_table.cpp b/system/vulkan/func_table.cpp
index c9dd80d..80f586f 100644
--- a/system/vulkan/func_table.cpp
+++ b/system/vulkan/func_table.cpp
@@ -5216,6 +5216,39 @@
return vkCreateBufferWithRequirementsGOOGLE_VkResult_return;
}
#endif
+#ifdef VK_GOOGLE_address_space_info
+static VkResult entry_vkGetMemoryHostAddressInfoGOOGLE(
+ VkDevice device,
+ VkDeviceMemory memory,
+ uint64_t* pAddress,
+ uint64_t* pSize,
+ uint64_t* pHostmemId)
+{
+ AEMU_SCOPED_TRACE("vkGetMemoryHostAddressInfoGOOGLE");
+ auto vkEnc = HostConnection::get()->vkEncoder();
+ VkResult vkGetMemoryHostAddressInfoGOOGLE_VkResult_return = (VkResult)0;
+ vkGetMemoryHostAddressInfoGOOGLE_VkResult_return = vkEnc->vkGetMemoryHostAddressInfoGOOGLE(device, memory, pAddress, pSize, pHostmemId);
+ return vkGetMemoryHostAddressInfoGOOGLE_VkResult_return;
+}
+static VkResult dynCheck_entry_vkGetMemoryHostAddressInfoGOOGLE(
+ VkDevice device,
+ VkDeviceMemory memory,
+ uint64_t* pAddress,
+ uint64_t* pSize,
+ uint64_t* pHostmemId)
+{
+ auto resources = ResourceTracker::get();
+ if (!resources->hasDeviceExtension(device, "VK_GOOGLE_address_space_info"))
+ {
+ sOnInvalidDynamicallyCheckedCall("vkGetMemoryHostAddressInfoGOOGLE", "VK_GOOGLE_address_space_info");
+ }
+ AEMU_SCOPED_TRACE("vkGetMemoryHostAddressInfoGOOGLE");
+ auto vkEnc = HostConnection::get()->vkEncoder();
+ VkResult vkGetMemoryHostAddressInfoGOOGLE_VkResult_return = (VkResult)0;
+ vkGetMemoryHostAddressInfoGOOGLE_VkResult_return = vkEnc->vkGetMemoryHostAddressInfoGOOGLE(device, memory, pAddress, pSize, pHostmemId);
+ return vkGetMemoryHostAddressInfoGOOGLE_VkResult_return;
+}
+#endif
void* goldfish_vulkan_get_proc_address(const char* name){
#ifdef VK_VERSION_1_0
if (!strcmp(name, "vkCreateInstance"))
@@ -6661,6 +6694,12 @@
return nullptr;
}
#endif
+#ifdef VK_GOOGLE_address_space_info
+ if (!strcmp(name, "vkGetMemoryHostAddressInfoGOOGLE"))
+ {
+ return nullptr;
+ }
+#endif
return nullptr;
}
void* goldfish_vulkan_get_instance_proc_address(VkInstance instance, const char* name){
@@ -8203,6 +8242,12 @@
return (void*)dynCheck_entry_vkCreateBufferWithRequirementsGOOGLE;
}
#endif
+#ifdef VK_GOOGLE_address_space_info
+ if (!strcmp(name, "vkGetMemoryHostAddressInfoGOOGLE"))
+ {
+ return (void*)dynCheck_entry_vkGetMemoryHostAddressInfoGOOGLE;
+ }
+#endif
return nullptr;
}
void* goldfish_vulkan_get_device_proc_address(VkDevice device, const char* name){
@@ -9814,6 +9859,13 @@
return hasExt ? (void*)entry_vkCreateBufferWithRequirementsGOOGLE : nullptr;
}
#endif
+#ifdef VK_GOOGLE_address_space_info
+ if (!strcmp(name, "vkGetMemoryHostAddressInfoGOOGLE"))
+ {
+ bool hasExt = resources->hasDeviceExtension(device, "VK_GOOGLE_address_space_info");
+ return hasExt ? (void*)entry_vkGetMemoryHostAddressInfoGOOGLE : nullptr;
+ }
+#endif
return nullptr;
}
diff --git a/system/vulkan/func_table.h b/system/vulkan/func_table.h
index 05658cf..91ffd65 100644
--- a/system/vulkan/func_table.h
+++ b/system/vulkan/func_table.h
@@ -286,6 +286,8 @@
#endif
#ifdef VK_GOOGLE_create_resources_with_requirements
#endif
+#ifdef VK_GOOGLE_address_space_info
+#endif
void* goldfish_vulkan_get_proc_address(const char* name);
void* goldfish_vulkan_get_instance_proc_address(VkInstance instance, const char* name);
void* goldfish_vulkan_get_device_proc_address(VkDevice device, const char* name);
diff --git a/system/vulkan_enc/Android.mk b/system/vulkan_enc/Android.mk
index 2d280be..984db7f 100644
--- a/system/vulkan_enc/Android.mk
+++ b/system/vulkan_enc/Android.mk
@@ -26,11 +26,15 @@
LOCAL_C_INCLUDES += \
$(LOCAL_PATH) \
$(LOCAL_PATH)/../vulkan_enc \
+ external/libdrm \
+ external/minigbm/cros_gralloc \
LOCAL_HEADER_LIBRARIES += \
hwvulkan_headers \
vulkan_headers \
+LOCAL_SHARED_LIBRARIES += libdrm
+
endif
LOCAL_CFLAGS += \
diff --git a/system/vulkan_enc/CMakeLists.txt b/system/vulkan_enc/CMakeLists.txt
index 051a85a..dec0c66 100644
--- a/system/vulkan_enc/CMakeLists.txt
+++ b/system/vulkan_enc/CMakeLists.txt
@@ -1,9 +1,9 @@
# This is an autogenerated file! Do not edit!
# instead run make from .../device/generic/goldfish-opengl
# which will re-generate this file.
-android_validate_sha256("${GOLDFISH_DEVICE_ROOT}/system/vulkan_enc/Android.mk" "c6bf087d25d8e5fa86d79a5ace0bde2b5b79a583e6cc12f0f2ab6a2131e29ab8")
+android_validate_sha256("${GOLDFISH_DEVICE_ROOT}/system/vulkan_enc/Android.mk" "a4b1fb11cf3e68cc49f055258b6b590798eeecb2d3e6e565c78549a39a341911")
set(vulkan_enc_src AndroidHardwareBuffer.cpp HostVisibleMemoryVirtualization.cpp Resources.cpp Validation.cpp VulkanStreamGuest.cpp VulkanHandleMapping.cpp ResourceTracker.cpp VkEncoder.cpp goldfish_vk_extension_structs_guest.cpp goldfish_vk_marshaling_guest.cpp goldfish_vk_deepcopy_guest.cpp goldfish_vk_handlemap_guest.cpp goldfish_vk_transform_guest.cpp)
-android_add_shared_library(vulkan_enc)
+android_add_library(TARGET vulkan_enc SHARED LICENSE Apache-2.0 SRC AndroidHardwareBuffer.cpp HostVisibleMemoryVirtualization.cpp Resources.cpp Validation.cpp VulkanStreamGuest.cpp VulkanHandleMapping.cpp ResourceTracker.cpp VkEncoder.cpp goldfish_vk_extension_structs_guest.cpp goldfish_vk_marshaling_guest.cpp goldfish_vk_deepcopy_guest.cpp goldfish_vk_handlemap_guest.cpp goldfish_vk_transform_guest.cpp)
target_include_directories(vulkan_enc PRIVATE ${GOLDFISH_DEVICE_ROOT}/system/renderControl_enc ${GOLDFISH_DEVICE_ROOT}/android-emu ${GOLDFISH_DEVICE_ROOT}/shared/OpenglCodecCommon ${GOLDFISH_DEVICE_ROOT}/system/vulkan_enc ${GOLDFISH_DEVICE_ROOT}/./host/include/libOpenglRender ${GOLDFISH_DEVICE_ROOT}/./system/include ${GOLDFISH_DEVICE_ROOT}/./../../../external/qemu/android/android-emugl/guest ${GOLDFISH_DEVICE_ROOT}/./../../../external/qemu/android/android-emugl/host/include ${GOLDFISH_DEVICE_ROOT}/./../../../external/qemu/android/android-emugl/host/include/vulkan)
target_compile_definitions(vulkan_enc PRIVATE "-DWITH_GLES2" "-DPLATFORM_SDK_VERSION=29" "-DGOLDFISH_HIDL_GRALLOC" "-DEMULATOR_OPENGL_POST_O=1" "-DHOST_BUILD" "-DANDROID" "-DGL_GLEXT_PROTOTYPES" "-DPAGE_SIZE=4096" "-DGOLDFISH_VULKAN" "-DLOG_TAG=\"goldfish_vulkan\"" "-DVK_ANDROID_native_buffer" "-DVK_GOOGLE_address_space" "-DVK_USE_PLATFORM_ANDROID_KHR" "-DVK_NO_PROTOTYPES" "-D__ANDROID_API__=28")
target_compile_options(vulkan_enc PRIVATE "-fvisibility=default" "-Wno-unused-parameter" "-Wno-missing-field-initializers" "-Werror" "-fstrict-aliasing")
diff --git a/system/vulkan_enc/HostVisibleMemoryVirtualization.cpp b/system/vulkan_enc/HostVisibleMemoryVirtualization.cpp
index b6bd91a..2db7e6a 100644
--- a/system/vulkan_enc/HostVisibleMemoryVirtualization.cpp
+++ b/system/vulkan_enc/HostVisibleMemoryVirtualization.cpp
@@ -19,6 +19,8 @@
#include "Resources.h"
#include "VkEncoder.h"
+#include "../OpenglSystemCommon/EmulatorFeatureInfo.h"
+
#include <log/log.h>
#include <set>
@@ -62,7 +64,7 @@
void initHostVisibleMemoryVirtualizationInfo(
VkPhysicalDevice physicalDevice,
const VkPhysicalDeviceMemoryProperties* memoryProperties,
- bool hasDirectMem,
+ const EmulatorFeatureInfo* featureInfo,
HostVisibleMemoryVirtualizationInfo* info_out) {
if (info_out->initialized) return;
@@ -73,10 +75,12 @@
info_out->memoryPropertiesSupported =
canFitVirtualHostVisibleMemoryInfo(memoryProperties);
- info_out->directMemSupported = hasDirectMem;
+ info_out->directMemSupported = featureInfo->hasDirectMem;
+ info_out->virtioGpuNextSupported = featureInfo->hasVirtioGpuNext;
if (!info_out->memoryPropertiesSupported ||
- !info_out->directMemSupported) {
+ (!info_out->directMemSupported &&
+ !info_out->virtioGpuNextSupported)) {
info_out->virtualizationSupported = false;
return;
}
diff --git a/system/vulkan_enc/HostVisibleMemoryVirtualization.h b/system/vulkan_enc/HostVisibleMemoryVirtualization.h
index 84e39bb..305dca2 100644
--- a/system/vulkan_enc/HostVisibleMemoryVirtualization.h
+++ b/system/vulkan_enc/HostVisibleMemoryVirtualization.h
@@ -18,6 +18,8 @@
#define VIRTUAL_HOST_VISIBLE_HEAP_SIZE 512ULL * (1048576ULL)
+struct EmulatorFeatureInfo;
+
namespace android {
namespace base {
namespace guest {
@@ -37,6 +39,7 @@
bool memoryPropertiesSupported;
bool directMemSupported;
bool virtualizationSupported;
+ bool virtioGpuNextSupported;
VkPhysicalDevice physicalDevice;
@@ -58,7 +61,7 @@
void initHostVisibleMemoryVirtualizationInfo(
VkPhysicalDevice physicalDevice,
const VkPhysicalDeviceMemoryProperties* memoryProperties,
- bool directMemSupported,
+ const EmulatorFeatureInfo* featureInfo,
HostVisibleMemoryVirtualizationInfo* info_out);
bool isHostVisibleMemoryTypeIndexForGuest(
diff --git a/system/vulkan_enc/ResourceTracker.cpp b/system/vulkan_enc/ResourceTracker.cpp
index 9857952..809732c 100644
--- a/system/vulkan_enc/ResourceTracker.cpp
+++ b/system/vulkan_enc/ResourceTracker.cpp
@@ -33,6 +33,13 @@
#include "AndroidHardwareBuffer.h"
+#ifndef HOST_BUILD
+#include <drm/virtgpu_drm.h>
+#include <xf86drm.h>
+#endif
+
+#include "VirtioGpuNext.h"
+
#endif // VK_USE_PLATFORM_ANDROID_KHR
#ifdef VK_USE_PLATFORM_FUCHSIA
@@ -61,6 +68,7 @@
}
VkResult importAndroidHardwareBuffer(
+ Gralloc *grallocHelper,
const VkImportAndroidHardwareBufferInfoANDROID* info,
struct AHardwareBuffer **importOut) {
return VK_SUCCESS;
@@ -85,6 +93,7 @@
}
VkResult getAndroidHardwareBufferPropertiesANDROID(
+ Gralloc *grallocHelper,
const goldfish_vk::HostVisibleMemoryVirtualizationInfo*,
VkDevice,
const AHardwareBuffer*,
@@ -238,6 +247,11 @@
std::set<std::string> enabledExtensions;
};
+ struct VirtioGpuHostmemResourceInfo {
+ uint32_t resourceId = 0;
+ int primeFd = -1;
+ };
+
struct VkDeviceMemory_Info {
VkDeviceSize allocationSize = 0;
VkDeviceSize mappedSize = 0;
@@ -247,6 +261,7 @@
bool directMapped = false;
GoldfishAddressSpaceBlock*
goldfishAddressSpaceBlock = nullptr;
+ VirtioGpuHostmemResourceInfo resInfo;
SubAlloc subAlloc;
AHardwareBuffer* ahw = nullptr;
zx_handle_t vmoHandle = ZX_HANDLE_INVALID;
@@ -268,6 +283,9 @@
VkDeviceSize currentBackingSize = 0;
bool baseRequirementsKnown = false;
VkMemoryRequirements baseRequirements;
+#ifdef VK_USE_PLATFORM_FUCHSIA
+ bool isSysmemBackedMemory = false;
+#endif
};
struct VkBuffer_Info {
@@ -482,7 +500,7 @@
info.memProps = memProps;
initHostVisibleMemoryVirtualizationInfo(
physdev, &memProps,
- mFeatureInfo->hasDirectMem,
+ mFeatureInfo.get(),
&mHostVisibleMemoryVirtInfo);
info.apiVersion = props.apiVersion;
@@ -617,6 +635,13 @@
if (mFeatureInfo->hasVulkanIgnoredHandles) {
mStreamFeatureBits |= VULKAN_STREAM_FEATURE_IGNORED_HANDLES_BIT;
}
+
+#if !defined(HOST_BUILD) && defined(VK_USE_PLATFORM_ANDROID_KHR)
+ if (mFeatureInfo->hasVirtioGpuNext) {
+ ALOGD("%s: has virtio-gpu-next; create hostmem rendernode\n", __func__);
+ mRendernodeFd = drmOpenRender(128 /* RENDERNODE_MINOR */);
+ }
+#endif
}
void setThreadingCallbacks(const ResourceTracker::ThreadingCallbacks& callbacks) {
@@ -1140,7 +1165,7 @@
initHostVisibleMemoryVirtualizationInfo(
physdev,
out,
- mFeatureInfo->hasDirectMem,
+ mFeatureInfo.get(),
&mHostVisibleMemoryVirtInfo);
if (mHostVisibleMemoryVirtInfo.virtualizationSupported) {
@@ -1156,7 +1181,7 @@
initHostVisibleMemoryVirtualizationInfo(
physdev,
&out->memoryProperties,
- mFeatureInfo->hasDirectMem,
+ mFeatureInfo.get(),
&mHostVisibleMemoryVirtInfo);
if (mHostVisibleMemoryVirtInfo.virtualizationSupported) {
@@ -1626,11 +1651,67 @@
uint64_t directMappedAddr = 0;
- mLock.unlock();
- VkResult directMapResult =
- enc->vkMapMemoryIntoAddressSpaceGOOGLE(
- device, hostMemAlloc.memory, &directMappedAddr);
- mLock.lock();
+
+ VkResult directMapResult = VK_SUCCESS;
+ if (mFeatureInfo->hasDirectMem) {
+ mLock.unlock();
+ directMapResult =
+ enc->vkMapMemoryIntoAddressSpaceGOOGLE(
+ device, hostMemAlloc.memory, &directMappedAddr);
+ mLock.lock();
+ } else if (mFeatureInfo->hasVirtioGpuNext) {
+#if !defined(HOST_BUILD) && defined(VK_USE_PLATFORM_ANDROID_KHR)
+ uint64_t hvaSizeId[3];
+
+ mLock.unlock();
+ enc->vkGetMemoryHostAddressInfoGOOGLE(
+ device, hostMemAlloc.memory,
+ &hvaSizeId[0], &hvaSizeId[1], &hvaSizeId[2]);
+ ALOGD("%s: hvaOff, size: 0x%llx 0x%llx id: 0x%llx\n", __func__,
+ (unsigned long long)hvaSizeId[0],
+ (unsigned long long)hvaSizeId[1],
+ (unsigned long long)hvaSizeId[2]);
+ mLock.lock();
+
+ struct drm_virtgpu_resource_create_v2 drm_rc_v2 = { 0 };
+ drm_rc_v2.args = (uint64_t)&hvaSizeId[2];
+ drm_rc_v2.args_size = sizeof(uint64_t);
+ drm_rc_v2.size = hvaSizeId[1];
+ drm_rc_v2.flags = VIRTGPU_RESOURCE_TYPE_HOST;
+
+ int res = drmIoctl(
+ mRendernodeFd, DRM_IOCTL_VIRTGPU_RESOURCE_CREATE_V2, &drm_rc_v2);
+
+ if (res) {
+ ALOGE("%s: Failed to resource create v2: sterror: %s errno: %d\n", __func__,
+ strerror(errno), errno);
+ abort();
+ }
+
+ struct drm_virtgpu_map map_info = {
+ .handle = drm_rc_v2.bo_handle,
+ };
+
+ res = drmIoctl(mRendernodeFd, DRM_IOCTL_VIRTGPU_MAP, &map_info);
+ if (res) {
+ ALOGE("%s: Failed to virtgpu map: sterror: %s errno: %d\n", __func__,
+ strerror(errno), errno);
+ abort();
+ }
+
+ directMappedAddr = (uint64_t)(uintptr_t)
+ mmap64(0, hvaSizeId[1], PROT_WRITE, MAP_SHARED, mRendernodeFd, map_info.offset);
+
+ if (!directMappedAddr) {
+ ALOGE("%s: mmap of virtio gpu resource failed\n", __func__);
+ abort();
+ }
+
+ // add the host's page offset
+ directMappedAddr += (uint64_t)(uintptr_t)(hvaSizeId[0]) & (PAGE_SIZE - 1);
+ directMapResult = VK_SUCCESS;
+#endif // VK_USE_PLATFORM_ANDROID_KHR
+ }
if (directMapResult != VK_SUCCESS) {
hostMemAlloc.initialized = true;
@@ -2208,6 +2289,8 @@
}
transformExternalResourceMemoryRequirementsForGuest(reqs);
+
+ setMemoryRequirementsForSysmemBackedImage(image, reqs);
}
void transformBufferMemoryRequirementsForGuestLocked(
@@ -2248,6 +2331,8 @@
transformExternalResourceMemoryRequirementsForGuest(&reqs2->memoryRequirements);
+ setMemoryRequirementsForSysmemBackedImage(image, &reqs2->memoryRequirements);
+
VkMemoryDedicatedRequirements* dedicatedReqs =
vk_find_struct<VkMemoryDedicatedRequirements>(reqs2);
@@ -2334,6 +2419,7 @@
#ifdef VK_USE_PLATFORM_FUCHSIA
const VkBufferCollectionImageCreateInfoFUCHSIA* extBufferCollectionPtr =
vk_find_struct<VkBufferCollectionImageCreateInfoFUCHSIA>(pCreateInfo);
+ bool isSysmemBackedMemory = false;
if (extBufferCollectionPtr) {
auto collection = reinterpret_cast<fuchsia::sysmem::BufferCollectionSyncPtr*>(
extBufferCollectionPtr->collection);
@@ -2363,6 +2449,7 @@
ALOGE("CreateColorBuffer failed: %d:%d", status, status2);
}
}
+ isSysmemBackedMemory = true;
}
#endif
@@ -2397,11 +2484,16 @@
info.externalCreateInfo = *extImgCiPtr;
}
+#ifdef VK_USE_PLATFORM_FUCHSIA
+ if (isSysmemBackedMemory) {
+ info.isSysmemBackedMemory = true;
+ }
+#endif
+
if (info.baseRequirementsKnown) {
transformImageMemoryRequirementsForGuestLocked(*pImage, &memReqs);
info.baseRequirements = memReqs;
}
-
return res;
}
@@ -2896,6 +2988,24 @@
enc->vkDestroyImage(device, image, pAllocator);
}
+ void setMemoryRequirementsForSysmemBackedImage(
+ VkImage image, VkMemoryRequirements *pMemoryRequirements) {
+#ifdef VK_USE_PLATFORM_FUCHSIA
+ auto it = info_VkImage.find(image);
+ if (it == info_VkImage.end()) return;
+ auto& info = it->second;
+ if (info.isSysmemBackedMemory) {
+ auto width = info.createInfo.extent.width;
+ auto height = info.createInfo.extent.height;
+ pMemoryRequirements->size = width * height * 4;
+ }
+#else
+ // Bypass "unused parameter" checks.
+ (void)image;
+ (void)pMemoryRequirements;
+#endif
+ }
+
void on_vkGetImageMemoryRequirements(
void *context, VkDevice device, VkImage image,
VkMemoryRequirements *pMemoryRequirements) {
@@ -2923,6 +3033,7 @@
transformImageMemoryRequirementsForGuestLocked(
image, pMemoryRequirements);
+
info.baseRequirementsKnown = true;
info.baseRequirements = *pMemoryRequirements;
}
@@ -3480,6 +3591,7 @@
}
void unwrap_vkAcquireImageANDROID_nativeFenceFd(int fd, int*) {
+#ifdef VK_USE_PLATFORM_ANDROID_KHR
if (fd != -1) {
// Implicit Synchronization
sync_wait(fd, 3000);
@@ -3496,6 +3608,7 @@
// Therefore, assume contract where we need to close fd in this driver
close(fd);
}
+#endif
}
// Action of vkMapMemoryIntoAddressSpaceGOOGLE:
@@ -3987,6 +4100,9 @@
std::vector<VkExtensionProperties> mHostDeviceExtensions;
int mSyncDeviceFd = -1;
+#ifdef VK_USE_PLATFORM_ANDROID_KHR
+ int mRendernodeFd = -1;
+#endif
#ifdef VK_USE_PLATFORM_FUCHSIA
fuchsia::hardware::goldfish::ControlDeviceSyncPtr mControlDevice;
diff --git a/system/vulkan_enc/VirtioGpuNext.h b/system/vulkan_enc/VirtioGpuNext.h
new file mode 100644
index 0000000..4037973
--- /dev/null
+++ b/system/vulkan_enc/VirtioGpuNext.h
@@ -0,0 +1,60 @@
+// Copyright (C) 2020 The Android Open Source Project
+// Copyright (C) 2020 Google Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+#pragma once
+
+#ifndef HOST_BUILD
+#include "drm.h"
+#endif
+
+#define DRM_VIRTGPU_RESOURCE_CREATE_V2 0x0a
+
+struct drm_virtgpu_resource_create_v2 {
+#define VIRTGPU_RESOURCE_TYPE_MASK 0x0000f
+#define VIRTGPU_RESOURCE_TYPE_DEFAULT_V1 0x00001
+#define VIRTGPU_RESOURCE_TYPE_DEFAULT_V2 0x00002
+#define VIRTGPU_RESOURCE_TYPE_HOST 0x00003
+#define VIRTGPU_RESOURCE_TYPE_GUEST 0x00004
+/*
+ * Error cases:
+ * HOST_VISIBLE_BIT without VIRTGPU_RESOURCE_TYPE_HOST
+ */
+#define VIRTGPU_RESOURCE_HOST_MASK 0x000f0
+#define VIRTGPU_RESOURCE_HOST_VISIBLE_BIT 0x00010
+
+#define VIRTGPU_RESOURCE_GUEST_MASK 0x00f00
+#define VIRTGPU_RESOURCE_GUEST_SHARED_BIT 0x00100
+#define VIRTGPU_RESOURCE_GUEST_EMULATED_COHERENT_BIT 0x00200
+
+#define VIRTGPU_RESOURCE_CACHE_MASK 0x0f000
+#define VIRTGPU_RESOURCE_CACHE_CACHED 0x01000
+#define VIRTGPU_RESOURCE_CACHE_UNCACHED 0x02000
+#define VIRTGPU_RESOURCE_CACHE_WC 0x03000
+/*
+ * VIRTGPU_RESOURCE_EXPORTABLE_BIT - host resource *can* be exported as an fd.
+ */
+#define VIRTGPU_RESOURCE_EXPORT_MASK 0xf0000
+#define VIRTGPU_RESOURCE_EXPORTABLE_BIT 0x10000
+ uint32_t flags;
+ uint32_t args_size;
+ uint64_t size;
+ uint32_t bo_handle;
+ uint32_t res_handle;
+ uint64_t args;
+};
+
+#define DRM_IOCTL_VIRTGPU_RESOURCE_CREATE_V2 \
+ DRM_IOWR(DRM_COMMAND_BASE + DRM_VIRTGPU_RESOURCE_CREATE_V2, \
+ struct drm_virtgpu_resource_create_v2)
+
diff --git a/system/vulkan_enc/VkEncoder.cpp b/system/vulkan_enc/VkEncoder.cpp
index 3b57678..b5b6eea 100644
--- a/system/vulkan_enc/VkEncoder.cpp
+++ b/system/vulkan_enc/VkEncoder.cpp
@@ -23305,5 +23305,133 @@
}
#endif
+#ifdef VK_GOOGLE_address_space_info
+VkResult VkEncoder::vkGetMemoryHostAddressInfoGOOGLE(
+ VkDevice device,
+ VkDeviceMemory memory,
+ uint64_t* pAddress,
+ uint64_t* pSize,
+ uint64_t* pHostmemId)
+{
+ AutoLock encoderLock(mImpl->lock);
+ AEMU_SCOPED_TRACE("vkGetMemoryHostAddressInfoGOOGLE encode");
+ mImpl->log("start vkGetMemoryHostAddressInfoGOOGLE");
+ auto stream = mImpl->stream();
+ auto countingStream = mImpl->countingStream();
+ auto resources = mImpl->resources();
+ auto pool = mImpl->pool();
+ stream->setHandleMapping(resources->unwrapMapping());
+ VkDevice local_device;
+ VkDeviceMemory local_memory;
+ local_device = device;
+ local_memory = memory;
+ mImpl->resources()->deviceMemoryTransform_tohost((VkDeviceMemory*)&local_memory, 1, (VkDeviceSize*)nullptr, 0, (VkDeviceSize*)nullptr, 0, (uint32_t*)nullptr, 0, (uint32_t*)nullptr, 0);
+ countingStream->rewind();
+ {
+ uint64_t cgen_var_1534;
+ countingStream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1534, 1);
+ countingStream->write((uint64_t*)&cgen_var_1534, 1 * 8);
+ uint64_t cgen_var_1535;
+ countingStream->handleMapping()->mapHandles_VkDeviceMemory_u64(&local_memory, &cgen_var_1535, 1);
+ countingStream->write((uint64_t*)&cgen_var_1535, 1 * 8);
+ // WARNING PTR CHECK
+ uint64_t cgen_var_1536 = (uint64_t)(uintptr_t)pAddress;
+ countingStream->putBe64(cgen_var_1536);
+ if (pAddress)
+ {
+ countingStream->write((uint64_t*)pAddress, sizeof(uint64_t));
+ }
+ // WARNING PTR CHECK
+ uint64_t cgen_var_1537 = (uint64_t)(uintptr_t)pSize;
+ countingStream->putBe64(cgen_var_1537);
+ if (pSize)
+ {
+ countingStream->write((uint64_t*)pSize, sizeof(uint64_t));
+ }
+ // WARNING PTR CHECK
+ uint64_t cgen_var_1538 = (uint64_t)(uintptr_t)pHostmemId;
+ countingStream->putBe64(cgen_var_1538);
+ if (pHostmemId)
+ {
+ countingStream->write((uint64_t*)pHostmemId, sizeof(uint64_t));
+ }
+ }
+ uint32_t packetSize_vkGetMemoryHostAddressInfoGOOGLE = 4 + 4 + (uint32_t)countingStream->bytesWritten();
+ countingStream->rewind();
+ uint32_t opcode_vkGetMemoryHostAddressInfoGOOGLE = OP_vkGetMemoryHostAddressInfoGOOGLE;
+ stream->write(&opcode_vkGetMemoryHostAddressInfoGOOGLE, sizeof(uint32_t));
+ stream->write(&packetSize_vkGetMemoryHostAddressInfoGOOGLE, sizeof(uint32_t));
+ uint64_t cgen_var_1539;
+ stream->handleMapping()->mapHandles_VkDevice_u64(&local_device, &cgen_var_1539, 1);
+ stream->write((uint64_t*)&cgen_var_1539, 1 * 8);
+ uint64_t cgen_var_1540;
+ stream->handleMapping()->mapHandles_VkDeviceMemory_u64(&local_memory, &cgen_var_1540, 1);
+ stream->write((uint64_t*)&cgen_var_1540, 1 * 8);
+ // WARNING PTR CHECK
+ uint64_t cgen_var_1541 = (uint64_t)(uintptr_t)pAddress;
+ stream->putBe64(cgen_var_1541);
+ if (pAddress)
+ {
+ stream->write((uint64_t*)pAddress, sizeof(uint64_t));
+ }
+ // WARNING PTR CHECK
+ uint64_t cgen_var_1542 = (uint64_t)(uintptr_t)pSize;
+ stream->putBe64(cgen_var_1542);
+ if (pSize)
+ {
+ stream->write((uint64_t*)pSize, sizeof(uint64_t));
+ }
+ // WARNING PTR CHECK
+ uint64_t cgen_var_1543 = (uint64_t)(uintptr_t)pHostmemId;
+ stream->putBe64(cgen_var_1543);
+ if (pHostmemId)
+ {
+ stream->write((uint64_t*)pHostmemId, sizeof(uint64_t));
+ }
+ AEMU_SCOPED_TRACE("vkGetMemoryHostAddressInfoGOOGLE readParams");
+ // WARNING PTR CHECK
+ uint64_t* check_pAddress;
+ check_pAddress = (uint64_t*)(uintptr_t)stream->getBe64();
+ if (pAddress)
+ {
+ if (!(check_pAddress))
+ {
+ fprintf(stderr, "fatal: pAddress inconsistent between guest and host\n");
+ }
+ stream->read((uint64_t*)pAddress, sizeof(uint64_t));
+ }
+ // WARNING PTR CHECK
+ uint64_t* check_pSize;
+ check_pSize = (uint64_t*)(uintptr_t)stream->getBe64();
+ if (pSize)
+ {
+ if (!(check_pSize))
+ {
+ fprintf(stderr, "fatal: pSize inconsistent between guest and host\n");
+ }
+ stream->read((uint64_t*)pSize, sizeof(uint64_t));
+ }
+ // WARNING PTR CHECK
+ uint64_t* check_pHostmemId;
+ check_pHostmemId = (uint64_t*)(uintptr_t)stream->getBe64();
+ if (pHostmemId)
+ {
+ if (!(check_pHostmemId))
+ {
+ fprintf(stderr, "fatal: pHostmemId inconsistent between guest and host\n");
+ }
+ stream->read((uint64_t*)pHostmemId, sizeof(uint64_t));
+ }
+ AEMU_SCOPED_TRACE("vkGetMemoryHostAddressInfoGOOGLE returnUnmarshal");
+ VkResult vkGetMemoryHostAddressInfoGOOGLE_VkResult_return = (VkResult)0;
+ stream->read(&vkGetMemoryHostAddressInfoGOOGLE_VkResult_return, sizeof(VkResult));
+ countingStream->clearPool();
+ stream->clearPool();
+ pool->freeAll();
+ mImpl->log("finish vkGetMemoryHostAddressInfoGOOGLE");;
+ return vkGetMemoryHostAddressInfoGOOGLE_VkResult_return;
+}
+
+#endif
} // namespace goldfish_vk
diff --git a/system/vulkan_enc/VkEncoder.h b/system/vulkan_enc/VkEncoder.h
index dd2cd64..4cab74f 100644
--- a/system/vulkan_enc/VkEncoder.h
+++ b/system/vulkan_enc/VkEncoder.h
@@ -1807,6 +1807,14 @@
VkBuffer* pBuffer,
VkMemoryRequirements* pMemoryRequirements);
#endif
+#ifdef VK_GOOGLE_address_space_info
+ VkResult vkGetMemoryHostAddressInfoGOOGLE(
+ VkDevice device,
+ VkDeviceMemory memory,
+ uint64_t* pAddress,
+ uint64_t* pSize,
+ uint64_t* pHostmemId);
+#endif
private:
class Impl;
diff --git a/system/vulkan_enc/goldfish_vk_deepcopy_guest.cpp b/system/vulkan_enc/goldfish_vk_deepcopy_guest.cpp
index 1513661..917ca59 100644
--- a/system/vulkan_enc/goldfish_vk_deepcopy_guest.cpp
+++ b/system/vulkan_enc/goldfish_vk_deepcopy_guest.cpp
@@ -6386,6 +6386,8 @@
#endif
#ifdef VK_GOOGLE_create_resources_with_requirements
#endif
+#ifdef VK_GOOGLE_address_space_info
+#endif
void deepcopy_extension_struct(
Pool* pool,
const void* structExtension,
diff --git a/system/vulkan_enc/goldfish_vk_deepcopy_guest.h b/system/vulkan_enc/goldfish_vk_deepcopy_guest.h
index ca6d6dc..b1ffaa6 100644
--- a/system/vulkan_enc/goldfish_vk_deepcopy_guest.h
+++ b/system/vulkan_enc/goldfish_vk_deepcopy_guest.h
@@ -2028,5 +2028,7 @@
#endif
#ifdef VK_GOOGLE_create_resources_with_requirements
#endif
+#ifdef VK_GOOGLE_address_space_info
+#endif
} // namespace goldfish_vk
diff --git a/system/vulkan_enc/goldfish_vk_extension_structs_guest.cpp b/system/vulkan_enc/goldfish_vk_extension_structs_guest.cpp
index 481ce6c..08bba9f 100644
--- a/system/vulkan_enc/goldfish_vk_extension_structs_guest.cpp
+++ b/system/vulkan_enc/goldfish_vk_extension_structs_guest.cpp
@@ -284,6 +284,8 @@
#endif
#ifdef VK_GOOGLE_create_resources_with_requirements
#endif
+#ifdef VK_GOOGLE_address_space_info
+#endif
uint32_t goldfish_vk_struct_type(
const void* structExtension)
{
diff --git a/system/vulkan_enc/goldfish_vk_extension_structs_guest.h b/system/vulkan_enc/goldfish_vk_extension_structs_guest.h
index 7df1ac1..4fa4e3c 100644
--- a/system/vulkan_enc/goldfish_vk_extension_structs_guest.h
+++ b/system/vulkan_enc/goldfish_vk_extension_structs_guest.h
@@ -301,5 +301,7 @@
#endif
#ifdef VK_GOOGLE_create_resources_with_requirements
#endif
+#ifdef VK_GOOGLE_address_space_info
+#endif
} // namespace goldfish_vk
diff --git a/system/vulkan_enc/goldfish_vk_handlemap_guest.cpp b/system/vulkan_enc/goldfish_vk_handlemap_guest.cpp
index fbc6a48..56adc3a 100644
--- a/system/vulkan_enc/goldfish_vk_handlemap_guest.cpp
+++ b/system/vulkan_enc/goldfish_vk_handlemap_guest.cpp
@@ -4750,6 +4750,8 @@
#endif
#ifdef VK_GOOGLE_create_resources_with_requirements
#endif
+#ifdef VK_GOOGLE_address_space_info
+#endif
void handlemap_extension_struct(
VulkanHandleMapping* handlemap,
void* structExtension_out)
diff --git a/system/vulkan_enc/goldfish_vk_handlemap_guest.h b/system/vulkan_enc/goldfish_vk_handlemap_guest.h
index 911ff2f..8785741 100644
--- a/system/vulkan_enc/goldfish_vk_handlemap_guest.h
+++ b/system/vulkan_enc/goldfish_vk_handlemap_guest.h
@@ -1681,5 +1681,7 @@
#endif
#ifdef VK_GOOGLE_create_resources_with_requirements
#endif
+#ifdef VK_GOOGLE_address_space_info
+#endif
} // namespace goldfish_vk
diff --git a/system/vulkan_enc/goldfish_vk_marshaling_guest.cpp b/system/vulkan_enc/goldfish_vk_marshaling_guest.cpp
index 1ef4d04..24b8112 100644
--- a/system/vulkan_enc/goldfish_vk_marshaling_guest.cpp
+++ b/system/vulkan_enc/goldfish_vk_marshaling_guest.cpp
@@ -13613,6 +13613,8 @@
#endif
#ifdef VK_GOOGLE_create_resources_with_requirements
#endif
+#ifdef VK_GOOGLE_address_space_info
+#endif
void marshal_extension_struct(
VulkanStreamGuest* vkStream,
const void* structExtension)
@@ -16388,6 +16390,12 @@
return "OP_vkCreateBufferWithRequirementsGOOGLE";
}
#endif
+#ifdef VK_GOOGLE_address_space_info
+ case OP_vkGetMemoryHostAddressInfoGOOGLE:
+ {
+ return "OP_vkGetMemoryHostAddressInfoGOOGLE";
+ }
+#endif
default:
{
return "OP_UNKNOWN_API_CALL";
diff --git a/system/vulkan_enc/goldfish_vk_marshaling_guest.h b/system/vulkan_enc/goldfish_vk_marshaling_guest.h
index ad7f8f3..da9e961 100644
--- a/system/vulkan_enc/goldfish_vk_marshaling_guest.h
+++ b/system/vulkan_enc/goldfish_vk_marshaling_guest.h
@@ -3394,6 +3394,9 @@
#define OP_vkCreateImageWithRequirementsGOOGLE 20325
#define OP_vkCreateBufferWithRequirementsGOOGLE 20326
#endif
+#ifdef VK_GOOGLE_address_space_info
+#define OP_vkGetMemoryHostAddressInfoGOOGLE 20327
+#endif
const char* api_opcode_to_string(
const uint32_t opcode);
diff --git a/system/vulkan_enc/goldfish_vk_private_defs.h b/system/vulkan_enc/goldfish_vk_private_defs.h
index b967d89..dd0c155 100644
--- a/system/vulkan_enc/goldfish_vk_private_defs.h
+++ b/system/vulkan_enc/goldfish_vk_private_defs.h
@@ -115,6 +115,10 @@
typedef VkResult (VKAPI_PTR *PFN_vkRegisterImageColorBufferGOOGLE)(VkDevice device, VkImage image, uint32_t colorBuffer);
typedef VkResult (VKAPI_PTR *PFN_vkRegisterBufferColorBufferGOOGLE)(VkDevice device, VkBuffer image, uint32_t colorBuffer);
+#define VK_GOOGLE_address_space_info 1
+
+typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryHostAddressInfoGOOGLE)(VkDevice device, VkDeviceMemory memory, uint64_t* pAddress, uint64_t* pSize);
+
#define VK_ANDROID_external_memory_android_hardware_buffer 1
struct AHardwareBuffer;
struct VkAndroidHardwareBufferPropertiesANDROID;
diff --git a/system/vulkan_enc/goldfish_vk_transform_guest.cpp b/system/vulkan_enc/goldfish_vk_transform_guest.cpp
index d06135e..9e7fbf5 100644
--- a/system/vulkan_enc/goldfish_vk_transform_guest.cpp
+++ b/system/vulkan_enc/goldfish_vk_transform_guest.cpp
@@ -8947,6 +8947,8 @@
#endif
#ifdef VK_GOOGLE_create_resources_with_requirements
#endif
+#ifdef VK_GOOGLE_address_space_info
+#endif
void transform_tohost_extension_struct(
ResourceTracker* resourceTracker,
void* structExtension_out)
diff --git a/system/vulkan_enc/goldfish_vk_transform_guest.h b/system/vulkan_enc/goldfish_vk_transform_guest.h
index 217284e..6511666 100644
--- a/system/vulkan_enc/goldfish_vk_transform_guest.h
+++ b/system/vulkan_enc/goldfish_vk_transform_guest.h
@@ -3069,5 +3069,7 @@
#endif
#ifdef VK_GOOGLE_create_resources_with_requirements
#endif
+#ifdef VK_GOOGLE_address_space_info
+#endif
} // namespace goldfish_vk