diff --git a/docs/features.txt b/docs/features.txt index cf945fcd6de..7757fa512fc 100644 --- a/docs/features.txt +++ b/docs/features.txt @@ -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+) diff --git a/docs/relnotes/new_features.txt b/docs/relnotes/new_features.txt index 5bee7a05b6d..b71b492c126 100644 --- a/docs/relnotes/new_features.txt +++ b/docs/relnotes/new_features.txt @@ -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 diff --git a/src/broadcom/compiler/v3d_compiler.h b/src/broadcom/compiler/v3d_compiler.h index d4a61e92d91..753474279f3 100644 --- a/src/broadcom/compiler/v3d_compiler.h +++ b/src/broadcom/compiler/v3d_compiler.h @@ -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; diff --git a/src/gallium/drivers/v3d/v3d_program.c b/src/gallium/drivers/v3d/v3d_program.c index a756cfb06c2..fc59dbd7705 100644 --- a/src/gallium/drivers/v3d/v3d_program.c +++ b/src/gallium/drivers/v3d/v3d_program.c @@ -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, diff --git a/src/gallium/drivers/v3d/v3d_screen.c b/src/gallium/drivers/v3d/v3d_screen.c index 224a141ca22..dea7efb51b3 100644 --- a/src/gallium/drivers/v3d/v3d_screen.c +++ b/src/gallium/drivers/v3d/v3d_screen.c @@ -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; diff --git a/src/gallium/drivers/v3d/v3dx_draw.c b/src/gallium/drivers/v3d/v3dx_draw.c index 506284dae98..7400358e881 100644 --- a/src/gallium/drivers/v3d/v3dx_draw.c +++ b/src/gallium/drivers/v3d/v3dx_draw.c @@ -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).