From 1fe8defa61560e495ff8d33de901a9f0ed6dcbfe Mon Sep 17 00:00:00 2001 From: Dave Airlie Date: Tue, 27 Mar 2018 16:27:51 +1000 Subject: [PATCH] shaders: handle early fragment tests As part of shader image support we need to support this property. Reviewed-by: Gert Wollny --- src/vrend_shader.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/vrend_shader.c b/src/vrend_shader.c index 298ce03..bab29a8 100644 --- a/src/vrend_shader.c +++ b/src/vrend_shader.c @@ -201,6 +201,7 @@ struct dump_ctx { bool vs_has_pervertex; bool write_mul_temp; bool has_sample_input; + bool early_depth_stencil; int tcs_vertices_out; int tes_prim_mode; @@ -1295,6 +1296,13 @@ iter_property(struct tgsi_iterate_context *iter, if (prop->Property.PropertyName == TGSI_PROPERTY_TES_POINT_MODE) { ctx->tes_point_mode = prop->u[0].Data; } + + if (prop->Property.PropertyName == TGSI_PROPERTY_FS_EARLY_DEPTH_STENCIL) { + ctx->early_depth_stencil = prop->u[0].Data > 0; + if (ctx->early_depth_stencil) + ctx->shader_req_bits |= SHADER_REQ_IMAGE_LOAD_STORE; + } + return TRUE; } @@ -4137,6 +4145,10 @@ static char *emit_ios(struct dump_ctx *ctx, char *glsl_hdr) ctx->fs_pixel_center ? "pixel_center_integer" : ""); STRCAT_WITH_RET(glsl_hdr, buf); } + if (ctx->early_depth_stencil) { + snprintf(buf, 255, "layout(early_fragment_tests) in;\n"); + STRCAT_WITH_RET(glsl_hdr, buf); + } } if (ctx->prog_type == TGSI_PROCESSOR_GEOMETRY) { char invocbuf[25];