gskspvwriter: Change get_id_for_zero/one() functions

Accept a basic GskSlType instead of a scalar. That way, we can return
0/1 for vectors and matrices, which is kinda common.
This commit is contained in:
Benjamin Otte
2017-10-17 16:56:54 +02:00
parent 6a95433046
commit fe4d17fee1
4 changed files with 46 additions and 34 deletions

View File

@@ -671,7 +671,7 @@ gsk_sl_division_write_spv (GskSpvWriter *writer,
tmp_id = gsk_spv_writer_f_div (writer,
rtype,
gsk_spv_writer_get_id_for_one (writer, gsk_sl_type_get_scalar_type (type)),
gsk_spv_writer_get_id_for_one (writer, ltype),
right_id);
return gsk_spv_writer_matrix_times_scalar (writer,
@@ -691,7 +691,7 @@ gsk_sl_division_write_spv (GskSpvWriter *writer,
tmp_id = gsk_spv_writer_f_div (writer,
ltype,
gsk_spv_writer_get_id_for_one (writer, gsk_sl_type_get_scalar_type (type)),
gsk_spv_writer_get_id_for_one (writer, ltype),
left_id);
return gsk_spv_writer_matrix_times_scalar (writer,
type,

View File

@@ -908,7 +908,7 @@ gsk_sl_expression_constructor_write_spv (const GskSlExpression *expression,
gsize c;
scalar_id = gsk_spv_writer_convert (writer, value_id, value_type, scalar_type);
zero_id = gsk_spv_writer_get_id_for_zero (writer, gsk_sl_type_get_scalar_type (scalar_type));
zero_id = gsk_spv_writer_get_id_for_zero (writer, scalar_type);
for (c = 0; c < cols; c++)
{
@@ -953,8 +953,8 @@ gsk_sl_expression_constructor_write_spv (const GskSlExpression *expression,
}
value = gsk_sl_value_new (scalar_type);
zero_id = gsk_spv_writer_get_id_for_zero (writer, gsk_sl_type_get_scalar_type (scalar_type));
one_id = gsk_spv_writer_get_id_for_one (writer, gsk_sl_type_get_scalar_type (scalar_type));
zero_id = gsk_spv_writer_get_id_for_zero (writer, scalar_type);
one_id = gsk_spv_writer_get_id_for_one (writer, scalar_type);
gsk_sl_value_free (value);
for (c = 0; c < cols; c++)

View File

@@ -447,13 +447,15 @@ gsk_spv_writer_get_id_for_value (GskSpvWriter *writer,
}
guint32
gsk_spv_writer_get_id_for_zero (GskSpvWriter *writer,
GskSlScalarType scalar)
gsk_spv_writer_get_id_for_zero (GskSpvWriter *writer,
GskSlType *type)
{
GskSlValue *value;
guint32 result_id;
value = gsk_sl_value_new (gsk_sl_type_get_scalar (scalar));
g_return_val_if_fail (gsk_sl_type_is_basic (type), 0);
value = gsk_sl_value_new (type);
result_id = gsk_spv_writer_get_id_for_value (writer, value);
gsk_sl_value_free (value);
@@ -461,42 +463,52 @@ gsk_spv_writer_get_id_for_zero (GskSpvWriter *writer,
}
guint32
gsk_spv_writer_get_id_for_one (GskSpvWriter *writer,
GskSlScalarType scalar)
gsk_spv_writer_get_id_for_one (GskSpvWriter *writer,
GskSlType *type)
{
GskSlValue *value;
guint32 result_id;
gpointer data;
gsize i;
value = gsk_sl_value_new (gsk_sl_type_get_scalar (scalar));
switch (scalar)
g_return_val_if_fail (gsk_sl_type_is_basic (type), 0);
value = gsk_sl_value_new (type);
data = gsk_sl_value_get_data (value);
for (i = 0; i < gsk_sl_type_get_n_components (type); i++)
{
case GSK_SL_INT:
*(gint32 *) gsk_sl_value_get_data (value) = 1;
break;
switch (gsk_sl_type_get_scalar_type (type))
{
case GSK_SL_INT:
((gint32 *) data)[i] = 1;
break;
case GSK_SL_UINT:
*(guint32 *) gsk_sl_value_get_data (value) = 1;
break;
case GSK_SL_UINT:
((guint32 *) data)[i] = 1;
break;
case GSK_SL_FLOAT:
*(float *) gsk_sl_value_get_data (value) = 1;
break;
case GSK_SL_FLOAT:
((float *) data)[i] = 1;
break;
case GSK_SL_DOUBLE:
*(double *) gsk_sl_value_get_data (value) = 1;
break;
case GSK_SL_DOUBLE:
((double *) data)[i] = 1;
break;
case GSK_SL_BOOL:
*(guint32 *) gsk_sl_value_get_data (value) = TRUE;
break;
case GSK_SL_BOOL:
((guint32 *) data)[i] = 1;
break;
case GSK_SL_VOID:
break;
case GSK_SL_VOID:
break;
default:
g_assert_not_reached ();
break;
default:
g_assert_not_reached ();
break;
}
}
result_id = gsk_spv_writer_get_id_for_value (writer, value);
gsk_sl_value_free (value);

View File

@@ -67,9 +67,9 @@ guint32 gsk_spv_writer_get_id_for_pointer_type (GskSpvWriter
guint32 gsk_spv_writer_get_id_for_value (GskSpvWriter *writer,
GskSlValue *value);
guint32 gsk_spv_writer_get_id_for_zero (GskSpvWriter *writer,
GskSlScalarType scalar);
GskSlType *type);
guint32 gsk_spv_writer_get_id_for_one (GskSpvWriter *writer,
GskSlScalarType scalar);
GskSlType *type);
guint32 gsk_spv_writer_get_id_for_variable (GskSpvWriter *writer,
GskSlVariable *variable);
guint32 gsk_spv_writer_get_id_for_function (GskSpvWriter *writer,