v3d: enable framebuffer fetch

Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/33766>
This commit is contained in:
Ella Stanforth 2025-02-26 16:31:15 +00:00 committed by Marge Bot
parent 6023a46d02
commit 332b313547
6 changed files with 20 additions and 9 deletions

View file

@ -271,7 +271,7 @@ GLES3.1, GLSL ES 3.1 -- all DONE: freedreno/a5xx+, nvc0, r600, radeonsi, virgl,
GLES3.2, GLSL ES 3.2 -- all DONE: freedreno/a6xx, radeonsi, virgl, llvmpipe, zink, iris, crocus/gen7.5+, asahi GLES3.2, GLSL ES 3.2 -- all DONE: freedreno/a6xx, radeonsi, virgl, llvmpipe, zink, iris, crocus/gen7.5+, asahi
GL_EXT_color_buffer_float DONE (all drivers) GL_EXT_color_buffer_float DONE (all drivers)
GL_KHR_blend_equation_advanced DONE (freedreno/a6xx, nvc0, panfrost, crocus/gen4.5+) GL_KHR_blend_equation_advanced DONE (freedreno/a6xx, nvc0, panfrost, crocus/gen4.5+, v3d)
GL_KHR_debug DONE (all drivers) GL_KHR_debug DONE (all drivers)
GL_KHR_robustness DONE (freedreno, nvc0, r600) GL_KHR_robustness DONE (freedreno, nvc0, r600)
GL_KHR_texture_compression_astc_ldr DONE (freedreno, r600, v3d, vc4, panfrost, softpipe, lima, crocus/gen6+) GL_KHR_texture_compression_astc_ldr DONE (freedreno, r600, v3d, vc4, panfrost, softpipe, lima, crocus/gen6+)
@ -317,8 +317,8 @@ Khronos, ARB, and OES extensions that are not part of any OpenGL or OpenGL ES ve
GL_ARB_sparse_texture_clamp DONE (radeonsi/gfx9+, zink) GL_ARB_sparse_texture_clamp DONE (radeonsi/gfx9+, zink)
GL_ARB_texture_filter_minmax DONE (freedreno/a6xx, nvc0/gm200+, zink) GL_ARB_texture_filter_minmax DONE (freedreno/a6xx, nvc0/gm200+, zink)
GL_ARM_shader_framebuffer_fetch_depth_stencil DONE (llvmpipe) GL_ARM_shader_framebuffer_fetch_depth_stencil DONE (llvmpipe)
GL_EXT_shader_framebuffer_fetch DONE (freedreno/a6xx, iris/gen9+, llvmpipe, panfrost, virgl, zink, asahi) GL_EXT_shader_framebuffer_fetch DONE (freedreno/a6xx, iris/gen9+, llvmpipe, panfrost, virgl, zink, asahi, v3d)
GL_EXT_shader_framebuffer_fetch_non_coherent DONE (freedreno/a6xx, iris, llvmpipe, panfrost, virgl, zink, asahi) GL_EXT_shader_framebuffer_fetch_non_coherent DONE (freedreno/a6xx, iris, llvmpipe, panfrost, virgl, zink, asahi, v3d)
GL_EXT_clear_texture DONE (all drivers) GL_EXT_clear_texture DONE (all drivers)
GL_EXT_color_buffer_half_float DONE (freedreno, iris, llvmpipe, nv50, nvc0, radeonsi, zink, crocus, asahi) GL_EXT_color_buffer_half_float DONE (freedreno, iris, llvmpipe, nv50, nvc0, radeonsi, zink, crocus, asahi)
GL_EXT_conservative_depth DONE (all drivers that support GLES 3.0+) GL_EXT_conservative_depth DONE (all drivers that support GLES 3.0+)
@ -338,7 +338,7 @@ Khronos, ARB, and OES extensions that are not part of any OpenGL or OpenGL ES ve
GL_EXT_texture_norm16 DONE (freedreno, r600, radeonsi, nvc0i, softpipe, zink, iris, crocus) GL_EXT_texture_norm16 DONE (freedreno, r600, radeonsi, nvc0i, softpipe, zink, iris, crocus)
GL_EXT_texture_sRGB_R8 DONE (all drivers that support GLES 3.0+) GL_EXT_texture_sRGB_R8 DONE (all drivers that support GLES 3.0+)
GL_EXT_texture_view DONE (all drivers that support GL_OES_texture_view) GL_EXT_texture_view DONE (all drivers that support GL_OES_texture_view)
GL_KHR_blend_equation_advanced_coherent DONE (freedreno/a6xx, panfrost, zink, asahi, iris/gen9+) GL_KHR_blend_equation_advanced_coherent DONE (freedreno/a6xx, panfrost, zink, asahi, iris/gen9+, v3d)
GL_KHR_shader_subgroup DONE (radeonsi, zink) GL_KHR_shader_subgroup DONE (radeonsi, zink)
GL_KHR_texture_compression_astc_hdr DONE (core only) GL_KHR_texture_compression_astc_hdr DONE (core only)
GL_KHR_texture_compression_astc_sliced_3d DONE (freedreno/a4xx+, r600, radeonsi, panfrost, softpipe, v3d, zink, lima, asahi, iris/gen9+) GL_KHR_texture_compression_astc_sliced_3d DONE (freedreno/a4xx+, r600, radeonsi, panfrost, softpipe, v3d, zink, lima, asahi, iris/gen9+)

