asahi: Advertise geometry shaders

and cube arrays.

Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26056>
This commit is contained in:
Alyssa Rosenzweig 2023-08-17 13:03:37 -04:00 committed by Marge Bot
parent c6a118b654
commit 3270556eaa
3 changed files with 35 additions and 19 deletions

View File

@ -82,18 +82,18 @@ GL 3.1, GLSL 1.40 --- all DONE: freedreno, nv50, nvc0, r600, radeonsi, llvmpipe,
GL_EXT_texture_snorm (Signed normalized textures) DONE (v3d, crocus)
GL 3.2, GLSL 1.50 --- all DONE: freedreno, nv50, nvc0, r600, radeonsi, llvmpipe, softpipe, virgl, zink, d3d12, iris, crocus/gen6+
GL 3.2, GLSL 1.50 --- all DONE: freedreno, nv50, nvc0, r600, radeonsi, llvmpipe, softpipe, virgl, zink, d3d12, iris, crocus/gen6+, asahi
Core/compatibility profiles DONE
Geometry shaders DONE (freedreno/a6xx, crocus)
GL_ARB_vertex_array_bgra (BGRA vertex order) DONE (v3d, panfrost, asahi, crocus)
GL_ARB_draw_elements_base_vertex (Base vertex offset) DONE (v3d, vc4, panfrost, lima, asahi, crocus)
GL_ARB_fragment_coord_conventions (Frag shader coord) DONE (v3d, vc4, panfrost, lima, asahi, crocus)
GL_ARB_provoking_vertex (Provoking vertex) DONE (v3d, vc4, panfrost, lima, asahi, crocus)
GL_ARB_seamless_cube_map (Seamless cubemaps) DONE (panfrost, asahi, crocus)
GL_ARB_vertex_array_bgra (BGRA vertex order) DONE (v3d, panfrost, crocus)
GL_ARB_draw_elements_base_vertex (Base vertex offset) DONE (v3d, vc4, panfrost, lima, crocus)
GL_ARB_fragment_coord_conventions (Frag shader coord) DONE (v3d, vc4, panfrost, lima, crocus)
GL_ARB_provoking_vertex (Provoking vertex) DONE (v3d, vc4, panfrost, lima, crocus)
GL_ARB_seamless_cube_map (Seamless cubemaps) DONE (panfrost, crocus)
GL_ARB_texture_multisample (Multisample textures) DONE (freedreno/a5xx+, v3d, vc4, panfrost, asahi)
GL_ARB_depth_clamp (Frag depth clamp) DONE (panfrost, asahi, crocus)
GL_ARB_sync (Fence objects) DONE (v3d, vc4, panfrost, lima, asahi, crocus)
GL_ARB_depth_clamp (Frag depth clamp) DONE (panfrost, crocus)
GL_ARB_sync (Fence objects) DONE (v3d, vc4, panfrost, lima, crocus)
GLX_ARB_create_context_profile DONE
@ -123,8 +123,8 @@ GL 4.0, GLSL 4.00 --- all DONE: freedreno/a6xx, nvc0, r600, radeonsi, llvmpipe,
- Fused multiply-add DONE (softpipe, asahi)
- Packing/bitfield/conversion functions DONE (freedreno, softpipe, panfrost, asahi)
- Enhanced textureGather DONE (freedreno, softpipe, panfrost, asahi)
- Geometry shader instancing DONE (softpipe, )
- Geometry shader multiple streams DONE (softpipe, )
- Geometry shader instancing DONE (softpipe, asahi)
- Geometry shader multiple streams DONE (softpipe, asahi)
- Enhanced per-sample shading DONE (asahi)
- Interpolation functions DONE (softpipe, asahi)
- New overload resolution rules DONE (softpipe)
@ -133,7 +133,7 @@ GL 4.0, GLSL 4.00 --- all DONE: freedreno/a6xx, nvc0, r600, radeonsi, llvmpipe,
GL_ARB_shader_subroutine DONE (freedreno, nv50, softpipe, crocus/gen6+)
GL_ARB_tessellation_shader DONE (freedreno/a6xx)
GL_ARB_texture_buffer_object_rgb32 DONE (freedreno, softpipe, panfrost, asahi, crocus/gen6+)
GL_ARB_texture_cube_map_array DONE (freedreno/a4xx+, nv50, softpipe, v3d, crocus/gen6+)
GL_ARB_texture_cube_map_array DONE (freedreno/a4xx+, nv50, softpipe, v3d, crocus/gen6+, asahi)
GL_ARB_texture_gather DONE (freedreno, nv50, softpipe, v3d, panfrost, asahi)
GL_ARB_texture_query_lod DONE (freedreno, nv50, softpipe, v3d, panfrost, crocus/gen5+)
GL_ARB_transform_feedback2 DONE (freedreno/a3xx+, nv50, softpipe, v3d, panfrost, asahi, crocus/gen6+)
@ -278,7 +278,7 @@ GLES3.2, GLSL ES 3.2 -- all DONE: freedreno/a6xx, radeonsi, virgl, llvmpipe, zin
GL_OES_copy_image DONE (all drivers)
GL_OES_draw_buffers_indexed DONE (all drivers that support GL_ARB_draw_buffers_blend)
GL_OES_draw_elements_base_vertex DONE (all drivers)
GL_OES_geometry_shader DONE (freedreno/a6xx, nvc0, r600, softpipe, v3d)
GL_OES_geometry_shader DONE (freedreno/a6xx, nvc0, r600, softpipe, v3d, asahi)
GL_OES_gpu_shader5 DONE (freedreno/a6xx, asahi, all drivers that support GL_ARB_gpu_shader5)
GL_OES_primitive_bounding_box DONE (freedreno/a5xx+, nvc0, r600, softpipe, v3d)
GL_OES_sample_shading DONE (freedreno/a6xx, asahi, nvc0, r600, panfrost, d3d12)
@ -289,7 +289,7 @@ GLES3.2, GLSL ES 3.2 -- all DONE: freedreno/a6xx, radeonsi, virgl, llvmpipe, zin
GL_OES_tessellation_shader DONE (freedreno/a6xx, all drivers that support GL_ARB_tessellation_shader)
GL_OES_texture_border_clamp DONE (all drivers)
GL_OES_texture_buffer DONE (freedreno, nvc0, r600, softpipe, panfrost, asahi, crocus/gen6+)
GL_OES_texture_cube_map_array DONE (freedreno/a4xx+, nvc0, r600, softpipe)
GL_OES_texture_cube_map_array DONE (freedreno/a4xx+, nvc0, r600, softpipe, asahi)
GL_OES_texture_stencil8 DONE (all drivers that support GL_ARB_texture_stencil8)
GL_OES_texture_storage_multisample_2d_array DONE (all drivers that support GL_ARB_texture_multisample)

