virgl: Update virgl_hw.h from virglrenderer

Use the latest version and update the supported formats.

Signed-off-by: Corentin Noël <corentin.noel@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/32706>
This commit is contained in:
Corentin Noël
2024-12-18 17:18:47 +01:00
committed by Marge Bot
parent b5c99e6f57
commit ab5084b054
4 changed files with 119 additions and 83 deletions

View File

@@ -355,7 +355,7 @@ static const enum virgl_formats virgl_formats_conv_table[PIPE_FORMAT_COUNT] = {
CONV_FORMAT(Y8_400_UNORM) CONV_FORMAT(Y8_400_UNORM)
CONV_FORMAT(Y8_U8_V8_444_UNORM) CONV_FORMAT(Y8_U8_V8_444_UNORM)
CONV_FORMAT(Y8_U8_V8_422_UNORM) CONV_FORMAT(Y8_U8_V8_422_UNORM)
[PIPE_FORMAT_NV16] = VIRGL_FORMAT_Y8_U8V8_422_UNORM, CONV_FORMAT(NV16)
CONV_FORMAT(Y8_UNORM) CONV_FORMAT(Y8_UNORM)
CONV_FORMAT(YVYU) CONV_FORMAT(YVYU)
CONV_FORMAT(Z16_UNORM_S8_UINT) CONV_FORMAT(Z16_UNORM_S8_UINT)
@@ -473,6 +473,18 @@ static const enum virgl_formats virgl_formats_conv_table[PIPE_FORMAT_COUNT] = {
CONV_FORMAT(Y410) CONV_FORMAT(Y410)
CONV_FORMAT(Y412) CONV_FORMAT(Y412)
CONV_FORMAT(Y416) CONV_FORMAT(Y416)
CONV_FORMAT(NV15)
CONV_FORMAT(NV20)
CONV_FORMAT(Y8_U8_V8_440_UNORM)
CONV_FORMAT(R10_G10B10_420_UNORM)
CONV_FORMAT(R10_G10B10_422_UNORM)
CONV_FORMAT(X6G10_X6B10X6R10_420_UNORM)
CONV_FORMAT(X4G12_X4B12X4R12_420_UNORM)
CONV_FORMAT(X6R10_UNORM)
CONV_FORMAT(X6R10X6G10_UNORM)
CONV_FORMAT(X4R12_UNORM)
CONV_FORMAT(X4R12X4G12_UNORM)
CONV_FORMAT(R8_G8B8_422_UNORM)
}; };
#undef CONV_FORMAT #undef CONV_FORMAT

View File

