glsl: Add support for representing framebuffer fetch in the GLSL IR.
authorFrancisco Jerez <currojerez@riseup.net>
Wed, 20 Jul 2016 03:07:47 +0000 (20:07 -0700)
committerFrancisco Jerez <currojerez@riseup.net>
Wed, 24 Aug 2016 20:28:30 +0000 (13:28 -0700)
The GLSL IR representation of framebuffer fetch amounts to a single
bit in the ir_variable object applicable to fragment shader outputs.
The flag indicates that the variable will be implicitly initialized to
the previous contents of the render buffer at the same fragment
coordinates and sample index.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/compiler/glsl/ir.cpp
src/compiler/glsl/ir.h

index 2aa4affac9dcdd9c79bb0892fb2190d1670c403b..4dadfd27e23eaa463c072f823ab72a688dd91c88 100644 (file)
@@ -1686,6 +1686,7 @@ ir_variable::ir_variable(const struct glsl_type *type, const char *name,
    this->data.image_volatile = false;
    this->data.image_restrict = false;
    this->data.from_ssbo_unsized_array = false;
+   this->data.fb_fetch_output = false;
 
    if (type != NULL) {
       if (type->base_type == GLSL_TYPE_SAMPLER)
index 68e774c03d1e065ba40baae637096e1a13dcec52..5e1e9bf34c7ac7cf7ea01239c73006cc5bb01fbf 100644 (file)
@@ -831,6 +831,14 @@ public:
       unsigned from_ssbo_unsized_array:1; /**< unsized array buffer variable. */
 
       unsigned implicit_sized_array:1;
+
+      /**
+       * Whether this is a fragment shader output implicitly initialized with
+       * the previous contents of the specified render target at the
+       * framebuffer location corresponding to this shader invocation.
+       */
+      unsigned fb_fetch_output:1;
+
       /**
        * Emit a warning if this variable is accessed.
        */