// Copyright 2022 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. #ifndef VIRTGPU_GFXSTREAM_PROTOCOL_H #define VIRTGPU_GFXSTREAM_PROTOCOL_H #include #include "virgl_hw.h" namespace gfxstream { // See definitions in rutabaga_gfx_ffi.h #define VIRTGPU_CAPSET_VIRGL 1 #define VIRTGPU_CAPSET_VIRGL2 2 #define VIRTGPU_CAPSET_GFXSTREAM_VULKAN 3 #define VIRTGPU_CAPSET_VENUS 4 #define VIRTGPU_CAPSET_CROSS_DOMAIN 5 #define VIRTGPU_CAPSET_DRM 6 #define VIRTGPU_CAPSET_GFXSTREAM_MAGMA 7 #define VIRTGPU_CAPSET_GFXSTREAM_GLES 8 #define VIRTGPU_CAPSET_GFXSTREAM_COMPOSER 9 // 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 related #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; }; } // namespace gfxstream #endif