View file

@ -20,3 +20,7 @@ VK_KHR_shader_subgroup_extended_types on panvk/v10+
shaderStorageImageExtendedFormats on panvk shaderStorageImageExtendedFormats on panvk
VK_KHR_display on panvk VK_KHR_display on panvk
VK_EXT_display_control on panvk VK_EXT_display_control on panvk
EXT_shader_framebuffer_image_fetch on v3d
EXT_shader_framebuffer_image_fetch_coherent on v3d
KHR_blend_equation_advanced on v3d
KHR_blend_equation_advanced_coherent on v3d

View file

@ -439,7 +439,7 @@ struct v3d_fs_key {
uint8_t uint_color_rb; uint8_t uint_color_rb;
/* Color format information per render target. Only set when logic /* Color format information per render target. Only set when logic
* operations are enabled. * operations are enabled or when fbfetch is in use.
*/ */
struct { struct {
enum pipe_format format; enum pipe_format format;

View file

@ -690,11 +690,13 @@ v3d_update_compiled_fs(struct v3d_context *v3d, uint8_t prim_mode)
*/ */
key->cbufs |= 1 << i; key->cbufs |= 1 << i;
/* If logic operations are enabled then we might emit color /* When emitting color reads (in the case of logic ops and
* reads and we need to know the color buffer format and * load_output) we need to know the color buffer format and
* swizzle for that. * swizzle.
*/ */
if (key->logicop_func != PIPE_LOGICOP_COPY) { if (key->logicop_func != PIPE_LOGICOP_COPY ||
s->info.fs.uses_fbfetch_output) {
key->color_fmt[i].format = cbuf->format; key->color_fmt[i].format = cbuf->format;
memcpy(key->color_fmt[i].swizzle, memcpy(key->color_fmt[i].swizzle,
v3d_get_format_swizzle(&v3d->screen->devinfo, v3d_get_format_swizzle(&v3d->screen->devinfo,

View file

@ -338,6 +338,8 @@ v3d_init_screen_caps(struct v3d_screen *screen)
caps->max_texture_array_layers = V3D_MAX_ARRAY_LAYERS; caps->max_texture_array_layers = V3D_MAX_ARRAY_LAYERS;
caps->max_render_targets = V3D_MAX_RENDER_TARGETS(screen->devinfo.ver); caps->max_render_targets = V3D_MAX_RENDER_TARGETS(screen->devinfo.ver);
caps->fbfetch = caps->max_render_targets;
caps->fbfetch_coherent = true;
caps->vendor_id = 0x14E4; caps->vendor_id = 0x14E4;

View file

@ -560,6 +560,9 @@ emit_shader_state_record(struct v3d_context *v3d,
shader.fragment_shader_does_z_writes = shader.fragment_shader_does_z_writes =
v3d->prog.fs->prog_data.fs->writes_z; v3d->prog.fs->prog_data.fs->writes_z;
shader.enable_sample_rate_shading =
job->msaa && v3d->prog.fs->prog_data.fs->force_per_sample_msaa;
/* Set if the EZ test must be disabled (due to shader side /* Set if the EZ test must be disabled (due to shader side
* effects and the early_z flag not being present in the * effects and the early_z flag not being present in the
* shader). * shader).