blob: 74d817d8a03239e53d6f7e747ebd7bac2880aa83 [file] [log] [blame]
/*
* Copyright 2022 Google
* SPDX-License-Identifier: MIT
*/
#ifndef VIRTGPU_GFXSTREAM_PROTOCOL_H
#define VIRTGPU_GFXSTREAM_PROTOCOL_H
#include <stdint.h>
// Address Space Graphics contexts
#define GFXSTREAM_CONTEXT_CREATE 0x1001
#define GFXSTREAM_CONTEXT_PING 0x1002
#define GFXSTREAM_CONTEXT_PING_WITH_RESPONSE 0x1003
// Native Sync FD
#define GFXSTREAM_CREATE_EXPORT_SYNC 0x9000
#define GFXSTREAM_CREATE_IMPORT_SYNC 0x9001
// Vulkan Sync
#define GFXSTREAM_CREATE_EXPORT_SYNC_VK 0xa000
#define GFXSTREAM_CREATE_IMPORT_SYNC_VK 0xa001
#define GFXSTREAM_CREATE_QSRI_EXPORT_VK 0xa002
#define GFXSTREAM_RESOURCE_CREATE_3D 0xa003
#define GFXSTREAM_ACQUIRE_SYNC 0xa004
// clang-format off
// A placeholder command to ensure virtio-gpu completes
#define GFXSTREAM_PLACEHOLDER_COMMAND_VK 0xf002
// clang-format on
struct gfxstreamHeader {
uint32_t opCode;
};
struct gfxstreamContextCreate {
struct gfxstreamHeader hdr;
uint32_t resourceId;
};
struct gfxstreamContextPing {
struct gfxstreamHeader hdr;
uint32_t resourceId;
};
struct gfxstreamCreateExportSync {
struct gfxstreamHeader hdr;
uint32_t syncHandleLo;
uint32_t syncHandleHi;
};
struct gfxstreamCreateExportSyncVK {
struct gfxstreamHeader hdr;
uint32_t deviceHandleLo;
uint32_t deviceHandleHi;
uint32_t fenceHandleLo;
uint32_t fenceHandleHi;
};
struct gfxstreamCreateQSRIExportVK {
struct gfxstreamHeader hdr;
uint32_t imageHandleLo;
uint32_t imageHandleHi;
};
struct gfxstreamPlaceholderCommandVk {
struct gfxstreamHeader hdr;
uint32_t pad;
uint32_t padding;
};
struct gfxstreamResourceCreate3d {
struct gfxstreamHeader hdr;
uint32_t target;
uint32_t format;
uint32_t bind;
uint32_t width;
uint32_t height;
uint32_t depth;
uint32_t arraySize;
uint32_t lastLevel;
uint32_t nrSamples;
uint32_t flags;
uint32_t pad;
uint64_t blobId;
};
struct gfxstreamAcquireSync {
struct gfxstreamHeader hdr;
uint32_t padding;
uint64_t syncId;
};
struct vulkanCapset {
uint32_t protocolVersion;
// ASG Ring Parameters
uint32_t ringSize;
uint32_t bufferSize;
uint32_t colorBufferMemoryIndex;
uint32_t deferredMapping;
uint32_t blobAlignment;
uint32_t noRenderControlEnc;
uint32_t alwaysBlob;
uint32_t externalSync;
uint32_t virglSupportedFormats[16];
uint32_t vulkanBatchedDescriptorSetUpdate;
};
struct magmaCapset {
uint32_t protocolVersion;
// ASG Ring Parameters
uint32_t ringSize;
uint32_t bufferSize;
uint32_t blobAlignment;
};
struct glesCapset {
uint32_t protocolVersion;
// ASG Ring Parameters
uint32_t ringSize;
uint32_t bufferSize;
uint32_t blobAlignment;
};
struct composerCapset {
uint32_t protocolVersion;
// ASG Ring Parameters
uint32_t ringSize;
uint32_t bufferSize;
uint32_t blobAlignment;
};
#endif