From 6aa1cf6e7a5620c2672adcd477770ea0b594e421 Mon Sep 17 00:00:00 2001 From: Alyssa Rosenzweig Date: Sat, 27 May 2023 13:09:01 -0400 Subject: [PATCH] asahi: Advertise OpenGL ES 3.1! Signed-off-by: Alyssa Rosenzweig Part-of: --- docs/features.txt | 38 ++++++++++++++-------------- docs/relnotes/new_features.txt | 10 ++++++++ src/gallium/drivers/asahi/agx_pipe.c | 36 ++++++++++++-------------- 3 files changed, 45 insertions(+), 39 deletions(-) diff --git a/docs/features.txt b/docs/features.txt index 2470c4736ec..19ffb396129 100644 --- a/docs/features.txt +++ b/docs/features.txt @@ -125,11 +125,11 @@ GL 4.0, GLSL 4.00 --- all DONE: freedreno/a6xx, nvc0, r600, radeonsi, llvmpipe, - Enhanced textureGather DONE (freedreno, softpipe, panfrost, asahi) - Geometry shader instancing DONE (softpipe, ) - Geometry shader multiple streams DONE (softpipe, ) - - Enhanced per-sample shading DONE () - - Interpolation functions DONE (softpipe) + - Enhanced per-sample shading DONE (asahi) + - Interpolation functions DONE (softpipe, asahi) - New overload resolution rules DONE (softpipe) GL_ARB_gpu_shader_fp64 DONE (freedreno/a6xx, softpipe) - GL_ARB_sample_shading DONE (freedreno/a6xx, nv50, panfrost, crocus/gen6+) + GL_ARB_sample_shading DONE (freedreno/a6xx, nv50, panfrost, crocus/gen6+, asahi) 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+) @@ -154,11 +154,11 @@ GL 4.2, GLSL 4.20 -- all DONE: freedreno/a6xx, nvc0, r600, radeonsi, llvmpipe, v GL_ARB_texture_compression_bptc DONE (all drivers that supports EXT_texture_sRGB and OES_texture_half_float) GL_ARB_compressed_texture_pixel_storage DONE (all drivers) - GL_ARB_shader_atomic_counters DONE (freedreno/a5xx+, softpipe, v3d, panfrost) + GL_ARB_shader_atomic_counters DONE (freedreno/a5xx+, softpipe, v3d, panfrost, asahi) GL_ARB_texture_storage DONE (all drivers) GL_ARB_transform_feedback_instanced DONE (freedreno, nv50, softpipe, v3d, asahi, crocus/gen6+) GL_ARB_base_instance DONE (freedreno, nv50, softpipe, v3d, crocus) - GL_ARB_shader_image_load_store DONE (freedreno/a5xx+, softpipe, panfrost) + GL_ARB_shader_image_load_store DONE (freedreno/a5xx+, softpipe, panfrost, asahi) GL_ARB_conservative_depth DONE (all drivers that support GLSL 1.30) GL_ARB_shading_language_420pack DONE (all drivers that support GLSL 1.30) GL_ARB_shading_language_packing DONE (all drivers) @@ -171,7 +171,7 @@ GL 4.3, GLSL 4.30 -- all DONE: freedreno/a6xx, nvc0, r600, radeonsi, llvmpipe, v GL_ARB_arrays_of_arrays DONE (all drivers that support GLSL 1.30) GL_ARB_ES3_compatibility DONE (all drivers that support GLSL 3.30) GL_ARB_clear_buffer_object DONE (all drivers) - GL_ARB_compute_shader DONE (freedreno/a5xx+, softpipe, v3d, panfrost, d3d12, crocus/gen7+) + GL_ARB_compute_shader DONE (freedreno/a5xx+, softpipe, v3d, panfrost, d3d12, crocus/gen7+, asahi) GL_ARB_copy_image DONE (freedreno/a6xx, nv50, softpipe, v3d, crocus) GL_KHR_debug DONE (all drivers) GL_ARB_explicit_uniform_location DONE (all drivers that support GLSL) @@ -182,8 +182,8 @@ GL 4.3, GLSL 4.30 -- all DONE: freedreno/a6xx, nvc0, r600, radeonsi, llvmpipe, v GL_ARB_multi_draw_indirect DONE (freedreno, softpipe, v3d, d3d12, crocus/gen7+) GL_ARB_program_interface_query DONE (all drivers) GL_ARB_robust_buffer_access_behavior DONE (freedreno, d3d12) - GL_ARB_shader_image_size DONE (freedreno/a5xx+, softpipe, v3d, panfrost, d3d12, crocus/gen7+) - GL_ARB_shader_storage_buffer_object DONE (freedreno/a5xx+, softpipe, v3d, panfrost, d3d12, crocus/gen7+) + GL_ARB_shader_image_size DONE (freedreno/a5xx+, softpipe, v3d, panfrost, d3d12, crocus/gen7+, asahi) + GL_ARB_shader_storage_buffer_object DONE (freedreno/a5xx+, softpipe, v3d, panfrost, d3d12, crocus/gen7+, asahi) GL_ARB_stencil_texturing DONE (freedreno, nv50, softpipe, v3d, panfrost, d3d12, asahi) GL_ARB_texture_buffer_range DONE (freedreno, nv50, softpipe, v3d, d3d12, crocus) GL_ARB_texture_query_levels DONE (all drivers that support GLSL 1.30) @@ -240,11 +240,11 @@ GL 4.6, GLSL 4.60 -- all DONE: radeonsi, virgl, zink, iris, crocus/gen7+ GL_KHR_no_error DONE (all drivers) These are the extensions cherry-picked to make GLES 3.1 -GLES3.1, GLSL ES 3.1 -- all DONE: freedreno/a5xx+, nvc0, r600, radeonsi, virgl, v3d, softpipe, llvmpipe, zink, panfrost, d3d12, iris, crocus/gen7.5+ +GLES3.1, GLSL ES 3.1 -- all DONE: freedreno/a5xx+, nvc0, r600, radeonsi, virgl, v3d, softpipe, llvmpipe, zink, panfrost, d3d12, iris, crocus/gen7.5+, asahi GL_ARB_arrays_of_arrays DONE (all drivers that support GLSL 1.30) GL_ARB_compute_shader DONE (freedreno/a5xx+, crocus/gen7+) - GL_ARB_draw_indirect DONE (freedreno, asahi, crocus/gen7+) + GL_ARB_draw_indirect DONE (freedreno, crocus/gen7+) GL_ARB_explicit_uniform_location DONE (all drivers that support GLSL) GL_ARB_framebuffer_no_attachments DONE (freedreno, softpipe, asahi, crocus/gen7+) GL_ARB_program_interface_query DONE (all drivers) @@ -254,19 +254,19 @@ GLES3.1, GLSL ES 3.1 -- all DONE: freedreno/a5xx+, nvc0, r600, radeonsi, virgl, GL_ARB_shader_storage_buffer_object DONE (freedreno/a5xx+, crocus/gen7+) GL_ARB_shading_language_packing DONE (all drivers) GL_ARB_separate_shader_objects DONE (all drivers) - GL_ARB_stencil_texturing DONE (freedreno, nv50, asahi) + GL_ARB_stencil_texturing DONE (freedreno, nv50) GL_ARB_texture_multisample (Multisample textures) DONE (freedreno/a5xx+, nv50, crocus/gen6+) GL_ARB_texture_storage_multisample DONE (all drivers that support GL_ARB_texture_multisample) GL_ARB_vertex_attrib_binding DONE (all drivers) - GS5 Enhanced textureGather DONE (freedreno, asahi, crocus/gen7+) - GS5 Packing/bitfield/conversion functions DONE (freedreno/a5xx+, asahi, crocus/gen6+) + GS5 Enhanced textureGather DONE (freedreno, crocus/gen7+) + GS5 Packing/bitfield/conversion functions DONE (freedreno/a5xx+, crocus/gen6+) GL_EXT_shader_integer_mix DONE (all drivers that support GLSL) Additional functionality not covered above: glMemoryBarrierByRegion DONE glGetTexLevelParameter[fi]v - needs updates DONE glGetBooleani_v - restrict to GLES enums - gl_HelperInvocation support DONE (r600, panfrost, asahi, crocus) + gl_HelperInvocation support DONE (r600, panfrost, crocus) GLES3.2, GLSL ES 3.2 -- all DONE: freedreno/a6xx, radeonsi, virgl, llvmpipe, zink, iris, crocus/gen7.5+ @@ -279,13 +279,13 @@ GLES3.2, GLSL ES 3.2 -- all DONE: freedreno/a6xx, radeonsi, virgl, llvmpipe, zin 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_gpu_shader5 DONE (freedreno/a6xx, all drivers that support GL_ARB_gpu_shader5) + 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, nvc0, r600, panfrost, d3d12) - GL_OES_sample_variables DONE (freedreno/a6xx, nvc0, r600, panfrost/bifrost, crocus/gen7+) - GL_OES_shader_image_atomic DONE (v3d, all drivers that support GL_ARB_shader_image_load_store) + GL_OES_sample_shading DONE (freedreno/a6xx, asahi, nvc0, r600, panfrost, d3d12) + GL_OES_sample_variables DONE (freedreno/a6xx, asahi, nvc0, r600, panfrost/bifrost, crocus/gen7+) + GL_OES_shader_image_atomic DONE (asahi, v3d, all drivers that support GL_ARB_shader_image_load_store) GL_OES_shader_io_blocks DONE (All drivers that support GLES 3.1) - GL_OES_shader_multisample_interpolation DONE (freedreno/a6xx, nvc0, r600) + GL_OES_shader_multisample_interpolation DONE (freedreno/a6xx, nvc0, r600, asahi) 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+) diff --git a/docs/relnotes/new_features.txt b/docs/relnotes/new_features.txt index b2211e82146..4d9aef09f32 100644 --- a/docs/relnotes/new_features.txt +++ b/docs/relnotes/new_features.txt @@ -7,3 +7,13 @@ New features ------------ VK_EXT_pipeline_robustness on ANV VK_KHR_maintenance5 on RADV +OpenGL ES 3.1 on Asahi +GL_ARB_compute_shader on Asahi +GL_ARB_shader_atomic_counters on Asahi +GL_ARB_shader_image_load_store on Asahi +GL_ARB_shader_image_size on Asahi +GL_ARB_shader_storage_buffer_object on Asahi +GL_ARB_sample_shading on Asahi +GL_OES_sample_variables on Asahi +GL_OES_shader_multisample_interpolation on Asahi +GL_OES_gpu_shader5 on Asahi diff --git a/src/gallium/drivers/asahi/agx_pipe.c b/src/gallium/drivers/asahi/agx_pipe.c index 07a40474967..a004ce7cb44 100644 --- a/src/gallium/drivers/asahi/agx_pipe.c +++ b/src/gallium/drivers/asahi/agx_pipe.c @@ -1608,21 +1608,16 @@ agx_get_param(struct pipe_screen *pscreen, enum pipe_cap param) case PIPE_CAP_SEAMLESS_CUBE_MAP_PER_TEXTURE: case PIPE_CAP_TEXTURE_BUFFER_OBJECTS: case PIPE_CAP_NULL_TEXTURES: - return 1; - case PIPE_CAP_TEXTURE_MULTISAMPLE: - return 1; - case PIPE_CAP_SURFACE_SAMPLE_COUNT: - /* TODO: MSRTT */ - case PIPE_CAP_SAMPLE_SHADING: - /* TODO: sample shading */ - return 0; - case PIPE_CAP_IMAGE_LOAD_FORMATTED: case PIPE_CAP_IMAGE_STORE_FORMATTED: case PIPE_CAP_COMPUTE: case PIPE_CAP_INT64: - return is_deqp; + case PIPE_CAP_SAMPLE_SHADING: + return 1; + case PIPE_CAP_SURFACE_SAMPLE_COUNT: + /* TODO: MSRTT */ + return 0; case PIPE_CAP_COPY_BETWEEN_COMPRESSED_AND_PLAIN_FORMATS: return 0; @@ -1645,7 +1640,7 @@ agx_get_param(struct pipe_screen *pscreen, enum pipe_cap param) case PIPE_CAP_GLSL_FEATURE_LEVEL_COMPATIBILITY: return is_deqp ? 330 : 140; case PIPE_CAP_ESSL_FEATURE_LEVEL: - return is_deqp ? 310 : 300; + return 320; case PIPE_CAP_CONSTANT_BUFFER_OFFSET_ALIGNMENT: return 16; @@ -1789,11 +1784,15 @@ agx_get_shader_param(struct pipe_screen *pscreen, enum pipe_shader_type shader, enum pipe_shader_cap param) { bool is_no16 = agx_device(pscreen)->debug & AGX_DBG_NO16; - bool is_deqp = agx_device(pscreen)->debug & AGX_DBG_DEQP; - if (shader != PIPE_SHADER_VERTEX && shader != PIPE_SHADER_FRAGMENT && - !(shader == PIPE_SHADER_COMPUTE && is_deqp)) - return 0; + switch (shader) { + case PIPE_SHADER_VERTEX: + case PIPE_SHADER_FRAGMENT: + case PIPE_SHADER_COMPUTE: + break; + default: + return false; + } /* Don't allow side effects with vertex processing. The APIs don't require it * and it may be problematic on our hardware. @@ -1864,10 +1863,10 @@ agx_get_shader_param(struct pipe_screen *pscreen, enum pipe_shader_type shader, return (1 << PIPE_SHADER_IR_NIR); case PIPE_SHADER_CAP_MAX_SHADER_BUFFERS: - return (is_deqp && allow_side_effects) ? PIPE_MAX_SHADER_BUFFERS : 0; + return allow_side_effects ? PIPE_MAX_SHADER_BUFFERS : 0; case PIPE_SHADER_CAP_MAX_SHADER_IMAGES: - return (is_deqp && allow_side_effects) ? PIPE_MAX_SHADER_IMAGES : 0; + return allow_side_effects ? PIPE_MAX_SHADER_IMAGES : 0; case PIPE_SHADER_CAP_MAX_HW_ATOMIC_COUNTERS: case PIPE_SHADER_CAP_MAX_HW_ATOMIC_COUNTER_BUFFERS: @@ -1885,9 +1884,6 @@ static int agx_get_compute_param(struct pipe_screen *pscreen, enum pipe_shader_ir ir_type, enum pipe_compute_cap param, void *ret) { - if (!(agx_device(pscreen)->debug & AGX_DBG_DEQP)) - return 0; - #define RET(x) \ do { \ if (ret) \