From 41f22a1823a77183fb28e8a6dd312d723c3fda87 Mon Sep 17 00:00:00 2001 From: Pavel Asyutchenko Date: Wed, 1 Sep 2021 23:25:16 +0300 Subject: [PATCH] gallium: add PIPE_CAP_FBFETCH_ZS and expose extension st/mesa will expose GL_ARM_shader_framebuffer_fetch_depth_stencil if this new capability is supported by the driver. Signed-off-by: Pavel Asyutchenko Reviewed-by: Alyssa Rosenzweig Reviewed-By: Mike Blumenkrantz Part-of: --- docs/features.txt | 1 + docs/gallium/screen.rst | 2 ++ src/gallium/auxiliary/util/u_screen.c | 1 + src/gallium/include/pipe/p_defines.h | 1 + src/mesa/main/consts_exts.h | 1 + src/mesa/main/extensions_table.h | 2 ++ src/mesa/state_tracker/st_extensions.c | 3 ++- 7 files changed, 10 insertions(+), 1 deletion(-) diff --git a/docs/features.txt b/docs/features.txt index 4fa36e7f7de..047f6ee4d86 100644 --- a/docs/features.txt +++ b/docs/features.txt @@ -316,6 +316,7 @@ Khronos, ARB, and OES extensions that are not part of any OpenGL or OpenGL ES ve GL_ARB_sparse_texture2 DONE (radeonsi/gfx9+, zink) GL_ARB_sparse_texture_clamp DONE (radeonsi/gfx9+, zink) GL_ARB_texture_filter_minmax DONE (nvc0/gm200+, zink) + GL_ARM_shader_framebuffer_fetch_depth_stencil DONE (llvmpipe) GL_EXT_color_buffer_half_float DONE (freedreno, i965, iris, llvmpipe, nv50, nvc0, radeonsi, zink) GL_EXT_depth_bounds_test DONE (i965/gen12+, nv50, nvc0, radeonsi, softpipe, zink) GL_EXT_memory_object DONE (radeonsi, i965/gen7+, llvmpipe, zink) diff --git a/docs/gallium/screen.rst b/docs/gallium/screen.rst index 2e8b6e74a35..8cddec99f82 100644 --- a/docs/gallium/screen.rst +++ b/docs/gallium/screen.rst @@ -424,6 +424,8 @@ The integer capabilities: and a larger value would mean that multiple render targets are supported. * ``PIPE_CAP_FBFETCH_COHERENT``: Whether framebuffer fetches from the fragment shader can be guaranteed to be coherent with framebuffer writes. +* ``PIPE_CAP_FBFETCH_ZS``: Whether fragment shader can fetch current values of + Z/S attachments. These fetches are always coherent with framebuffer writes. * ``PIPE_CAP_LEGACY_MATH_RULES``: Whether NIR shaders support the ``shader_info.use_legacy_math_rules`` flag (see documentation there), and TGSI shaders support the corresponding ``TGSI_PROPERTY_LEGACY_MATH_RULES``. diff --git a/src/gallium/auxiliary/util/u_screen.c b/src/gallium/auxiliary/util/u_screen.c index 227e599f0b3..a220a633538 100644 --- a/src/gallium/auxiliary/util/u_screen.c +++ b/src/gallium/auxiliary/util/u_screen.c @@ -308,6 +308,7 @@ u_pipe_screen_get_param_defaults(struct pipe_screen *pscreen, case PIPE_CAP_FBFETCH: case PIPE_CAP_FBFETCH_COHERENT: + case PIPE_CAP_FBFETCH_ZS: case PIPE_CAP_BLEND_EQUATION_ADVANCED: case PIPE_CAP_LEGACY_MATH_RULES: case PIPE_CAP_DOUBLES: diff --git a/src/gallium/include/pipe/p_defines.h b/src/gallium/include/pipe/p_defines.h index cc7a482d05f..e57693958b4 100644 --- a/src/gallium/include/pipe/p_defines.h +++ b/src/gallium/include/pipe/p_defines.h @@ -1011,6 +1011,7 @@ enum pipe_cap PIPE_CAP_MAX_CONSTANT_BUFFER_SIZE_UINT, PIPE_CAP_HARDWARE_GL_SELECT, PIPE_CAP_DITHERING, + PIPE_CAP_FBFETCH_ZS, PIPE_CAP_LAST, /* XXX do not add caps after PIPE_CAP_LAST! */ diff --git a/src/mesa/main/consts_exts.h b/src/mesa/main/consts_exts.h index 1afe0ee6c77..c33242862a8 100644 --- a/src/mesa/main/consts_exts.h +++ b/src/mesa/main/consts_exts.h @@ -234,6 +234,7 @@ struct gl_extensions GLboolean AMD_vertex_shader_viewport_index; GLboolean ANDROID_extension_pack_es31a; GLboolean APPLE_object_purgeable; + GLboolean ARM_shader_framebuffer_fetch_depth_stencil; GLboolean ATI_meminfo; GLboolean ATI_texture_compression_3dc; GLboolean ATI_texture_mirror_once; diff --git a/src/mesa/main/extensions_table.h b/src/mesa/main/extensions_table.h index 696a9aaea81..74cec475c99 100644 --- a/src/mesa/main/extensions_table.h +++ b/src/mesa/main/extensions_table.h @@ -200,6 +200,8 @@ EXT(ARB_vertex_type_2_10_10_10_rev , ARB_vertex_type_2_10_10_10_rev EXT(ARB_viewport_array , ARB_viewport_array , GLL, GLC, x , x , 2010) EXT(ARB_window_pos , dummy_true , GLL, x , x , x , 2001) +EXT(ARM_shader_framebuffer_fetch_depth_stencil, ARM_shader_framebuffer_fetch_depth_stencil, GLL, GLC, x , ES2, 2014) + EXT(ATI_blend_equation_separate , EXT_blend_equation_separate , GLL, GLC, x , x , 2003) EXT(ATI_draw_buffers , dummy_true , GLL, x , x , x , 2002) EXT(ATI_fragment_shader , ATI_fragment_shader , GLL, x , x , x , 2001) diff --git a/src/mesa/state_tracker/st_extensions.c b/src/mesa/state_tracker/st_extensions.c index 79051ba7ec3..8eaed354bb2 100644 --- a/src/mesa/state_tracker/st_extensions.c +++ b/src/mesa/state_tracker/st_extensions.c @@ -874,7 +874,8 @@ void st_init_extensions(struct pipe_screen *screen, { o(OES_texture_float_linear), PIPE_CAP_TEXTURE_FLOAT_LINEAR }, { o(OES_texture_half_float_linear), PIPE_CAP_TEXTURE_HALF_FLOAT_LINEAR }, { o(OES_texture_view), PIPE_CAP_SAMPLER_VIEW_TARGET }, - { o(INTEL_blackhole_render), PIPE_CAP_FRONTEND_NOOP, }, + { o(INTEL_blackhole_render), PIPE_CAP_FRONTEND_NOOP }, + { o(ARM_shader_framebuffer_fetch_depth_stencil), PIPE_CAP_FBFETCH_ZS }, }; /* Required: render target and sampler support */