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
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_robustness DONE (freedreno, nvc0, r600)
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_texture_filter_minmax DONE (freedreno/a6xx, nvc0/gm200+, zink)
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_non_coherent DONE (freedreno/a6xx, iris, 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, v3d)
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_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_sRGB_R8 DONE (all drivers that support GLES 3.0+)
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_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+)

View File

@@ -20,3 +20,7 @@ VK_KHR_shader_subgroup_extended_types on panvk/v10+
shaderStorageImageExtendedFormats on panvk
VK_KHR_display 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;
/* Color format information per render target. Only set when logic
* operations are enabled.
* operations are enabled or when fbfetch is in use.
*/
struct {
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;
/* If logic operations are enabled then we might emit color
* reads and we need to know the color buffer format and
* swizzle for that.
/* When emitting color reads (in the case of logic ops and
* load_output) we need to know the color buffer format and
* 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;
memcpy(key->color_fmt[i].swizzle,
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_render_targets = V3D_MAX_RENDER_TARGETS(screen->devinfo.ver);
caps->fbfetch = caps->max_render_targets;
caps->fbfetch_coherent = true;
caps->vendor_id = 0x14E4;

View File

@@ -560,6 +560,9 @@ emit_shader_state_record(struct v3d_context *v3d,
shader.fragment_shader_does_z_writes =
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
* effects and the early_z flag not being present in the
* shader).