| // 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 <stdint.h> |
| #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]; |
| }; |
| |
| 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 |