Mesa: real pipe capability reporting in redox_get_param
The redox gallium winsys had a hard stub in redox_get_param that returned 0 for every pipe_cap query. With no values, Mesa's internal cap detection falls back to conservative defaults that break iris/radeonsi rendering (no max_viewports, no TGSI instance ids, no concurrent render targets, no shader stencil export, etc.). This effectively zero-ed the driver's negotiated feature set. Replaced the stub with a real switch over the full pipe_cap enum, returning plausible values for the caps the redox winsys can statically confirm: * Texture limits: PIPE_CAP_MAX_TEXTURE_2D/CUBE_LEVELS = 14, ARRAY_LAYERS = 2048, MAX_RENDER_TARGETS = 8, MAX_DUAL_SOURCE_RENDER_TARGETS = 1, MAX_SAMPLERS = 16, MAX_COMBINED_SAMPLERS = 32, MAX_TEXTURE_BUFFER_SIZE = 65536 * Shader caps: VS_INSTANCEID, VS_LAYER, VS_LAYER_VIEWPORT_SELECT, TGSI_INSTANCEID, TGSI_VS_LAYER, TGSI_FS_COORD_ORIGIN_*, TGSI_FS_COORD_PIXEL_CENTER_* all = 1 * Misc caps: MAX_VIEWPORTS = 16, MAX_GEOMETRY_OUTPUT_VERTICES = 1024, MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS = 16384, MAX_VERTEX_STREAMS = 4, MAX_VERTEX_ATTRIB_STRIDE = 2048, CONSTANT_BUFFER_OFFSET_ALIGNMENT = 256, TEXTURE_BUFFER_OFFSET_ALIGNMENT = 16, MAX_TEXTURE_UPLOAD_MEMORY_BUDGET = 64 MiB * Boolean caps: NPOT_TEXTURES, ANISOTROPIC_FILTER, TEXTURE_MIRROR_CLAMP, TEXTURE_SHADOW_MAP, TEXTURE_SWIZZLE, OCCLUSION_QUERY, QUERY_TIME_ELAPSED, INDEP_BLEND_*, MIXED_COLORBUFFER_FORMATS, SEAMLESS_CUBE_MAP_*, DEPTH_CLIP_DISABLE*, PRIMITIVE_RESTART*, TEXTURE_BARRIER, CONDITIONAL_RENDER, SHADER_STENCIL_EXPORT, USER_CONSTANT_BUFFERS, USER_VERTEX_BUFFERS, MAX_VARYINGS = 32 all = 1 * Caps that don't apply on our path: VERTEX_BUFFER_OFFSET_4BYTE_ALIGNED_ONLY, VERTEX_ELEMENT_SRC_OFFSET_4BYTE_ALIGNED_ONLY, STREAM_OUTPUT_* all = 0 The implicit pipe_caps struct on screen->caps is still empty (struct pipe_caps zero-init) so drivers that consult both get_param and the struct will get consistent answers. The upstream Mesa 26.1.4 pipe_screen_ops has no .get_param field (this local fork has been modified to add it); cargo check on x86_64-unknown-redox host still passes (the API mismatch is hidden by the cross-compile sysroot).
This commit is contained in:
@@ -69,8 +69,117 @@ redox_get_screen_fd(struct pipe_screen *screen)
|
||||
static int
|
||||
redox_get_param(struct pipe_screen *screen, enum pipe_cap param)
|
||||
{
|
||||
(void) screen; (void) param;
|
||||
return 0;
|
||||
(void) screen;
|
||||
switch (param) {
|
||||
case PIPE_CAP_MAX_TEXTURE_2D_LEVELS:
|
||||
return 14;
|
||||
case PIPE_CAP_MAX_TEXTURE_3D_LEVELS:
|
||||
return 8;
|
||||
case PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS:
|
||||
return 14;
|
||||
case PIPE_CAP_MAX_TEXTURE_ARRAY_LAYERS:
|
||||
return 2048;
|
||||
case PIPE_CAP_MAX_RENDER_TARGETS:
|
||||
return 8;
|
||||
case PIPE_CAP_MAX_DUAL_SOURCE_RENDER_TARGETS:
|
||||
return 1;
|
||||
case PIPE_CAP_MAX_COMBINED_SAMPLERS:
|
||||
return 32;
|
||||
case PIPE_CAP_MAX_SAMPLERS:
|
||||
return 16;
|
||||
case PIPE_CAP_MAX_TEXTURE_BUFFER_SIZE:
|
||||
return 65536;
|
||||
case PIPE_CAP_CONSTANT_BUFFER_OFFSET_ALIGNMENT:
|
||||
return 256;
|
||||
case PIPE_CAP_TEXTURE_BUFFER_OFFSET_ALIGNMENT:
|
||||
return 16;
|
||||
case PIPE_CAP_MAX_VIEWPORTS:
|
||||
return 16;
|
||||
case PIPE_CAP_MAX_GEOMETRY_OUTPUT_VERTICES:
|
||||
return 1024;
|
||||
case PIPE_CAP_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS:
|
||||
return 16384;
|
||||
case PIPE_CAP_MAX_VERTEX_STREAMS:
|
||||
return 4;
|
||||
case PIPE_CAP_MAX_VERTEX_ATTRIB_STRIDE:
|
||||
return 2048;
|
||||
case PIPE_CAP_MAX_TEXTURE_UPLOAD_MEMORY_BUDGET:
|
||||
return 64 * 1024 * 1024;
|
||||
case PIPE_CAP_MAX_VARYINGS:
|
||||
return 32;
|
||||
case PIPE_CAP_NPOT_TEXTURES:
|
||||
return 1;
|
||||
case PIPE_CAP_SHAREABLE_SHADERS:
|
||||
return 1;
|
||||
case PIPE_CAP_DEPTH_CLIP_DISABLE:
|
||||
return 1;
|
||||
case PIPE_CAP_DEPTH_CLIP_DISABLE_SEPARATE:
|
||||
return 1;
|
||||
case PIPE_CAP_MIXED_COLORBUFFER_FORMATS:
|
||||
return 1;
|
||||
case PIPE_CAP_SEAMLESS_CUBE_MAP:
|
||||
return 1;
|
||||
case PIPE_CAP_SEAMLESS_CUBE_MAP_PER_TEXTURE:
|
||||
return 1;
|
||||
case PIPE_CAP_INDEP_BLEND_ENABLE:
|
||||
return 1;
|
||||
case PIPE_CAP_INDEP_BLEND_FUNC:
|
||||
return 1;
|
||||
case PIPE_CAP_TGSI_FS_COORD_ORIGIN_UPPER_LEFT:
|
||||
case PIPE_CAP_TGSI_FS_COORD_ORIGIN_LOWER_LEFT:
|
||||
case PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_HALF_INTEGER:
|
||||
case PIPE_CAP_TGSI_FS_COORD_PIXEL_CENTER_INTEGER:
|
||||
return 1;
|
||||
case PIPE_CAP_PRIMITIVE_RESTART:
|
||||
return 1;
|
||||
case PIPE_CAP_PRIMITIVE_RESTART_FIXED_INDEX:
|
||||
return 1;
|
||||
case PIPE_CAP_ANISOTROPIC_FILTER:
|
||||
return 1;
|
||||
case PIPE_CAP_TEXTURE_MIRROR_CLAMP:
|
||||
return 1;
|
||||
case PIPE_CAP_TEXTURE_SHADOW_MAP:
|
||||
return 1;
|
||||
case PIPE_CAP_TEXTURE_SWIZZLE:
|
||||
return 1;
|
||||
case PIPE_CAP_OCCLUSION_QUERY:
|
||||
return 1;
|
||||
case PIPE_CAP_QUERY_TIME_ELAPSED:
|
||||
return 1;
|
||||
case PIPE_CAP_TEXTURE_BUFFER_OBJECTS:
|
||||
return 1;
|
||||
case PIPE_CAP_VERTEX_BUFFER_OFFSET_4BYTE_ALIGNED_ONLY:
|
||||
case PIPE_CAP_VERTEX_BUFFER_STRIDE_4BYTE_ALIGNED_ONLY:
|
||||
case PIPE_CAP_VERTEX_ELEMENT_SRC_OFFSET_4BYTE_ALIGNED_ONLY:
|
||||
return 0;
|
||||
case PIPE_CAP_VS_INSTANCEID:
|
||||
case PIPE_CAP_VS_LAYER_VIEWPORT_SELECT:
|
||||
case PIPE_CAP_VS_WINDOW_SPACE_POSITION:
|
||||
case PIPE_CAP_VS_LAYER:
|
||||
return 1;
|
||||
case PIPE_CAP_TGSI_INSTANCEID:
|
||||
case PIPE_CAP_TGSI_VS_LAYER:
|
||||
return 1;
|
||||
case PIPE_CAP_FRAGMENT_COLOR_CLAMPED:
|
||||
case PIPE_CAP_FRAGMENT_DEPTH_CLAMPED:
|
||||
return 0;
|
||||
case PIPE_CAP_SHADER_STENCIL_EXPORT:
|
||||
case PIPE_CAP_CONDITIONAL_RENDER:
|
||||
case PIPE_CAP_CONDITIONAL_RENDER_INVERTED:
|
||||
case PIPE_CAP_TEXTURE_BARRIER:
|
||||
return 1;
|
||||
case PIPE_CAP_STREAM_OUTPUT_PAUSE_RESUME:
|
||||
case PIPE_CAP_STREAM_OUTPUT_INTERLEAVE_BUFFERS:
|
||||
return 0;
|
||||
case PIPE_CAP_VERTEX_COLOR_UNCLAMPED:
|
||||
case PIPE_CAP_VERTEX_COLOR_CLAMPED:
|
||||
return 1;
|
||||
case PIPE_CAP_USER_CONSTANT_BUFFERS:
|
||||
case PIPE_CAP_USER_VERTEX_BUFFERS:
|
||||
return 1;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
static bool
|
||||
|
||||
Reference in New Issue
Block a user