mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 11:08:11 +00:00

ObjectType is now passed as an enum instead of a plain number. The underlying type for both ObjectType and VirGLCommand have been reduced to u8 to make sure they fit in the encoded command. Command length is verified to not overflow u16.
217 lines
4.5 KiB
C++
217 lines
4.5 KiB
C++
/*
|
|
* Copyright (c) 2022, Sahan Fernando <sahan.h.fernando@gmail.com>
|
|
* Copyright (c) 2022, Stephan Unverwerth <s.unverwerth@serenityos.org>
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <AK/DistinctNumeric.h>
|
|
|
|
namespace VirtGPU {
|
|
|
|
namespace Protocol {
|
|
|
|
AK_TYPEDEF_DISTINCT_ORDERED_ID(u32, ObjectHandle);
|
|
AK_TYPEDEF_DISTINCT_ORDERED_ID(u32, ResourceID);
|
|
|
|
enum class BindTarget : u32 {
|
|
VIRGL_BIND_DEPTH_STENCIL = (1 << 0),
|
|
VIRGL_BIND_RENDER_TARGET = (1 << 1),
|
|
VIRGL_BIND_SAMPLER_VIEW = (1 << 3),
|
|
VIRGL_BIND_VERTEX_BUFFER = (1 << 4),
|
|
VIRGL_BIND_INDEX_BUFFER = (1 << 5),
|
|
VIRGL_BIND_CONSTANT_BUFFER = (1 << 6),
|
|
VIRGL_BIND_DISPLAY_TARGET = (1 << 7),
|
|
VIRGL_BIND_COMMAND_ARGS = (1 << 8),
|
|
VIRGL_BIND_STREAM_OUTPUT = (1 << 11),
|
|
VIRGL_BIND_SHADER_BUFFER = (1 << 14),
|
|
VIRGL_BIND_QUERY_BUFFER = (1 << 15),
|
|
VIRGL_BIND_CURSOR = (1 << 16),
|
|
VIRGL_BIND_CUSTOM = (1 << 17),
|
|
VIRGL_BIND_SCANOUT = (1 << 18),
|
|
VIRGL_BIND_STAGING = (1 << 19),
|
|
VIRGL_BIND_SHARED = (1 << 20),
|
|
};
|
|
|
|
enum class TextureFormat : u32 {
|
|
// RGBA Formats
|
|
VIRTIO_GPU_FORMAT_B8G8R8A8_UNORM = 1,
|
|
VIRTIO_GPU_FORMAT_B8G8R8X8_UNORM = 2,
|
|
VIRTIO_GPU_FORMAT_A8R8G8B8_UNORM = 3,
|
|
VIRTIO_GPU_FORMAT_X8R8G8B8_UNORM = 4,
|
|
|
|
VIRTIO_GPU_FORMAT_R8G8B8A8_UNORM = 67,
|
|
VIRTIO_GPU_FORMAT_X8B8G8R8_UNORM = 68,
|
|
|
|
VIRTIO_GPU_FORMAT_A8B8G8R8_UNORM = 121,
|
|
VIRTIO_GPU_FORMAT_R8G8B8X8_UNORM = 134,
|
|
|
|
// Stencil-Depth Formats
|
|
VIRTIO_GPU_FORMAT_Z16_UNORM = 16,
|
|
VIRTIO_GPU_FORMAT_Z32_UNORM = 17,
|
|
VIRTIO_GPU_FORMAT_Z32_FLOAT = 18,
|
|
VIRTIO_GPU_FORMAT_Z24_UNORM_S8_UINT = 19,
|
|
VIRTIO_GPU_FORMAT_S8_UINT_Z24_UNORM = 20,
|
|
VIRTIO_GPU_FORMAT_Z24X8_UNORM = 21,
|
|
VIRTIO_GPU_FORMAT_X8Z24_UNORM = 22,
|
|
VIRTIO_GPU_FORMAT_S8_UINT = 23,
|
|
VIRTIO_GPU_FORMAT_Z32_FLOAT_S8X24_UINT = 128,
|
|
VIRTIO_GPU_FORMAT_X24S8_UINT = 136,
|
|
VIRTIO_GPU_FORMAT_S8X24_UINT = 137,
|
|
VIRTIO_GPU_FORMAT_X32_S8X24_UINT = 138,
|
|
|
|
};
|
|
|
|
enum class VirGLCommand : u8 {
|
|
NOP = 0,
|
|
CREATE_OBJECT = 1,
|
|
BIND_OBJECT,
|
|
DESTROY_OBJECT,
|
|
SET_VIEWPORT_STATE,
|
|
SET_FRAMEBUFFER_STATE,
|
|
SET_VERTEX_BUFFERS,
|
|
CLEAR,
|
|
DRAW_VBO,
|
|
RESOURCE_INLINE_WRITE,
|
|
SET_SAMPLER_VIEWS,
|
|
SET_INDEX_BUFFER,
|
|
SET_CONSTANT_BUFFER,
|
|
SET_STENCIL_REF,
|
|
SET_BLEND_COLOR,
|
|
SET_SCISSOR_STATE,
|
|
BLIT,
|
|
RESOURCE_COPY_REGION,
|
|
BIND_SAMPLER_STATES,
|
|
BEGIN_QUERY,
|
|
END_QUERY,
|
|
GET_QUERY_RESULT,
|
|
SET_POLYGON_STIPPLE,
|
|
SET_CLIP_STATE,
|
|
SET_SAMPLE_MASK,
|
|
SET_STREAMOUT_TARGETS,
|
|
SET_RENDER_CONDITION,
|
|
SET_UNIFORM_BUFFER,
|
|
|
|
SET_SUB_CTX,
|
|
CREATE_SUB_CTX,
|
|
DESTROY_SUB_CTX,
|
|
BIND_SHADER,
|
|
SET_TESS_STATE,
|
|
SET_MIN_SAMPLES,
|
|
SET_SHADER_BUFFERS,
|
|
SET_SHADER_IMAGES,
|
|
MEMORY_BARRIER,
|
|
LAUNCH_GRID,
|
|
SET_FRAMEBUFFER_STATE_NO_ATTACH,
|
|
TEXTURE_BARRIER,
|
|
SET_ATOMIC_BUFFERS,
|
|
SET_DBG_FLAGS,
|
|
GET_QUERY_RESULT_QBO,
|
|
TRANSFER3D,
|
|
END_TRANSFERS,
|
|
COPY_TRANSFER3D,
|
|
SET_TWEAKS,
|
|
CLEAR_TEXTURE,
|
|
PIPE_RESOURCE_CREATE,
|
|
PIPE_RESOURCE_SET_TYPE,
|
|
GET_MEMORY_INFO,
|
|
SEND_STRING_MARKER,
|
|
MAX_COMMANDS
|
|
};
|
|
|
|
union ClearType {
|
|
struct {
|
|
u32 depth : 1;
|
|
u32 stencil : 1;
|
|
u32 color0 : 1;
|
|
u32 color1 : 1;
|
|
u32 color2 : 1;
|
|
u32 color3 : 1;
|
|
u32 color4 : 1;
|
|
u32 color5 : 1;
|
|
u32 color6 : 1;
|
|
u32 color7 : 1;
|
|
} flags;
|
|
u32 value;
|
|
};
|
|
|
|
enum class ObjectType : u8 {
|
|
NONE,
|
|
BLEND,
|
|
RASTERIZER,
|
|
DSA,
|
|
SHADER,
|
|
VERTEX_ELEMENTS,
|
|
SAMPLER_VIEW,
|
|
SAMPLER_STATE,
|
|
SURFACE,
|
|
QUERY,
|
|
STREAMOUT_TARGET,
|
|
MSAA_SURFACE,
|
|
MAX_OBJECTS,
|
|
};
|
|
|
|
enum class PipeTextureTarget : u32 {
|
|
BUFFER = 0,
|
|
TEXTURE_1D,
|
|
TEXTURE_2D,
|
|
TEXTURE_3D,
|
|
TEXTURE_CUBE,
|
|
TEXTURE_RECT,
|
|
TEXTURE_1D_ARRAY,
|
|
TEXTURE_2D_ARRAY,
|
|
TEXTURE_CUBE_ARRAY,
|
|
MAX
|
|
};
|
|
|
|
enum class PipePrimitiveTypes : u32 {
|
|
POINTS = 0,
|
|
LINES,
|
|
LINE_LOOP,
|
|
LINE_STRIP,
|
|
TRIANGLES,
|
|
TRIANGLE_STRIP,
|
|
TRIANGLE_FAN,
|
|
QUADS,
|
|
QUAD_STRIP,
|
|
POLYGON,
|
|
LINES_ADJACENCY,
|
|
LINE_STRIP_ADJACENCY,
|
|
TRIANGLES_ADJACENCY,
|
|
TRIANGLE_STRIP_ADJACENCY,
|
|
PATCHES,
|
|
MAX
|
|
};
|
|
|
|
}
|
|
|
|
namespace Gallium {
|
|
|
|
enum class PipeTextureTarget : u32 {
|
|
BUFFER,
|
|
TEXTURE_1D,
|
|
TEXTURE_2D,
|
|
TEXTURE_3D,
|
|
TEXTURE_CUBE,
|
|
TEXTURE_RECT,
|
|
TEXTURE_1D_ARRAY,
|
|
TEXTURE_2D_ARRAY,
|
|
TEXTURE_CUBE_ARRAY,
|
|
MAX_TEXTURE_TYPES,
|
|
};
|
|
|
|
enum class ShaderType : u32 {
|
|
SHADER_VERTEX = 0,
|
|
SHADER_FRAGMENT,
|
|
SHADER_GEOMETRY,
|
|
SHADER_TESS_CTRL,
|
|
SHADER_TESS_EVAL,
|
|
SHADER_COMPUTE,
|
|
SHADER_TYPES
|
|
};
|
|
|
|
}
|
|
|
|
}
|