[gtk+/wip/otte/shader: 187/200] gskslexpression: Fold constant expressions into SPIRV



commit 039f21bf411c6ae8703ffa4312019492356b51a6
Author: Benjamin Otte <otte redhat com>
Date:   Thu Oct 12 02:27:28 2017 +0200

    gskslexpression: Fold constant expressions into SPIRV
    
    If an expression is constant, always get the constant expression and
    write it to the SPIRV file instead of doing an evaluation.
    
    This has immense benefits when dealing with initializations, because
    vec4(1, 2, 3, 4) will actually result in a constant instead of first
    creating 4 integers, manually converting each of them to float before
    calling the constructor. Yuck.

 gsk/gskslexpression.c |   10 ++++++++++
 1 files changed, 10 insertions(+), 0 deletions(-)
---
diff --git a/gsk/gskslexpression.c b/gsk/gskslexpression.c
index 3036d32..c590e03 100644
--- a/gsk/gskslexpression.c
+++ b/gsk/gskslexpression.c
@@ -2775,8 +2775,18 @@ gsk_sl_expression_write_spv (const GskSlExpression *expression,
                              GskSpvWriter          *writer)
 {
   GskSpvAccessChain *chain;
+  GskSlValue *constant;
   guint32 result_id;
 
+  constant = gsk_sl_expression_get_constant (expression);
+  if (constant)
+    {
+      result_id = gsk_spv_writer_get_id_for_value (writer, constant);
+      gsk_sl_value_free (constant);
+
+      return result_id;
+    }
+
   chain = gsk_sl_expression_get_spv_access_chain (expression, writer);
   if (chain)
     {


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]