gfxstream/guest: use GetRingParamsFromCapset
Use the previously mentioned GetRingParamsFromCapset function.
BUG=297245651
TEST=compile
Change-Id: I29188aad415b81c9722612b28328fe8b5fd2dc85
diff --git a/guest/GoldfishAddressSpace/VirtioGpuAddressSpaceStream.cpp b/guest/GoldfishAddressSpace/VirtioGpuAddressSpaceStream.cpp
index f32fb04..51e7972 100644
--- a/guest/GoldfishAddressSpace/VirtioGpuAddressSpaceStream.cpp
+++ b/guest/GoldfishAddressSpace/VirtioGpuAddressSpaceStream.cpp
@@ -74,24 +74,33 @@
return true;
}
-AddressSpaceStream* createVirtioGpuAddressSpaceStream(HealthMonitor<>* healthMonitor) {
+AddressSpaceStream* createVirtioGpuAddressSpaceStream(enum VirtGpuCapset capset,
+ HealthMonitor<>* healthMonitor) {
VirtGpuBlobPtr pipe, blob;
VirtGpuBlobMappingPtr pipeMapping, blobMapping;
struct VirtGpuExecBuffer exec = {};
struct VirtGpuCreateBlob blobCreate = {};
struct gfxstreamContextCreate contextCreate = {};
+ uint32_t ringSize = 0;
+ uint32_t bufferSize = 0;
+ uint32_t blobAlignment = 0;
+
char* blobAddr, *bufferPtr;
int ret;
VirtGpuDevice* instance = VirtGpuDevice::getInstance();
- VirtGpuCaps caps = instance->getCaps();
+ auto caps = instance->getCaps();
+
+ if (!GetRingParamsFromCapset(capset, caps, ringSize, bufferSize, blobAlignment)) {
+ ALOGE("Failed to get ring parameters");
+ return nullptr;
+ }
blobCreate.blobId = 0;
blobCreate.blobMem = kBlobMemHost3d;
blobCreate.flags = kBlobFlagMappable;
- blobCreate.size = ALIGN(caps.vulkanCapset.ringSize + caps.vulkanCapset.bufferSize,
- caps.vulkanCapset.blobAlignment);
+ blobCreate.size = ALIGN(ringSize + bufferSize, blobAlignment);
blob = instance->createBlob(blobCreate);
if (!blob)
return nullptr;
@@ -119,8 +128,7 @@
blobAddr = reinterpret_cast<char*>(blobMapping->asRawPtr());
bufferPtr = blobAddr + sizeof(struct asg_ring_storage);
- struct asg_context context =
- asg_context_create(blobAddr, bufferPtr, caps.vulkanCapset.bufferSize);
+ struct asg_context context = asg_context_create(blobAddr, bufferPtr, bufferSize);
context.ring_config->transfer_mode = 1;
context.ring_config->host_consumed_pos = 0;
diff --git a/guest/GoldfishAddressSpace/include/VirtioGpuAddressSpaceStream.h b/guest/GoldfishAddressSpace/include/VirtioGpuAddressSpaceStream.h
index d009d6e..4e7b0da 100644
--- a/guest/GoldfishAddressSpace/include/VirtioGpuAddressSpaceStream.h
+++ b/guest/GoldfishAddressSpace/include/VirtioGpuAddressSpaceStream.h
@@ -16,4 +16,5 @@
#include "AddressSpaceStream.h"
-AddressSpaceStream* createVirtioGpuAddressSpaceStream(gfxstream::guest::HealthMonitor<>* healthMonitor);
+AddressSpaceStream* createVirtioGpuAddressSpaceStream(
+ enum VirtGpuCapset capset, gfxstream::guest::HealthMonitor<>* healthMonitor);
diff --git a/guest/OpenglSystemCommon/HostConnection.cpp b/guest/OpenglSystemCommon/HostConnection.cpp
index b6458d2..a65bec9 100644
--- a/guest/OpenglSystemCommon/HostConnection.cpp
+++ b/guest/OpenglSystemCommon/HostConnection.cpp
@@ -337,9 +337,12 @@
break;
}
case HOST_CONNECTION_VIRTIO_GPU_ADDRESS_SPACE: {
- auto device = VirtGpuDevice::getInstance((enum VirtGpuCapset)kCapsetGfxStreamVulkan);
+ // Use kCapsetGfxStreamVulkan for now, Ranchu HWC needs to be modified to pass in
+ // right capset.
+ auto device = VirtGpuDevice::getInstance(kCapsetGfxStreamVulkan);
auto deviceHandle = device->getDeviceHandle();
- auto stream = createVirtioGpuAddressSpaceStream(getGlobalHealthMonitor());
+ auto stream =
+ createVirtioGpuAddressSpaceStream(kCapsetGfxStreamVulkan, getGlobalHealthMonitor());
if (!stream) {
ALOGE("Failed to create virtgpu AddressSpaceStream\n");
return nullptr;
diff --git a/guest/magma/magma.cpp b/guest/magma/magma.cpp
index 3eebf9d..1d7aabc 100644
--- a/guest/magma/magma.cpp
+++ b/guest/magma/magma.cpp
@@ -376,7 +376,7 @@
static std::once_flag once_flag;
std::call_once(once_flag, []() {
- auto stream = createVirtioGpuAddressSpaceStream(nullptr);
+ auto stream = createVirtioGpuAddressSpaceStream(kCapsetGfxStreamMagma, nullptr);
assert(stream);
// RenderThread expects flags: send zero 'clientFlags' to the host.