[virglrenderer-devel] [PATCH 03/10] shaders: handle early fragment tests

Dave Airlie airlied at gmail.com
Tue Jul 24 23:00:54 UTC 2018


From: Dave Airlie <airlied at redhat.com>

As part of shader image support we need to support this property.
---
 src/vrend_shader.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/src/vrend_shader.c b/src/vrend_shader.c
index 6431280..bc37935 100644
--- a/src/vrend_shader.c
+++ b/src/vrend_shader.c
@@ -198,6 +198,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;
@@ -1252,6 +1253,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;
 }
 
@@ -4051,6 +4059,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];
-- 
2.14.3



More information about the virglrenderer-devel mailing list