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:
@@ -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+)
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -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:
|
||||
|
@@ -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;
|
||||
|
@@ -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:
|
||||
|
@@ -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;
|
||||
|
@@ -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++];
|
||||
|
Reference in New Issue
Block a user