From a0233d96e179472d4e7d310366857e25f2071321 Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Tue, 10 Oct 2017 02:17:18 +0200 Subject: [PATCH] gskslvariable: Fold constant variables away in SPV output This mirrors glslang behavior. --- gsk/gskslvariable.c | 43 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 41 insertions(+), 2 deletions(-) diff --git a/gsk/gskslvariable.c b/gsk/gskslvariable.c index d89e0563e1..f41e469984 100644 --- a/gsk/gskslvariable.c +++ b/gsk/gskslvariable.c @@ -138,6 +138,38 @@ static const GskSlVariableClass GSK_SL_VARIABLE_STANDARD = { gsk_sl_variable_standard_store_spv, }; +/* CONSTANT */ + +static guint32 +gsk_sl_variable_constant_write_spv (const GskSlVariable *variable, + GskSpvWriter *writer) +{ + return 0; +} + +static guint32 +gsk_sl_variable_constant_load_spv (GskSlVariable *variable, + GskSpvWriter *writer) +{ + return gsk_spv_writer_get_id_for_value (writer, variable->initial_value); +} + +static void +gsk_sl_variable_constant_store_spv (GskSlVariable *variable, + GskSpvWriter *writer, + guint32 value) +{ + g_assert_not_reached (); +} + +static const GskSlVariableClass GSK_SL_VARIABLE_CONSTANT = { + sizeof (GskSlVariable), + gsk_sl_variable_free, + gsk_sl_variable_constant_write_spv, + gsk_sl_variable_constant_load_spv, + gsk_sl_variable_constant_store_spv, +}; + /* PARAMETER */ static guint32 @@ -176,6 +208,7 @@ gsk_sl_variable_parameter_store_spv (GskSlVariable *variable, 0); } + static const GskSlVariableClass GSK_SL_VARIABLE_PARAMETER = { sizeof (GskSlVariable), gsk_sl_variable_free, @@ -192,13 +225,19 @@ gsk_sl_variable_select_class (const GskSlQualifier *qualifier, { switch (qualifier->storage) { - case GSK_SL_STORAGE_GLOBAL: case GSK_SL_STORAGE_GLOBAL_CONST: + g_assert (has_initial_value); + case GSK_SL_STORAGE_LOCAL_CONST: + if (has_initial_value) + return &GSK_SL_VARIABLE_CONSTANT; + else + return &GSK_SL_VARIABLE_STANDARD; + + case GSK_SL_STORAGE_GLOBAL: case GSK_SL_STORAGE_GLOBAL_IN: case GSK_SL_STORAGE_GLOBAL_OUT: case GSK_SL_STORAGE_GLOBAL_UNIFORM: case GSK_SL_STORAGE_LOCAL: - case GSK_SL_STORAGE_LOCAL_CONST: return &GSK_SL_VARIABLE_STANDARD; case GSK_SL_STORAGE_PARAMETER_IN: