freedreno: use A6XX_GRAS_SC_CNTL_SINGLE_PRIM_MODE with fb readback

fixes:
dEQP-GLES31.functional.blend_equation_advanced.msaa.*

Signed-off-by: Amber Amber <amber@igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/21161>
This commit is contained in:
Amber
2023-02-06 14:39:19 +01:00
committed by Marge Bot
parent cd446b87e1
commit 40bdd2bbf7
8 changed files with 24 additions and 43 deletions

View File

@@ -331,7 +331,7 @@ Khronos, ARB, and OES extensions that are not part of any OpenGL or OpenGL ES ve
GL_EXT_sRGB_write_control DONE (all drivers that support GLES 3.0+)
GL_EXT_texture_norm16 DONE (freedreno, i965, r600, radeonsi, nvc0i, softpipe, zink)
GL_EXT_texture_sRGB_R8 DONE (all drivers that support GLES 3.0+)
GL_KHR_blend_equation_advanced_coherent DONE (i965/gen9+, panfrost, zink)
GL_KHR_blend_equation_advanced_coherent DONE (freedreno/a6xx, i965/gen9+, panfrost, zink)
GL_KHR_texture_compression_astc_hdr DONE (core only)
GL_KHR_texture_compression_astc_sliced_3d DONE (freedreno/a4xx+, i965/gen9+, r600, radeonsi, panfrost, softpipe, v3d, zink, lima)
GL_OES_depth_texture_cube_map DONE (all drivers that support GLSL 1.30+)

View File

@@ -32,31 +32,6 @@ KHR-GL45.direct_state_access.renderbuffers_storage_multisample,Fail
KHR-GL45.multi_bind.dispatch_bind_image_textures,Fail
# rendering errors in ~4x4 blocks around the bottom side of the diagonal for the quad
bypass-dEQP-GLES31.functional.blend_equation_advanced.msaa.colorburn,Fail
bypass-dEQP-GLES31.functional.blend_equation_advanced.msaa.colordodge,Fail
bypass-dEQP-GLES31.functional.blend_equation_advanced.msaa.darken,Fail
bypass-dEQP-GLES31.functional.blend_equation_advanced.msaa.difference,Fail
bypass-dEQP-GLES31.functional.blend_equation_advanced.msaa.exclusion,Fail
bypass-dEQP-GLES31.functional.blend_equation_advanced.msaa.hardlight,Fail
bypass-dEQP-GLES31.functional.blend_equation_advanced.msaa.hsl_color,Fail
bypass-dEQP-GLES31.functional.blend_equation_advanced.msaa.hsl_hue,Fail
bypass-dEQP-GLES31.functional.blend_equation_advanced.msaa.hsl_luminosity,Fail
bypass-dEQP-GLES31.functional.blend_equation_advanced.msaa.hsl_saturation,Fail
bypass-dEQP-GLES31.functional.blend_equation_advanced.msaa.lighten,Fail
bypass-dEQP-GLES31.functional.blend_equation_advanced.msaa.multiply,Fail
bypass-dEQP-GLES31.functional.blend_equation_advanced.msaa.overlay,Fail
bypass-dEQP-GLES31.functional.blend_equation_advanced.msaa.screen,Fail
bypass-dEQP-GLES31.functional.blend_equation_advanced.msaa.softlight,Fail
bypass-dEQP-GLES31.functional.blend_equation_advanced.basic.colorburn,Fail
bypass-dEQP-GLES31.functional.blend_equation_advanced.basic.screen,Fail
bypass-dEQP-GLES31.functional.blend_equation_advanced.barrier.screen,Fail
bypass-dEQP-GLES31.functional.blend_equation_advanced.barrier.hardlight,Fail
bypass-dEQP-GLES31.functional.blend_equation_advanced.barrier.hsl_luminosity,Fail
bypass-dEQP-GLES31.functional.blend_equation_advanced.barrier.lighten,Fail
bypass-dEQP-GLES31.functional.blend_equation_advanced.barrier.softlight,Fail
# Fails when TU_DEBUG=forcebin is set
gmem-dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.graphics.writes_two_buffers_geom,Fail
gmem-dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.graphics.writes_two_buffers_vert,Fail

View File

@@ -31,23 +31,6 @@ KHR-GL45.direct_state_access.renderbuffers_storage_multisample,Fail
KHR-GL45.multi_bind.dispatch_bind_image_textures,Fail
# rendering errors in ~4x4 blocks around the bottom side of the diagonal for the quad
bypass-dEQP-GLES31.functional.blend_equation_advanced.msaa.colorburn,Fail
bypass-dEQP-GLES31.functional.blend_equation_advanced.msaa.colordodge,Fail
bypass-dEQP-GLES31.functional.blend_equation_advanced.msaa.darken,Fail
bypass-dEQP-GLES31.functional.blend_equation_advanced.msaa.difference,Fail
bypass-dEQP-GLES31.functional.blend_equation_advanced.msaa.exclusion,Fail
bypass-dEQP-GLES31.functional.blend_equation_advanced.msaa.hardlight,Fail
bypass-dEQP-GLES31.functional.blend_equation_advanced.msaa.hsl_color,Fail
bypass-dEQP-GLES31.functional.blend_equation_advanced.msaa.hsl_hue,Fail
bypass-dEQP-GLES31.functional.blend_equation_advanced.msaa.hsl_luminosity,Fail
bypass-dEQP-GLES31.functional.blend_equation_advanced.msaa.hsl_saturation,Fail
bypass-dEQP-GLES31.functional.blend_equation_advanced.msaa.lighten,Fail
bypass-dEQP-GLES31.functional.blend_equation_advanced.msaa.multiply,Fail
bypass-dEQP-GLES31.functional.blend_equation_advanced.msaa.overlay,Fail
bypass-dEQP-GLES31.functional.blend_equation_advanced.msaa.screen,Fail
bypass-dEQP-GLES31.functional.blend_equation_advanced.msaa.softlight,Fail
# Fails when TU_DEBUG=forcebin is set
gmem-dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.graphics.writes_two_buffers_geom,Fail
gmem-dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.graphics.writes_two_buffers_vert,Fail

View File

@@ -282,6 +282,7 @@ alloc_variant(struct ir3_shader *shader, const struct ir3_shader_key *key,
case MESA_SHADER_FRAGMENT:
v->fs.early_fragment_tests = info->fs.early_fragment_tests;
v->fs.color_is_dual_source = info->fs.color_is_dual_source;
v->fs.uses_fbfetch_output = info->fs.uses_fbfetch_output;
break;
case MESA_SHADER_COMPUTE:

View File

@@ -766,6 +766,7 @@ struct ir3_shader_variant {
struct {
bool early_fragment_tests : 1;
bool color_is_dual_source : 1;
bool uses_fbfetch_output : 1;
} fs;
struct {
unsigned req_input_mem;

View File

@@ -206,6 +206,9 @@ setup_state_map(struct fd_context *ctx)
fd_context_add_shader_map(ctx, PIPE_SHADER_COMPUTE,
FD_DIRTY_SHADER_SSBO | FD_DIRTY_SHADER_IMAGE,
BIT(FD6_GROUP_CS_BINDLESS));
fd_context_add_shader_map(ctx, PIPE_SHADER_FRAGMENT,
FD_DIRTY_SHADER_PROG,
BIT(FD6_GROUP_PRIM_MODE_SYSMEM) | BIT(FD6_GROUP_PRIM_MODE_GMEM));
/* NOTE: scissor enabled bit is part of rasterizer state, but
* fd_rasterizer_state_bind() will mark scissor dirty if needed:

View File

@@ -662,6 +662,20 @@ fd6_emit_3d_state(struct fd_ringbuffer *ring, struct fd6_emit *emit)
case FD6_GROUP_SO:
fd6_emit_streamout(ring, emit);
break;
case FD6_GROUP_PRIM_MODE_SYSMEM:
state = fd_submit_new_ringbuffer(emit->ctx->batch->submit, 2 * 4, FD_RINGBUFFER_STREAMING);
OUT_PKT4(ring, REG_A6XX_GRAS_SC_CNTL, 1);
OUT_RING(ring, A6XX_GRAS_SC_CNTL_CCUSINGLECACHELINESIZE(2) |
emit->fs->fs.uses_fbfetch_output ? A6XX_GRAS_SC_CNTL_SINGLE_PRIM_MODE(FLUSH_PER_OVERLAP_AND_OVERWRITE) : 0);
fd6_state_take_group(&emit->state, state, FD6_GROUP_PRIM_MODE_SYSMEM);
break;
case FD6_GROUP_PRIM_MODE_GMEM:
state = fd_submit_new_ringbuffer(emit->ctx->batch->submit, 2 * 4, FD_RINGBUFFER_STREAMING);
OUT_PKT4(ring, REG_A6XX_GRAS_SC_CNTL, 1);
OUT_RING(ring, A6XX_GRAS_SC_CNTL_CCUSINGLECACHELINESIZE(2) |
emit->fs->fs.uses_fbfetch_output ? A6XX_GRAS_SC_CNTL_SINGLE_PRIM_MODE(FLUSH_PER_OVERLAP) : 0);
fd6_state_take_group(&emit->state, state, FD6_GROUP_PRIM_MODE_GMEM);
break;
case FD6_GROUP_NON_GROUP:
fd6_emit_non_ring(ring, emit);
break;

View File

@@ -70,6 +70,8 @@ enum fd6_state_id {
FD6_GROUP_DS_BINDLESS,
FD6_GROUP_GS_BINDLESS,
FD6_GROUP_FS_BINDLESS,
FD6_GROUP_PRIM_MODE_SYSMEM,
FD6_GROUP_PRIM_MODE_GMEM,
/*
* Virtual state-groups, which don't turn into a CP_SET_DRAW_STATE group
@@ -145,6 +147,8 @@ fd6_state_take_group(struct fd6_state *state, struct fd_ringbuffer *stateobj,
[FD6_GROUP_PROG_INTERP] = ENABLE_DRAW,
[FD6_GROUP_FS_TEX] = ENABLE_DRAW,
[FD6_GROUP_FS_BINDLESS] = ENABLE_DRAW,
[FD6_GROUP_PRIM_MODE_SYSMEM] = CP_SET_DRAW_STATE__0_SYSMEM | CP_SET_DRAW_STATE__0_BINNING,
[FD6_GROUP_PRIM_MODE_GMEM] = CP_SET_DRAW_STATE__0_GMEM,
};
assert(state->num_groups < ARRAY_SIZE(state->groups));
struct fd6_state_group *g = &state->groups[state->num_groups++];