gfxstream: gfxstreamCapset --> vulkanCapset
We couple everything as one giant gfxstream capset, and also have
a renderControl path for versioning.
Long term, it makes sense to nuke renderControl path (which controls
many legacy GLES bits) and rely on a virtgpu-style versioning scheme
[each context type gets it's one capset].
Some capability sets are experimental. For example, GFXSTREAM_COMPOSER.
However, Fuchsia for example does rip out parts of HostConnection
and use in it's display controller. Probably have a cross-platform
API that performs that functions would a long-term clean solution.
BUG=297245651
TEST=compile
Change-Id: Ie1f18ea7a5ff7e1a616c1d8a9b733aa6441aacef
diff --git a/common/GfxstreamEnd2EndTests.cpp b/common/GfxstreamEnd2EndTests.cpp
index 43a6487..0350338 100644
--- a/common/GfxstreamEnd2EndTests.cpp
+++ b/common/GfxstreamEnd2EndTests.cpp
@@ -265,21 +265,21 @@
int64_t TestingVirtGpuDevice::getDeviceHandle() { return -1; }
VirtGpuCaps TestingVirtGpuDevice::getCaps() {
- VirtGpuCaps caps = {
- .params = {
- [kParam3D] = 1,
- [kParamCapsetFix] = 1,
- [kParamResourceBlob] = 1,
- [kParamHostVisible] = 1,
- [kParamCrossDevice] = 0,
- [kParamContextInit] = 1,
- [kParamSupportedCapsetIds] = 0,
- [kParamCreateGuestHandle] = 0,
- },
+ VirtGpuCaps caps = {
+ .params =
+ {
+ [kParam3D] = 1,
+ [kParamCapsetFix] = 1,
+ [kParamResourceBlob] = 1,
+ [kParamHostVisible] = 1,
+ [kParamCrossDevice] = 0,
+ [kParamContextInit] = 1,
+ [kParamSupportedCapsetIds] = 0,
+ [kParamCreateGuestHandle] = 0,
+ },
};
- stream_renderer_fill_caps(0, 0, &caps.gfxstreamCapset);
-
+ stream_renderer_fill_caps(0, 0, &caps.vulkanCapset);
return caps;
}
diff --git a/guest/GoldfishAddressSpace/VirtioGpuAddressSpaceStream.cpp b/guest/GoldfishAddressSpace/VirtioGpuAddressSpaceStream.cpp
index e0747fb..12d8446 100644
--- a/guest/GoldfishAddressSpace/VirtioGpuAddressSpaceStream.cpp
+++ b/guest/GoldfishAddressSpace/VirtioGpuAddressSpaceStream.cpp
@@ -59,8 +59,8 @@
blobCreate.blobId = 0;
blobCreate.blobMem = kBlobMemHost3d;
blobCreate.flags = kBlobFlagMappable;
- blobCreate.size = ALIGN(caps.gfxstreamCapset.ringSize + caps.gfxstreamCapset.bufferSize,
- caps.gfxstreamCapset.blobAlignment);
+ blobCreate.size = ALIGN(caps.vulkanCapset.ringSize + caps.vulkanCapset.bufferSize,
+ caps.vulkanCapset.blobAlignment);
blob = instance->createBlob(blobCreate);
if (!blob)
return nullptr;
@@ -89,7 +89,7 @@
bufferPtr = blobAddr + sizeof(struct asg_ring_storage);
struct asg_context context =
- asg_context_create(blobAddr, bufferPtr, caps.gfxstreamCapset.bufferSize);
+ asg_context_create(blobAddr, bufferPtr, caps.vulkanCapset.bufferSize);
context.ring_config->transfer_mode = 1;
context.ring_config->host_consumed_pos = 0;
@@ -107,4 +107,4 @@
res->setMapping(blobMapping);
res->setResourceId(contextCreate.resourceId);
return res;
-}
\ No newline at end of file
+}
diff --git a/guest/platform/include/VirtGpu.h b/guest/platform/include/VirtGpu.h
index c2287a3..453407a 100644
--- a/guest/platform/include/VirtGpu.h
+++ b/guest/platform/include/VirtGpu.h
@@ -106,7 +106,7 @@
struct VirtGpuCaps {
uint64_t params[kParamMax];
- struct gfxstreamCapset gfxstreamCapset;
+ struct vulkanCapset vulkanCapset;
};
class VirtGpuBlobMapping;
diff --git a/guest/platform/include/virtgpu_gfxstream_protocol.h b/guest/platform/include/virtgpu_gfxstream_protocol.h
index b5efd2e..c40ada2 100644
--- a/guest/platform/include/virtgpu_gfxstream_protocol.h
+++ b/guest/platform/include/virtgpu_gfxstream_protocol.h
@@ -76,7 +76,7 @@
uint32_t padding;
};
-struct gfxstreamCapset {
+struct vulkanCapset {
uint32_t protocolVersion;
// ASG Ring Parameters
diff --git a/guest/platform/linux/LinuxVirtGpuDevice.cpp b/guest/platform/linux/LinuxVirtGpuDevice.cpp
index 3b44934..26637b3 100644
--- a/guest/platform/linux/LinuxVirtGpuDevice.cpp
+++ b/guest/platform/linux/LinuxVirtGpuDevice.cpp
@@ -80,8 +80,8 @@
get_caps.cap_set_id = static_cast<uint32_t>(capset);
if (capset == kCapsetGfxStreamVulkan) {
- get_caps.size = sizeof(struct gfxstreamCapset);
- get_caps.addr = (unsigned long long)&mCaps.gfxstreamCapset;
+ get_caps.size = sizeof(struct vulkanCapset);
+ get_caps.addr = (unsigned long long)&mCaps.vulkanCapset;
}
ret = drmIoctl(mDeviceHandle, DRM_IOCTL_VIRTGPU_GET_CAPS, &get_caps);
@@ -92,8 +92,8 @@
}
// We always need an ASG blob in some cases, so always define blobAlignment
- if (!mCaps.gfxstreamCapset.blobAlignment) {
- mCaps.gfxstreamCapset.blobAlignment = 4096;
+ if (!mCaps.vulkanCapset.blobAlignment) {
+ mCaps.vulkanCapset.blobAlignment = 4096;
}
ctx_set_params[0].param = VIRTGPU_CONTEXT_PARAM_NUM_RINGS;
diff --git a/guest/vulkan_enc/ResourceTracker.cpp b/guest/vulkan_enc/ResourceTracker.cpp
index 3ea4d0f..6ab34d8 100644
--- a/guest/vulkan_enc/ResourceTracker.cpp
+++ b/guest/vulkan_enc/ResourceTracker.cpp
@@ -924,8 +924,8 @@
mCaps = instance->getCaps();
// Delete once goldfish Linux drivers are gone
- if (mCaps.gfxstreamCapset.protocolVersion == 0) {
- mCaps.gfxstreamCapset.colorBufferMemoryIndex = 0xFFFFFFFF;
+ if (mCaps.vulkanCapset.protocolVersion == 0) {
+ mCaps.vulkanCapset.colorBufferMemoryIndex = 0xFFFFFFFF;
}
}
@@ -1722,13 +1722,12 @@
ResourceTracker::threadingCallbacks.hostConnectionGetFunc()->grallocHelper();
// Delete once goldfish Linux drivers are gone
- if (mCaps.gfxstreamCapset.colorBufferMemoryIndex == 0xFFFFFFFF) {
- mCaps.gfxstreamCapset.colorBufferMemoryIndex =
- getColorBufferMemoryIndex(context, device);
+ if (mCaps.vulkanCapset.colorBufferMemoryIndex == 0xFFFFFFFF) {
+ mCaps.vulkanCapset.colorBufferMemoryIndex = getColorBufferMemoryIndex(context, device);
}
updateMemoryTypeBits(&pProperties->memoryTypeBits,
- mCaps.gfxstreamCapset.colorBufferMemoryIndex);
+ mCaps.vulkanCapset.colorBufferMemoryIndex);
return getAndroidHardwareBufferPropertiesANDROID(
grallocHelper, buffer, pProperties);
@@ -3057,15 +3056,15 @@
bool dedicated = deviceAddressMemoryAllocation;
- if (mCaps.gfxstreamCapset.deferredMapping || mCaps.params[kParamCreateGuestHandle])
+ if (mCaps.vulkanCapset.deferredMapping || mCaps.params[kParamCreateGuestHandle])
dedicated = true;
VkMemoryAllocateInfo hostAllocationInfo = vk_make_orphan_copy(*pAllocateInfo);
vk_struct_chain_iterator structChainIter = vk_make_chain_iterator(&hostAllocationInfo);
- if (mCaps.gfxstreamCapset.deferredMapping || mCaps.params[kParamCreateGuestHandle]) {
+ if (mCaps.vulkanCapset.deferredMapping || mCaps.params[kParamCreateGuestHandle]) {
hostAllocationInfo.allocationSize =
- ALIGN(pAllocateInfo->allocationSize, mCaps.gfxstreamCapset.blobAlignment);
+ ALIGN(pAllocateInfo->allocationSize, mCaps.vulkanCapset.blobAlignment);
} else if (dedicated) {
// Over-aligning to kLargestSize to some Windows drivers (b:152769369). Can likely
// have host report the desired alignment.
@@ -3125,7 +3124,7 @@
}
guestBlob->wait();
- } else if (mCaps.gfxstreamCapset.deferredMapping) {
+ } else if (mCaps.vulkanCapset.deferredMapping) {
createBlobInfo.blobId = ++mBlobId;
createBlobInfo.blobMem = kBlobMemHost3d;
vk_append_struct(&structChainIter, &createBlobInfo);
@@ -3141,7 +3140,7 @@
}
struct VkDeviceMemory_Info info;
- if (mCaps.gfxstreamCapset.deferredMapping || mCaps.params[kParamCreateGuestHandle]) {
+ if (mCaps.vulkanCapset.deferredMapping || mCaps.params[kParamCreateGuestHandle]) {
info.allocationSize = pAllocateInfo->allocationSize;
info.blobId = createBlobInfo.blobId;
}
@@ -3173,7 +3172,7 @@
info_VkDeviceMemory[mem] = info;
}
- if (mCaps.gfxstreamCapset.deferredMapping || mCaps.params[kParamCreateGuestHandle]) {
+ if (mCaps.vulkanCapset.deferredMapping || mCaps.params[kParamCreateGuestHandle]) {
*pMemory = mem;
return host_res;
}
@@ -3210,7 +3209,7 @@
((allocFlagsInfoPtr->flags & VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT) ||
(allocFlagsInfoPtr->flags & VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT));
- if (mCaps.gfxstreamCapset.deferredMapping || mCaps.params[kParamCreateGuestHandle])
+ if (mCaps.vulkanCapset.deferredMapping || mCaps.params[kParamCreateGuestHandle])
dedicated = true;
CoherentMemoryPtr coherentMemory = nullptr;
@@ -4323,15 +4322,14 @@
// Delete `protocolVersion` check goldfish drivers are gone.
#ifdef VK_USE_PLATFORM_ANDROID_KHR
- if (mCaps.gfxstreamCapset.colorBufferMemoryIndex == 0xFFFFFFFF) {
- mCaps.gfxstreamCapset.colorBufferMemoryIndex =
- getColorBufferMemoryIndex(context, device);
+ if (mCaps.vulkanCapset.colorBufferMemoryIndex == 0xFFFFFFFF) {
+ mCaps.vulkanCapset.colorBufferMemoryIndex = getColorBufferMemoryIndex(context, device);
}
if (extImgCiPtr &&
(extImgCiPtr->handleTypes &
VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID)) {
updateMemoryTypeBits(&memReqs.memoryTypeBits,
- mCaps.gfxstreamCapset.colorBufferMemoryIndex);
+ mCaps.vulkanCapset.colorBufferMemoryIndex);
}
#endif
@@ -5380,17 +5378,15 @@
if (res != VK_SUCCESS) return res;
-// Delete `protocolVersion` check goldfish drivers are gone.
#ifdef VK_USE_PLATFORM_ANDROID_KHR
- if (mCaps.gfxstreamCapset.colorBufferMemoryIndex == 0xFFFFFFFF) {
- mCaps.gfxstreamCapset.colorBufferMemoryIndex =
- getColorBufferMemoryIndex(context, device);
+ if (mCaps.vulkanCapset.colorBufferMemoryIndex == 0xFFFFFFFF) {
+ mCaps.vulkanCapset.colorBufferMemoryIndex = getColorBufferMemoryIndex(context, device);
}
if (extBufCiPtr &&
(extBufCiPtr->handleTypes &
VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID)) {
updateMemoryTypeBits(&memReqs.memoryTypeBits,
- mCaps.gfxstreamCapset.colorBufferMemoryIndex);
+ mCaps.vulkanCapset.colorBufferMemoryIndex);
}
#endif
diff --git a/host/virtgpu_gfxstream_protocol.h b/host/virtgpu_gfxstream_protocol.h
index 673852b..f5188a8 100644
--- a/host/virtgpu_gfxstream_protocol.h
+++ b/host/virtgpu_gfxstream_protocol.h
@@ -78,7 +78,7 @@
uint32_t padding;
};
-struct gfxstreamCapset {
+struct vulkanCapset {
uint32_t protocolVersion;
// ASG Ring Parameters
diff --git a/host/virtio-gpu-gfxstream-renderer.cpp b/host/virtio-gpu-gfxstream-renderer.cpp
index e057f03..312c1f1 100644
--- a/host/virtio-gpu-gfxstream-renderer.cpp
+++ b/host/virtio-gpu-gfxstream-renderer.cpp
@@ -1352,12 +1352,12 @@
void getCapset(uint32_t set, uint32_t* max_size) {
// Only one capset right not
- *max_size = sizeof(struct gfxstream::gfxstreamCapset);
+ *max_size = sizeof(struct gfxstream::vulkanCapset);
}
void fillCaps(uint32_t set, void* caps) {
- struct gfxstream::gfxstreamCapset* capset =
- reinterpret_cast<struct gfxstream::gfxstreamCapset*>(caps);
+ struct gfxstream::vulkanCapset* capset =
+ reinterpret_cast<struct gfxstream::vulkanCapset*>(caps);
if (capset) {
memset(capset, 0, sizeof(*capset));