1 /* 2 * Copyright 2022 Google 3 * SPDX-License-Identifier: MIT 4 */ 5 6 #ifndef VIRTGPU_GFXSTREAM_PROTOCOL_H 7 #define VIRTGPU_GFXSTREAM_PROTOCOL_H 8 9 #include <stdint.h> 10 11 // See definitions in rutabaga_gfx_ffi.h 12 #define VIRTGPU_CAPSET_VIRGL 1 13 #define VIRTGPU_CAPSET_VIRGL2 2 14 #define VIRTGPU_CAPSET_GFXSTREAM_VULKAN 3 15 #define VIRTGPU_CAPSET_VENUS 4 16 #define VIRTGPU_CAPSET_CROSS_DOMAIN 5 17 #define VIRTGPU_CAPSET_DRM 6 18 #define VIRTGPU_CAPSET_GFXSTREAM_MAGMA 7 19 #define VIRTGPU_CAPSET_GFXSTREAM_GLES 8 20 #define VIRTGPU_CAPSET_GFXSTREAM_COMPOSER 9 21 22 // Address Space Graphics contexts 23 #define GFXSTREAM_CONTEXT_CREATE 0x1001 24 #define GFXSTREAM_CONTEXT_PING 0x1002 25 #define GFXSTREAM_CONTEXT_PING_WITH_RESPONSE 0x1003 26 27 // Native Sync FD 28 #define GFXSTREAM_CREATE_EXPORT_SYNC 0x9000 29 #define GFXSTREAM_CREATE_IMPORT_SYNC 0x9001 30 31 // Vulkan Sync 32 #define GFXSTREAM_CREATE_EXPORT_SYNC_VK 0xa000 33 #define GFXSTREAM_CREATE_IMPORT_SYNC_VK 0xa001 34 #define GFXSTREAM_CREATE_QSRI_EXPORT_VK 0xa002 35 #define GFXSTREAM_RESOURCE_CREATE_3D 0xa003 36 #define GFXSTREAM_ACQUIRE_SYNC 0xa004 37 38 // clang-format off 39 // A placeholder command to ensure virtio-gpu completes 40 #define GFXSTREAM_PLACEHOLDER_COMMAND_VK 0xf002 41 // clang-format on 42 43 struct gfxstreamHeader { 44 uint32_t opCode; 45 }; 46 47 struct gfxstreamContextCreate { 48 struct gfxstreamHeader hdr; 49 uint32_t resourceId; 50 }; 51 52 struct gfxstreamContextPing { 53 struct gfxstreamHeader hdr; 54 uint32_t resourceId; 55 }; 56 57 struct gfxstreamCreateExportSync { 58 struct gfxstreamHeader hdr; 59 uint32_t syncHandleLo; 60 uint32_t syncHandleHi; 61 }; 62 63 struct gfxstreamCreateExportSyncVK { 64 struct gfxstreamHeader hdr; 65 uint32_t deviceHandleLo; 66 uint32_t deviceHandleHi; 67 uint32_t fenceHandleLo; 68 uint32_t fenceHandleHi; 69 }; 70 71 struct gfxstreamCreateQSRIExportVK { 72 struct gfxstreamHeader hdr; 73 uint32_t imageHandleLo; 74 uint32_t imageHandleHi; 75 }; 76 77 struct gfxstreamPlaceholderCommandVk { 78 struct gfxstreamHeader hdr; 79 uint32_t pad; 80 uint32_t padding; 81 }; 82 83 struct gfxstreamResourceCreate3d { 84 struct gfxstreamHeader hdr; 85 uint32_t target; 86 uint32_t format; 87 uint32_t bind; 88 uint32_t width; 89 uint32_t height; 90 uint32_t depth; 91 uint32_t arraySize; 92 uint32_t lastLevel; 93 uint32_t nrSamples; 94 uint32_t flags; 95 uint32_t pad; 96 uint64_t blobId; 97 }; 98 99 struct gfxstreamAcquireSync { 100 struct gfxstreamHeader hdr; 101 uint32_t padding; 102 uint64_t syncId; 103 }; 104 105 struct vulkanCapset { 106 uint32_t protocolVersion; 107 108 // ASG Ring Parameters 109 uint32_t ringSize; 110 uint32_t bufferSize; 111 112 uint32_t colorBufferMemoryIndex; 113 uint32_t deferredMapping; 114 uint32_t blobAlignment; 115 uint32_t noRenderControlEnc; 116 uint32_t alwaysBlob; 117 uint32_t externalSync; 118 uint32_t virglSupportedFormats[16]; 119 uint32_t vulkanBatchedDescriptorSetUpdate; 120 }; 121 122 struct magmaCapset { 123 uint32_t protocolVersion; 124 // ASG Ring Parameters 125 uint32_t ringSize; 126 uint32_t bufferSize; 127 uint32_t blobAlignment; 128 }; 129 130 struct glesCapset { 131 uint32_t protocolVersion; 132 // ASG Ring Parameters 133 uint32_t ringSize; 134 uint32_t bufferSize; 135 uint32_t blobAlignment; 136 }; 137 138 struct composerCapset { 139 uint32_t protocolVersion; 140 // ASG Ring Parameters 141 uint32_t ringSize; 142 uint32_t bufferSize; 143 uint32_t blobAlignment; 144 }; 145 146 #endif 147