VirGLProtocol.h 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  1. /*
  2. * Copyright (c) 2022, Sahan Fernando <sahan.h.fernando@gmail.com>
  3. * Copyright (c) 2022, Stephan Unverwerth <s.unverwerth@serenityos.org>
  4. *
  5. * SPDX-License-Identifier: BSD-2-Clause
  6. */
  7. #pragma once
  8. #include <AK/DistinctNumeric.h>
  9. namespace VirtGPU {
  10. namespace Protocol {
  11. AK_TYPEDEF_DISTINCT_ORDERED_ID(u32, ObjectHandle);
  12. AK_TYPEDEF_DISTINCT_ORDERED_ID(u32, ResourceID);
  13. enum class BindTarget : u32 {
  14. VIRGL_BIND_DEPTH_STENCIL = (1 << 0),
  15. VIRGL_BIND_RENDER_TARGET = (1 << 1),
  16. VIRGL_BIND_SAMPLER_VIEW = (1 << 3),
  17. VIRGL_BIND_VERTEX_BUFFER = (1 << 4),
  18. VIRGL_BIND_INDEX_BUFFER = (1 << 5),
  19. VIRGL_BIND_CONSTANT_BUFFER = (1 << 6),
  20. VIRGL_BIND_DISPLAY_TARGET = (1 << 7),
  21. VIRGL_BIND_COMMAND_ARGS = (1 << 8),
  22. VIRGL_BIND_STREAM_OUTPUT = (1 << 11),
  23. VIRGL_BIND_SHADER_BUFFER = (1 << 14),
  24. VIRGL_BIND_QUERY_BUFFER = (1 << 15),
  25. VIRGL_BIND_CURSOR = (1 << 16),
  26. VIRGL_BIND_CUSTOM = (1 << 17),
  27. VIRGL_BIND_SCANOUT = (1 << 18),
  28. VIRGL_BIND_STAGING = (1 << 19),
  29. VIRGL_BIND_SHARED = (1 << 20),
  30. };
  31. enum class TextureFormat : u32 {
  32. // RGBA Formats
  33. VIRTIO_GPU_FORMAT_B8G8R8A8_UNORM = 1,
  34. VIRTIO_GPU_FORMAT_B8G8R8X8_UNORM = 2,
  35. VIRTIO_GPU_FORMAT_A8R8G8B8_UNORM = 3,
  36. VIRTIO_GPU_FORMAT_X8R8G8B8_UNORM = 4,
  37. VIRTIO_GPU_FORMAT_R8G8B8A8_UNORM = 67,
  38. VIRTIO_GPU_FORMAT_X8B8G8R8_UNORM = 68,
  39. VIRTIO_GPU_FORMAT_A8B8G8R8_UNORM = 121,
  40. VIRTIO_GPU_FORMAT_R8G8B8X8_UNORM = 134,
  41. // Stencil-Depth Formats
  42. VIRTIO_GPU_FORMAT_Z16_UNORM = 16,
  43. VIRTIO_GPU_FORMAT_Z32_UNORM = 17,
  44. VIRTIO_GPU_FORMAT_Z32_FLOAT = 18,
  45. VIRTIO_GPU_FORMAT_Z24_UNORM_S8_UINT = 19,
  46. VIRTIO_GPU_FORMAT_S8_UINT_Z24_UNORM = 20,
  47. VIRTIO_GPU_FORMAT_Z24X8_UNORM = 21,
  48. VIRTIO_GPU_FORMAT_X8Z24_UNORM = 22,
  49. VIRTIO_GPU_FORMAT_S8_UINT = 23,
  50. VIRTIO_GPU_FORMAT_Z32_FLOAT_S8X24_UINT = 128,
  51. VIRTIO_GPU_FORMAT_X24S8_UINT = 136,
  52. VIRTIO_GPU_FORMAT_S8X24_UINT = 137,
  53. VIRTIO_GPU_FORMAT_X32_S8X24_UINT = 138,
  54. };
  55. enum class VirGLCommand : u8 {
  56. NOP = 0,
  57. CREATE_OBJECT = 1,
  58. BIND_OBJECT,
  59. DESTROY_OBJECT,
  60. SET_VIEWPORT_STATE,
  61. SET_FRAMEBUFFER_STATE,
  62. SET_VERTEX_BUFFERS,
  63. CLEAR,
  64. DRAW_VBO,
  65. RESOURCE_INLINE_WRITE,
  66. SET_SAMPLER_VIEWS,
  67. SET_INDEX_BUFFER,
  68. SET_CONSTANT_BUFFER,
  69. SET_STENCIL_REF,
  70. SET_BLEND_COLOR,
  71. SET_SCISSOR_STATE,
  72. BLIT,
  73. RESOURCE_COPY_REGION,
  74. BIND_SAMPLER_STATES,
  75. BEGIN_QUERY,
  76. END_QUERY,
  77. GET_QUERY_RESULT,
  78. SET_POLYGON_STIPPLE,
  79. SET_CLIP_STATE,
  80. SET_SAMPLE_MASK,
  81. SET_STREAMOUT_TARGETS,
  82. SET_RENDER_CONDITION,
  83. SET_UNIFORM_BUFFER,
  84. SET_SUB_CTX,
  85. CREATE_SUB_CTX,
  86. DESTROY_SUB_CTX,
  87. BIND_SHADER,
  88. SET_TESS_STATE,
  89. SET_MIN_SAMPLES,
  90. SET_SHADER_BUFFERS,
  91. SET_SHADER_IMAGES,
  92. MEMORY_BARRIER,
  93. LAUNCH_GRID,
  94. SET_FRAMEBUFFER_STATE_NO_ATTACH,
  95. TEXTURE_BARRIER,
  96. SET_ATOMIC_BUFFERS,
  97. SET_DBG_FLAGS,
  98. GET_QUERY_RESULT_QBO,
  99. TRANSFER3D,
  100. END_TRANSFERS,
  101. COPY_TRANSFER3D,
  102. SET_TWEAKS,
  103. CLEAR_TEXTURE,
  104. PIPE_RESOURCE_CREATE,
  105. PIPE_RESOURCE_SET_TYPE,
  106. GET_MEMORY_INFO,
  107. SEND_STRING_MARKER,
  108. MAX_COMMANDS
  109. };
  110. union ClearType {
  111. struct {
  112. u32 depth : 1;
  113. u32 stencil : 1;
  114. u32 color0 : 1;
  115. u32 color1 : 1;
  116. u32 color2 : 1;
  117. u32 color3 : 1;
  118. u32 color4 : 1;
  119. u32 color5 : 1;
  120. u32 color6 : 1;
  121. u32 color7 : 1;
  122. } flags;
  123. u32 value;
  124. };
  125. enum class ObjectType : u8 {
  126. NONE,
  127. BLEND,
  128. RASTERIZER,
  129. DSA,
  130. SHADER,
  131. VERTEX_ELEMENTS,
  132. SAMPLER_VIEW,
  133. SAMPLER_STATE,
  134. SURFACE,
  135. QUERY,
  136. STREAMOUT_TARGET,
  137. MSAA_SURFACE,
  138. MAX_OBJECTS,
  139. };
  140. enum class PipeTextureTarget : u32 {
  141. BUFFER = 0,
  142. TEXTURE_1D,
  143. TEXTURE_2D,
  144. TEXTURE_3D,
  145. TEXTURE_CUBE,
  146. TEXTURE_RECT,
  147. TEXTURE_1D_ARRAY,
  148. TEXTURE_2D_ARRAY,
  149. TEXTURE_CUBE_ARRAY,
  150. MAX
  151. };
  152. enum class PipePrimitiveTypes : u32 {
  153. POINTS = 0,
  154. LINES,
  155. LINE_LOOP,
  156. LINE_STRIP,
  157. TRIANGLES,
  158. TRIANGLE_STRIP,
  159. TRIANGLE_FAN,
  160. QUADS,
  161. QUAD_STRIP,
  162. POLYGON,
  163. LINES_ADJACENCY,
  164. LINE_STRIP_ADJACENCY,
  165. TRIANGLES_ADJACENCY,
  166. TRIANGLE_STRIP_ADJACENCY,
  167. PATCHES,
  168. MAX
  169. };
  170. }
  171. namespace Gallium {
  172. enum class PipeTextureTarget : u32 {
  173. BUFFER,
  174. TEXTURE_1D,
  175. TEXTURE_2D,
  176. TEXTURE_3D,
  177. TEXTURE_CUBE,
  178. TEXTURE_RECT,
  179. TEXTURE_1D_ARRAY,
  180. TEXTURE_2D_ARRAY,
  181. TEXTURE_CUBE_ARRAY,
  182. MAX_TEXTURE_TYPES,
  183. };
  184. enum class ShaderType : u32 {
  185. SHADER_VERTEX = 0,
  186. SHADER_FRAGMENT,
  187. SHADER_GEOMETRY,
  188. SHADER_TESS_CTRL,
  189. SHADER_TESS_EVAL,
  190. SHADER_COMPUTE,
  191. SHADER_TYPES
  192. };
  193. enum class PipeFormat : u32 {
  194. R32G32B32_FLOAT = 30
  195. };
  196. }
  197. }