summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Otte <otte@redhat.com>2017-10-24 18:56:17 +0200
committerBenjamin Otte <otte@redhat.com>2017-10-30 02:58:03 +0100
commit648cf099a8d5223a0ee2464b4285318f5efc15f2 (patch)
tree6206dd9cd1c2522c79d06e8eb4839c87e00bd92a
parentff05d6ca35a6c193f8fa55a3470cea6acfbf7107 (diff)
downloadgtk+-648cf099a8d5223a0ee2464b4285318f5efc15f2.tar.gz
gskslvariable: Remove gsk_sl_variable_store_spv()
A bunch of variables can't be written to. Instead of assuming code just knows that and doesn't call store() on those, force storing to use access chains. In that case, a NULL access chain should make it kinda obvious that storing won't work.
-rw-r--r--gsk/gsksldeclaration.c13
-rw-r--r--gsk/gskslstatement.c13
-rw-r--r--gsk/gskslvariable.c78
-rw-r--r--gsk/gskslvariableprivate.h3
4 files changed, 21 insertions, 86 deletions
diff --git a/gsk/gsksldeclaration.c b/gsk/gsksldeclaration.c
index 0e80659ccb..a8f785a186 100644
--- a/gsk/gsksldeclaration.c
+++ b/gsk/gsksldeclaration.c
@@ -112,11 +112,14 @@ gsk_sl_declaration_variable_write_initializer_spv (const GskSlDeclaration *decla
if (variable->initial && ! gsk_sl_variable_get_initial_value (variable->variable))
{
- gsk_sl_variable_store_spv (variable->variable,
- writer,
- gsk_sl_expression_write_spv (variable->initial,
- writer,
- gsk_sl_variable_get_type (variable->variable)));
+ GskSpvAccessChain *chain = gsk_sl_variable_get_access_chain (variable->variable, writer);
+
+ g_assert (chain); /* code further up should make sure this never happens */
+ gsk_spv_access_chain_store (chain,
+ gsk_sl_expression_write_spv (variable->initial,
+ writer,
+ gsk_sl_variable_get_type (variable->variable)));
+ gsk_spv_access_chain_free (chain);
}
}
diff --git a/gsk/gskslstatement.c b/gsk/gskslstatement.c
index cdb1b5db59..1b2547b994 100644
--- a/gsk/gskslstatement.c
+++ b/gsk/gskslstatement.c
@@ -247,11 +247,14 @@ gsk_sl_statement_declaration_write_spv (const GskSlStatement *statement,
if (declaration->initial && ! gsk_sl_variable_get_initial_value (declaration->variable))
{
- gsk_sl_variable_store_spv (declaration->variable,
- writer,
- gsk_sl_expression_write_spv (declaration->initial,
- writer,
- gsk_sl_variable_get_type (declaration->variable)));
+ GskSpvAccessChain *chain = gsk_sl_variable_get_access_chain (declaration->variable, writer);
+
+ g_assert (chain); /* code further up should make sure this never happens */
+ gsk_spv_access_chain_store (chain,
+ gsk_sl_expression_write_spv (declaration->initial,
+ writer,
+ gsk_sl_variable_get_type (declaration->variable)));
+ gsk_spv_access_chain_free (chain);
}
return FALSE;
diff --git a/gsk/gskslvariable.c b/gsk/gskslvariable.c
index 6349f98535..dbd13c4af6 100644
--- a/gsk/gskslvariable.c
+++ b/gsk/gskslvariable.c
@@ -51,9 +51,6 @@ struct _GskSlVariableClass
GskSpvWriter *writer);
guint32 (* load_spv) (GskSlVariable *variable,
GskSpvWriter *writer);
- void (* store_spv) (GskSlVariable *variable,
- GskSpvWriter *writer,
- guint32 value);
};
static gpointer
@@ -168,26 +165,13 @@ gsk_sl_variable_standard_load_spv (GskSlVariable *variable,
0);
}
-static void
-gsk_sl_variable_standard_store_spv (GskSlVariable *variable,
- GskSpvWriter *writer,
- guint32 value)
-{
- gsk_spv_writer_store (writer,
- gsk_spv_writer_get_id_for_variable (writer, variable),
- value,
- 0);
-
-}
-
static const GskSlVariableClass GSK_SL_VARIABLE_STANDARD = {
sizeof (GskSlVariableStandard),
gsk_sl_variable_standard_free,
gsk_sl_variable_standard_get_initial_value,
gsk_sl_variable_standard_is_direct_access_spv,
gsk_sl_variable_standard_write_spv,
- gsk_sl_variable_standard_load_spv,
- gsk_sl_variable_standard_store_spv,
+ gsk_sl_variable_standard_load_spv
};
/* BUILTIN */
@@ -242,26 +226,13 @@ gsk_sl_variable_builtin_load_spv (GskSlVariable *variable,
0);
}
-static void
-gsk_sl_variable_builtin_store_spv (GskSlVariable *variable,
- GskSpvWriter *writer,
- guint32 value)
-{
- gsk_spv_writer_store (writer,
- gsk_spv_writer_get_id_for_variable (writer, variable),
- value,
- 0);
-
-}
-
static const GskSlVariableClass GSK_SL_VARIABLE_BUILTIN = {
sizeof (GskSlVariableBuiltin),
gsk_sl_variable_free,
gsk_sl_variable_default_get_initial_value,
gsk_sl_variable_builtin_is_direct_access_spv,
gsk_sl_variable_builtin_write_spv,
- gsk_sl_variable_builtin_load_spv,
- gsk_sl_variable_builtin_store_spv,
+ gsk_sl_variable_builtin_load_spv
};
/* CONSTANT */
@@ -314,22 +285,13 @@ gsk_sl_variable_constant_load_spv (GskSlVariable *variable,
return gsk_spv_writer_get_id_for_value (writer, constant->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 (GskSlVariableConstant),
gsk_sl_variable_constant_free,
gsk_sl_variable_constant_get_initial_value,
gsk_sl_variable_constant_is_direct_access_spv,
gsk_sl_variable_constant_write_spv,
- gsk_sl_variable_constant_load_spv,
- gsk_sl_variable_constant_store_spv,
+ gsk_sl_variable_constant_load_spv
};
/* PARAMETER */
@@ -366,26 +328,13 @@ gsk_sl_variable_parameter_load_spv (GskSlVariable *variable,
0);
}
-static void
-gsk_sl_variable_parameter_store_spv (GskSlVariable *variable,
- GskSpvWriter *writer,
- guint32 value)
-{
- gsk_spv_writer_store (writer,
- gsk_spv_writer_get_id_for_variable (writer, variable),
- value,
- 0);
-
-}
-
static const GskSlVariableClass GSK_SL_VARIABLE_PARAMETER = {
sizeof (GskSlVariable),
gsk_sl_variable_free,
gsk_sl_variable_default_get_initial_value,
gsk_sl_variable_parameter_is_direct_access_spv,
gsk_sl_variable_parameter_write_spv,
- gsk_sl_variable_parameter_load_spv,
- gsk_sl_variable_parameter_store_spv,
+ gsk_sl_variable_parameter_load_spv
};
/* CONST_PARAMETER */
@@ -417,22 +366,13 @@ gsk_sl_variable_const_parameter_load_spv (GskSlVariable *variable,
return gsk_spv_writer_get_id_for_variable (writer, variable);
}
-static void
-gsk_sl_variable_const_parameter_store_spv (GskSlVariable *variable,
- GskSpvWriter *writer,
- guint32 value)
-{
- g_assert_not_reached ();
-}
-
static const GskSlVariableClass GSK_SL_VARIABLE_CONST_PARAMETER = {
sizeof (GskSlVariable),
gsk_sl_variable_free,
gsk_sl_variable_default_get_initial_value,
gsk_sl_variable_const_parameter_is_direct_access_spv,
gsk_sl_variable_const_parameter_write_spv,
- gsk_sl_variable_const_parameter_load_spv,
- gsk_sl_variable_const_parameter_store_spv,
+ gsk_sl_variable_const_parameter_load_spv
};
/* API */
@@ -605,14 +545,6 @@ gsk_sl_variable_load_spv (GskSlVariable *variable,
return variable->class->load_spv (variable, writer);
}
-void
-gsk_sl_variable_store_spv (GskSlVariable *variable,
- GskSpvWriter *writer,
- guint32 value)
-{
- variable->class->store_spv (variable, writer, value);
-}
-
/* ACCESS CHAIN */
struct _GskSpvAccessChain
diff --git a/gsk/gskslvariableprivate.h b/gsk/gskslvariableprivate.h
index cf38c2b4f2..da3592ccfa 100644
--- a/gsk/gskslvariableprivate.h
+++ b/gsk/gskslvariableprivate.h
@@ -54,9 +54,6 @@ guint32 gsk_sl_variable_write_spv (const GskSlVari
GskSpvWriter *writer);
guint32 gsk_sl_variable_load_spv (GskSlVariable *variable,
GskSpvWriter *writer);
-void gsk_sl_variable_store_spv (GskSlVariable *variable,
- GskSpvWriter *writer,
- guint32 value);
void gsk_spv_access_chain_free (GskSpvAccessChain *chain);
void gsk_spv_access_chain_add_index (GskSpvAccessChain *chain,