Revert^2 "vulkan-cereal: guest memory prototype"

1b90709ddd23f1ab7c6fb08f701a652c29251c83

Change-Id: I24b8cfe37c5af0033e4a80d1ddaf3d15e1ad5329
diff --git a/stream-servers/virtio-gpu-gfxstream-renderer.cpp b/stream-servers/virtio-gpu-gfxstream-renderer.cpp
index 66951d5..65e4e92 100644
--- a/stream-servers/virtio-gpu-gfxstream-renderer.cpp
+++ b/stream-servers/virtio-gpu-gfxstream-renderer.cpp
@@ -832,6 +832,10 @@
                 });
                 break;
             }
+            case GFXSTREAM_PLACEHOLDER_COMMAND_VK: {
+                // Do nothing, this is a placeholder command
+                break;
+            }
             default:
                 return -1;
         }
@@ -1483,16 +1487,30 @@
                 return ret;
             }
         } else if (feature_is_enabled(kFeature_ExternalBlob)) {
-            auto descriptorInfoOpt =
-                HostmemIdMapping::get()->removeDescriptorInfo(create_blob->blob_id);
-            if (descriptorInfoOpt) {
-                e.descriptorInfo =
-                    std::make_shared<ManagedDescriptorInfo>(std::move(*descriptorInfoOpt));
-            } else {
-                return -EINVAL;
-            }
+            if (create_blob->blob_mem == STREAM_BLOB_MEM_GUEST &&
+                (create_blob->blob_flags & STREAM_BLOB_FLAG_CREATE_GUEST_HANDLE)) {
+#if defined(__linux__) || defined(__QNX__)
+                ManagedDescriptor managedHandle(handle->os_handle);
+                HostmemIdMapping::get()->addDescriptorInfo(create_blob->blob_id,
+                                                           std::move(managedHandle),
+                                                           handle->handle_type, 0, std::nullopt);
 
-            e.caching = e.descriptorInfo->caching;
+                e.caching = STREAM_RENDERER_MAP_CACHE_CACHED;
+#else
+                return -EINVAL;
+#endif
+            } else {
+                auto descriptorInfoOpt =
+                    HostmemIdMapping::get()->removeDescriptorInfo(create_blob->blob_id);
+                if (descriptorInfoOpt) {
+                    e.descriptorInfo =
+                        std::make_shared<ManagedDescriptorInfo>(std::move(*descriptorInfoOpt));
+                } else {
+                    return -EINVAL;
+                }
+
+                e.caching = e.descriptorInfo->caching;
+            }
         } else {
             auto entry = HostmemIdMapping::get()->get(create_blob->blob_id);
             e.hva = entry.hva;