blob: 654a53cdb294109c7f1bf1387d2d0aa0a180b8b8 [file] [log] [blame] [edit]
// Copyright (C) 2024 The Android Open Source Project
//
// 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.
syntax = "proto3";
import "VirtioGpuRingBlobSnapshot.proto";
package gfxstream.host.snapshot;
// LINT.IfChange(virtio_gpu_resource_type)
enum VirtioGpuResourceType {
UNKNOWN = 0;
PIPE = 1;
BUFFER = 2;
COLOR_BUFFER = 3;
BLOB = 4;
}
// LINT.ThenChange(VirtioGpuResource.h:virtio_gpu_resource_type)
message VirtioGpuResourceCreateArgs {
optional uint32 id = 1;
optional uint32 target = 2;
optional uint32 format = 3;
optional uint32 bind = 4;
optional uint32 width = 5;
optional uint32 height = 6;
optional uint32 depth = 7;
optional uint32 array_size = 8;
optional uint32 last_level = 9;
optional uint32 nr_samples = 10;
optional uint32 flags = 11;
}
message VirtioGpuResourceCreateBlobArgs {
optional uint32 mem = 1;
optional uint32 flags = 2;
optional uint32 id = 3;
optional uint64 size = 4;
}
// NOTE: This does not actually save the blob's external memory because the handle
// or mapping may not be the same across snapshot and restore. This instead saves
// the info needed to refetch either the descriptor or mapping from
// `ExternalObjectManager` after a restore.
message VirtioGpuBlobExternalMemoryInfo {
optional uint32 context_id = 1;
optional uint32 blob_id = 2;
}
// LINT.IfChange(virtio_gpu_resource)
message VirtioGpuResourceSnapshot {
optional uint32 id = 1;
optional VirtioGpuResourceType type = 2;
optional VirtioGpuResourceCreateArgs create_args = 3;
optional VirtioGpuResourceCreateBlobArgs create_blob_args = 4;
// NOTE: `VirtioGpuResource::iovs` is not saved because the host virtual address
// may not be the same across snapshot and restore. VMMs are expected to re-call
// `stream_renderer_resource_attach_iov()` for resources with the new guest-memory
// host virtual addresses.
oneof blob_memory {
VirtioGpuRingBlobSnapshot ring_blob = 5;
VirtioGpuBlobExternalMemoryInfo external_memory_descriptor = 6;
VirtioGpuBlobExternalMemoryInfo external_memory_mapping = 7;
}
optional uint32 latest_attached_context = 8;
repeated uint32 attached_contexts = 9;
}
// LINT.ThenChange(VirtioGpuResource.h:virtio_gpu_resource)