View File

@ -2,3 +2,6 @@ New features
------------
VK_EXT_image_compression_control on RADV
VK_EXT_device_fault on RADV
OpenGL 3.2 on Asahi
Geometry shaders on Asahi
GL_ARB_texture_cube_map_array on Asahi

View File

@ -1555,8 +1555,6 @@ agx_get_name(struct pipe_screen *pscreen)
static int
agx_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
{
bool is_deqp = agx_device(pscreen)->debug & AGX_DBG_DEQP;
switch (param) {
case PIPE_CAP_NPOT_TEXTURES:
case PIPE_CAP_SHADER_STENCIL_EXPORT:
@ -1636,7 +1634,7 @@ agx_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
return 0;
case PIPE_CAP_CUBE_MAP_ARRAY:
return is_deqp;
return 1;
case PIPE_CAP_COPY_BETWEEN_COMPRESSED_AND_PLAIN_FORMATS:
return 0;
@ -1657,10 +1655,19 @@ agx_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
case PIPE_CAP_GLSL_FEATURE_LEVEL:
case PIPE_CAP_GLSL_FEATURE_LEVEL_COMPATIBILITY:
return is_deqp ? 330 : 140;
return 330;
case PIPE_CAP_ESSL_FEATURE_LEVEL:
return 320;
/* Settings from iris, may need tuning */
case PIPE_CAP_MAX_VERTEX_STREAMS:
return 4;
case PIPE_CAP_MAX_GEOMETRY_OUTPUT_VERTICES:
return 256;
case PIPE_CAP_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS:
return 1024;
case PIPE_CAP_MAX_GS_INVOCATIONS:
return 32;
case PIPE_CAP_CONSTANT_BUFFER_OFFSET_ALIGNMENT:
return 16;
@ -1749,13 +1756,17 @@ agx_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
BITFIELD_BIT(MESA_PRIM_TRIANGLES) |
BITFIELD_BIT(MESA_PRIM_TRIANGLE_STRIP) |
BITFIELD_BIT(MESA_PRIM_TRIANGLE_FAN) |
BITFIELD_BIT(MESA_PRIM_LINES_ADJACENCY) |
BITFIELD_BIT(MESA_PRIM_LINE_STRIP_ADJACENCY) |
BITFIELD_BIT(MESA_PRIM_TRIANGLES_ADJACENCY) |
BITFIELD_BIT(MESA_PRIM_TRIANGLE_STRIP_ADJACENCY) |
BITFIELD_BIT(MESA_PRIM_QUADS) | BITFIELD_BIT(MESA_PRIM_QUAD_STRIP);
case PIPE_CAP_MAP_UNSYNCHRONIZED_THREAD_SAFE:
return 1;
case PIPE_CAP_VS_LAYER_VIEWPORT:
return is_deqp;
return true;
default:
return u_pipe_screen_get_param_defaults(pscreen, param);
@ -1811,6 +1822,7 @@ agx_get_shader_param(struct pipe_screen *pscreen, enum pipe_shader_type shader,
case PIPE_SHADER_VERTEX:
case PIPE_SHADER_FRAGMENT:
case PIPE_SHADER_COMPUTE:
case PIPE_SHADER_GEOMETRY:
break;
default:
return false;
@ -1819,7 +1831,8 @@ agx_get_shader_param(struct pipe_screen *pscreen, enum pipe_shader_type shader,
/* Don't allow side effects with vertex processing. The APIs don't require it
* and it may be problematic on our hardware.
*/
bool allow_side_effects = (shader != PIPE_SHADER_VERTEX);
bool allow_side_effects =
(shader == PIPE_SHADER_FRAGMENT) || (shader == PIPE_SHADER_COMPUTE);
/* this is probably not totally correct.. but it's a start: */
switch (param) {