@@ -439,7 +439,7 @@ virgl_get_shader_param(struct pipe_screen *screen,
case PIPE_SHADER_CAP_SUBROUTINES: case PIPE_SHADER_CAP_SUBROUTINES:
return 1; return 1;
case PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS: case PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS:
return MIN2(vscreen->caps.caps.v2.max_shader_sampler_views, return MIN2(vscreen->caps.caps.v2.max_texture_samplers,
PIPE_MAX_SHADER_SAMPLER_VIEWS); PIPE_MAX_SHADER_SAMPLER_VIEWS);
case PIPE_SHADER_CAP_INTEGERS: case PIPE_SHADER_CAP_INTEGERS:
return vscreen->caps.caps.v1.glsl_level >= 130; return vscreen->caps.caps.v1.glsl_level >= 130;

View File

@@ -180,7 +180,7 @@ static inline void virgl_ws_fill_new_caps_defaults(struct virgl_drm_caps *caps)
caps->caps.v2.max_compute_work_group_invocations = 0; caps->caps.v2.max_compute_work_group_invocations = 0;
caps->caps.v2.max_compute_shared_memory_size = 0; caps->caps.v2.max_compute_shared_memory_size = 0;
caps->caps.v2.host_feature_check_version = 0; caps->caps.v2.host_feature_check_version = 0;
caps->caps.v2.max_shader_sampler_views = 16; caps->caps.v2.max_texture_samplers = 16;
for (int shader_type = 0; shader_type < PIPE_SHADER_TYPES; shader_type++) { for (int shader_type = 0; shader_type < PIPE_SHADER_TYPES; shader_type++) {
caps->caps.v2.max_const_buffer_size[shader_type] = 4096 * sizeof(float[4]); caps->caps.v2.max_const_buffer_size[shader_type] = 4096 * sizeof(float[4]);
caps->caps.v2.max_shader_storage_blocks[shader_type] = INT_MAX; caps->caps.v2.max_shader_storage_blocks[shader_type] = INT_MAX;

View File

@@ -405,7 +405,7 @@ enum virgl_formats {
VIRGL_FORMAT_Y8_400_UNORM = 322, VIRGL_FORMAT_Y8_400_UNORM = 322,
VIRGL_FORMAT_Y8_U8_V8_444_UNORM = 323, VIRGL_FORMAT_Y8_U8_V8_444_UNORM = 323,
VIRGL_FORMAT_Y8_U8_V8_422_UNORM = 324, VIRGL_FORMAT_Y8_U8_V8_422_UNORM = 324,
VIRGL_FORMAT_Y8_U8V8_422_UNORM = 325, VIRGL_FORMAT_NV16 = 325, /* aka Y8_U8V8_422_UNORM */
VIRGL_FORMAT_Y8_UNORM = 326, VIRGL_FORMAT_Y8_UNORM = 326,
VIRGL_FORMAT_YVYU = 327, VIRGL_FORMAT_YVYU = 327,
VIRGL_FORMAT_Z16_UNORM_S8_UINT = 328, VIRGL_FORMAT_Z16_UNORM_S8_UINT = 328,
@@ -523,6 +523,18 @@ enum virgl_formats {
VIRGL_FORMAT_Y410 = 440, VIRGL_FORMAT_Y410 = 440,
VIRGL_FORMAT_Y412 = 441, VIRGL_FORMAT_Y412 = 441,
VIRGL_FORMAT_Y416 = 442, VIRGL_FORMAT_Y416 = 442,
VIRGL_FORMAT_NV15 = 443,
VIRGL_FORMAT_NV20 = 444,
VIRGL_FORMAT_Y8_U8_V8_440_UNORM = 445,
VIRGL_FORMAT_R10_G10B10_420_UNORM = 446,
VIRGL_FORMAT_R10_G10B10_422_UNORM = 447,
VIRGL_FORMAT_X6G10_X6B10X6R10_420_UNORM = 448,
VIRGL_FORMAT_X4G12_X4B12X4R12_420_UNORM = 449,
VIRGL_FORMAT_X6R10_UNORM = 450,
VIRGL_FORMAT_X6R10X6G10_UNORM = 451,
VIRGL_FORMAT_X4R12_UNORM = 452,
VIRGL_FORMAT_X4R12X4G12_UNORM = 453,
VIRGL_FORMAT_R8_G8B8_422_UNORM = 454,
VIRGL_FORMAT_MAX /* = PIPE_FORMAT_COUNT */, VIRGL_FORMAT_MAX /* = PIPE_FORMAT_COUNT */,
/* Below formats must not be used in the guest. */ /* Below formats must not be used in the guest. */
@@ -532,100 +544,101 @@ enum virgl_formats {
}; };
/* These are used by the capability_bits field in virgl_caps_v2. */ /* These are used by the capability_bits field in virgl_caps_v2. */
#define VIRGL_CAP_NONE 0 #define VIRGL_CAP_NONE 0u
#define VIRGL_CAP_TGSI_INVARIANT (1 << 0) #define VIRGL_CAP_TGSI_INVARIANT (1u << 0)
#define VIRGL_CAP_TEXTURE_VIEW (1 << 1) #define VIRGL_CAP_TEXTURE_VIEW (1u << 1)
#define VIRGL_CAP_SET_MIN_SAMPLES (1 << 2) #define VIRGL_CAP_SET_MIN_SAMPLES (1u << 2)
#define VIRGL_CAP_COPY_IMAGE (1 << 3) #define VIRGL_CAP_COPY_IMAGE (1u << 3)
#define VIRGL_CAP_TGSI_PRECISE (1 << 4) #define VIRGL_CAP_TGSI_PRECISE (1u << 4)
#define VIRGL_CAP_TXQS (1 << 5) #define VIRGL_CAP_TXQS (1u << 5)
#define VIRGL_CAP_MEMORY_BARRIER (1 << 6) #define VIRGL_CAP_MEMORY_BARRIER (1u << 6)
#define VIRGL_CAP_COMPUTE_SHADER (1 << 7) #define VIRGL_CAP_COMPUTE_SHADER (1u << 7)
#define VIRGL_CAP_FB_NO_ATTACH (1 << 8) #define VIRGL_CAP_FB_NO_ATTACH (1u << 8)
#define VIRGL_CAP_ROBUST_BUFFER_ACCESS (1 << 9) #define VIRGL_CAP_ROBUST_BUFFER_ACCESS (1u << 9)
#define VIRGL_CAP_TGSI_FBFETCH (1 << 10) #define VIRGL_CAP_TGSI_FBFETCH (1u << 10)
#define VIRGL_CAP_SHADER_CLOCK (1 << 11) #define VIRGL_CAP_SHADER_CLOCK (1u << 11)
#define VIRGL_CAP_TEXTURE_BARRIER (1 << 12) #define VIRGL_CAP_TEXTURE_BARRIER (1u << 12)
#define VIRGL_CAP_TGSI_COMPONENTS (1 << 13) #define VIRGL_CAP_TGSI_COMPONENTS (1u << 13)
#define VIRGL_CAP_GUEST_MAY_INIT_LOG (1 << 14) #define VIRGL_CAP_GUEST_MAY_INIT_LOG (1u << 14)
#define VIRGL_CAP_SRGB_WRITE_CONTROL (1 << 15) #define VIRGL_CAP_SRGB_WRITE_CONTROL (1u << 15)
#define VIRGL_CAP_QBO (1 << 16) #define VIRGL_CAP_QBO (1u << 16)
#define VIRGL_CAP_TRANSFER (1 << 17) #define VIRGL_CAP_TRANSFER (1u << 17)
#define VIRGL_CAP_FBO_MIXED_COLOR_FORMATS (1 << 18) #define VIRGL_CAP_FBO_MIXED_COLOR_FORMATS (1u << 18)
#define VIRGL_CAP_HOST_IS_GLES (1 << 19) #define VIRGL_CAP_HOST_IS_GLES (1u << 19)
#define VIRGL_CAP_BIND_COMMAND_ARGS (1 << 20) #define VIRGL_CAP_BIND_COMMAND_ARGS (1u << 20)
#define VIRGL_CAP_MULTI_DRAW_INDIRECT (1 << 21) #define VIRGL_CAP_MULTI_DRAW_INDIRECT (1u << 21)
#define VIRGL_CAP_INDIRECT_PARAMS (1 << 22) #define VIRGL_CAP_INDIRECT_PARAMS (1u << 22)
#define VIRGL_CAP_TRANSFORM_FEEDBACK3 (1 << 23) #define VIRGL_CAP_TRANSFORM_FEEDBACK3 (1u << 23)
#define VIRGL_CAP_3D_ASTC (1 << 24) #define VIRGL_CAP_3D_ASTC (1u << 24)
#define VIRGL_CAP_INDIRECT_INPUT_ADDR (1 << 25) #define VIRGL_CAP_INDIRECT_INPUT_ADDR (1u << 25)
#define VIRGL_CAP_COPY_TRANSFER (1 << 26) #define VIRGL_CAP_COPY_TRANSFER (1u << 26)
#define VIRGL_CAP_CLIP_HALFZ (1 << 27) #define VIRGL_CAP_CLIP_HALFZ (1u << 27)
#define VIRGL_CAP_APP_TWEAK_SUPPORT (1 << 28) #define VIRGL_CAP_APP_TWEAK_SUPPORT (1u << 28)
#define VIRGL_CAP_BGRA_SRGB_IS_EMULATED (1 << 29) #define VIRGL_CAP_BGRA_SRGB_IS_EMULATED (1u << 29)
#define VIRGL_CAP_CLEAR_TEXTURE (1 << 30) #define VIRGL_CAP_CLEAR_TEXTURE (1u << 30)
#define VIRGL_CAP_ARB_BUFFER_STORAGE (1u << 31) #define VIRGL_CAP_ARB_BUFFER_STORAGE (1u << 31)
// Legacy alias // Legacy alias
#define VIRGL_CAP_FAKE_FP64 VIRGL_CAP_HOST_IS_GLES #define VIRGL_CAP_FAKE_FP64 VIRGL_CAP_HOST_IS_GLES
/* These are used by the capability_bits_v2 field in virgl_caps_v2. */ /* These are used by the capability_bits_v2 field in virgl_caps_v2. */
#define VIRGL_CAP_V2_BLEND_EQUATION (1 << 0) #define VIRGL_CAP_V2_BLEND_EQUATION (1u << 0)
#define VIRGL_CAP_V2_UNTYPED_RESOURCE (1 << 1) #define VIRGL_CAP_V2_UNTYPED_RESOURCE (1u << 1)
#define VIRGL_CAP_V2_VIDEO_MEMORY (1 << 2) #define VIRGL_CAP_V2_VIDEO_MEMORY (1u << 2)
#define VIRGL_CAP_V2_MEMINFO (1 << 3) #define VIRGL_CAP_V2_MEMINFO (1u << 3)
#define VIRGL_CAP_V2_STRING_MARKER (1 << 4) #define VIRGL_CAP_V2_STRING_MARKER (1u << 4)
#define VIRGL_CAP_V2_IMPLICIT_MSAA (1 << 6) #define VIRGL_CAP_V2_DIFFERENT_GPU (1u << 5)
#define VIRGL_CAP_V2_COPY_TRANSFER_BOTH_DIRECTIONS (1 << 7) #define VIRGL_CAP_V2_IMPLICIT_MSAA (1u << 6)
#define VIRGL_CAP_V2_SCANOUT_USES_GBM (1 << 8) #define VIRGL_CAP_V2_COPY_TRANSFER_BOTH_DIRECTIONS (1u << 7)
#define VIRGL_CAP_V2_SSO (1 << 9) #define VIRGL_CAP_V2_SCANOUT_USES_GBM (1u << 8)
#define VIRGL_CAP_V2_TEXTURE_SHADOW_LOD (1 << 10) #define VIRGL_CAP_V2_SSO (1u << 9)
#define VIRGL_CAP_V2_VS_VERTEX_LAYER (1 << 11) #define VIRGL_CAP_V2_TEXTURE_SHADOW_LOD (1u << 10)
#define VIRGL_CAP_V2_VS_VIEWPORT_INDEX (1 << 12) #define VIRGL_CAP_V2_VS_VERTEX_LAYER (1u << 11)
#define VIRGL_CAP_V2_PIPELINE_STATISTICS_QUERY (1 << 13) #define VIRGL_CAP_V2_VS_VIEWPORT_INDEX (1u << 12)
#define VIRGL_CAP_V2_DRAW_PARAMETERS (1 << 14) #define VIRGL_CAP_V2_PIPELINE_STATISTICS_QUERY (1u << 13)
#define VIRGL_CAP_V2_GROUP_VOTE (1 << 15) #define VIRGL_CAP_V2_DRAW_PARAMETERS (1u << 14)
#define VIRGL_CAP_V2_MIRROR_CLAMP_TO_EDGE (1 << 16) #define VIRGL_CAP_V2_GROUP_VOTE (1u << 15)
#define VIRGL_CAP_V2_MIRROR_CLAMP (1 << 17) #define VIRGL_CAP_V2_MIRROR_CLAMP_TO_EDGE (1u << 16)
#define VIRGL_CAP_V2_MIRROR_CLAMP (1u << 17)
/* virgl bind flags - these are compatible with mesa 10.5 gallium. /* virgl bind flags - these are compatible with mesa 10.5 gallium.
* but are fixed, no other should be passed to virgl either. * but are fixed, no other should be passed to virgl either.
*/ */
#define VIRGL_BIND_DEPTH_STENCIL (1 << 0) #define VIRGL_BIND_DEPTH_STENCIL (1u << 0)
#define VIRGL_BIND_RENDER_TARGET (1 << 1) #define VIRGL_BIND_RENDER_TARGET (1u << 1)
#define VIRGL_BIND_SAMPLER_VIEW (1 << 3) #define VIRGL_BIND_SAMPLER_VIEW (1u << 3)
#define VIRGL_BIND_VERTEX_BUFFER (1 << 4) #define VIRGL_BIND_VERTEX_BUFFER (1u << 4)
#define VIRGL_BIND_INDEX_BUFFER (1 << 5) #define VIRGL_BIND_INDEX_BUFFER (1u << 5)
#define VIRGL_BIND_CONSTANT_BUFFER (1 << 6) #define VIRGL_BIND_CONSTANT_BUFFER (1u << 6)
#define VIRGL_BIND_DISPLAY_TARGET (1 << 7) #define VIRGL_BIND_DISPLAY_TARGET (1u << 7)
#define VIRGL_BIND_COMMAND_ARGS (1 << 8) #define VIRGL_BIND_COMMAND_ARGS (1u << 8)
#define VIRGL_BIND_STREAM_OUTPUT (1 << 11) #define VIRGL_BIND_STREAM_OUTPUT (1u << 11)
#define VIRGL_BIND_SHADER_BUFFER (1 << 14) #define VIRGL_BIND_SHADER_BUFFER (1u << 14)
#define VIRGL_BIND_QUERY_BUFFER (1 << 15) #define VIRGL_BIND_QUERY_BUFFER (1u << 15)
#define VIRGL_BIND_CURSOR (1 << 16) #define VIRGL_BIND_CURSOR (1u << 16)
#define VIRGL_BIND_CUSTOM (1 << 17) #define VIRGL_BIND_CUSTOM (1u << 17)
#define VIRGL_BIND_SCANOUT (1 << 18) #define VIRGL_BIND_SCANOUT (1u << 18)
/* Used for buffers that are backed by guest storage and /* Used for buffers that are backed by guest storage and
* are only read by the host. * are only read by the host.
*/ */
#define VIRGL_BIND_STAGING (1 << 19) #define VIRGL_BIND_STAGING (1u << 19)
#define VIRGL_BIND_SHARED (1 << 20) #define VIRGL_BIND_SHARED (1u << 20)
#define VIRGL_BIND_PREFER_EMULATED_BGRA (1 << 21) #define VIRGL_BIND_PREFER_EMULATED_BGRA (1u << 21) /* non-functional */
#define VIRGL_BIND_LINEAR (1 << 22) #define VIRGL_BIND_LINEAR (1u << 22)
#define VIRGL_BIND_SHARED_SUBFLAGS (0xff << 24) #define VIRGL_BIND_SHARED_SUBFLAGS (0xffu << 24)
#define VIRGL_BIND_MINIGBM_CAMERA_WRITE (1 << 24) #define VIRGL_BIND_MINIGBM_CAMERA_WRITE (1u << 24)
#define VIRGL_BIND_MINIGBM_CAMERA_READ (1 << 25) #define VIRGL_BIND_MINIGBM_CAMERA_READ (1u << 25)
#define VIRGL_BIND_MINIGBM_HW_VIDEO_DECODER (1 << 26) #define VIRGL_BIND_MINIGBM_HW_VIDEO_DECODER (1u << 26)
#define VIRGL_BIND_MINIGBM_HW_VIDEO_ENCODER (1 << 27) #define VIRGL_BIND_MINIGBM_HW_VIDEO_ENCODER (1u << 27)
#define VIRGL_BIND_MINIGBM_SW_READ_OFTEN (1 << 28) #define VIRGL_BIND_MINIGBM_SW_READ_OFTEN (1u << 28)
#define VIRGL_BIND_MINIGBM_SW_READ_RARELY (1 << 29) #define VIRGL_BIND_MINIGBM_SW_READ_RARELY (1u << 29)
#define VIRGL_BIND_MINIGBM_SW_WRITE_OFTEN (1 << 30) #define VIRGL_BIND_MINIGBM_SW_WRITE_OFTEN (1u << 30)
#define VIRGL_BIND_MINIGBM_SW_WRITE_RARELY (1 << 31) #define VIRGL_BIND_MINIGBM_SW_WRITE_RARELY (1u << 31)
#define VIRGL_BIND_MINIGBM_PROTECTED (0xf << 28) // Mutually exclusive with SW_ flags #define VIRGL_BIND_MINIGBM_PROTECTED (0xfu << 28) // Mutually exclusive with SW_ flags
struct virgl_caps_bool_set1 { struct virgl_caps_bool_set1 {
unsigned indep_blend_enable:1; unsigned indep_blend_enable:1;
@@ -762,7 +775,10 @@ struct virgl_caps_v2 {
uint32_t max_video_memory; uint32_t max_video_memory;
char renderer[64]; char renderer[64];
float max_anisotropy; float max_anisotropy;
uint32_t max_shader_sampler_views; // NOTE: this informs guest-side PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS,
// **NOT** GL_MAX_TEXTURE_IMAGE_UNITS!!!
// Guest-side driver has always used it as such.
uint32_t max_texture_samplers;
struct virgl_supported_format_mask supported_multisample_formats; struct virgl_supported_format_mask supported_multisample_formats;
uint32_t max_const_buffer_size[6]; // PIPE_SHADER_TYPES uint32_t max_const_buffer_size[6]; // PIPE_SHADER_TYPES
uint32_t num_video_caps; uint32_t num_video_caps;
@@ -799,7 +815,15 @@ enum virgl_ctx_errors {
VIRGL_ERROR_CTX_ILLEGAL_FORMAT, VIRGL_ERROR_CTX_ILLEGAL_FORMAT,
VIRGL_ERROR_CTX_ILLEGAL_SAMPLER_VIEW_TARGET, VIRGL_ERROR_CTX_ILLEGAL_SAMPLER_VIEW_TARGET,
VIRGL_ERROR_CTX_TRANSFER_IOV_BOUNDS, VIRGL_ERROR_CTX_TRANSFER_IOV_BOUNDS,
VIRGL_ERROR_CTX_ILLEGAL_DUAL_SRC_BLEND VIRGL_ERROR_CTX_ILLEGAL_DUAL_SRC_BLEND,
VIRGL_ERROR_CTX_UNSUPPORTED_FUNCTION,
VIRGL_ERROR_CTX_ILLEGAL_PROGRAM_PIPELINE,
VIRGL_ERROR_CTX_TOO_MANY_VERTEX_ATTRIBUTES,
VIRGL_ERROR_CTX_UNSUPPORTED_TEX_WRAP,
VIRGL_ERROR_CTX_CUBE_MAP_FACE_OUT_OF_RANGE,
VIRGL_ERROR_CTX_BLIT_AREA_OUT_OF_RANGE,
VIRGL_ERROR_CTX_SSBO_BINDING_RANGE,
VIRGL_ERROR_CTX_RESOURCE_OUT_OF_RANGE,
}; };
enum virgl_statistics_query_index { enum virgl_statistics_query_index {