gskpsv: Completely redo SPV writing
Autogenerate the headers for SPIR-V from the JSON file provided by the spec (and now included here). This provides a way more readable and on top of that type-safe way to emit bytecodes when generating code. As a result of this, the whole bytecode emission was rewritten, so there are probably lots of different bugs in it now. Note: If statement SPV generation was disabled. Code generation needs some more support for control flow before I can reenable if statements.
This commit is contained in:
@@ -509,9 +509,10 @@ gsk_sl_expression_multiplication_write_spv (const GskSlExpression *expression,
|
||||
GskSpvWriter *writer)
|
||||
{
|
||||
const GskSlExpressionMultiplication *multiplication = (const GskSlExpressionMultiplication *) expression;
|
||||
GskSlType *ltype, *rtype;
|
||||
guint32 left_id, right_id, result_id, result_type_id;
|
||||
GskSlType *ltype, *rtype, *type;
|
||||
guint32 left_id, right_id;
|
||||
|
||||
type = multiplication->type;
|
||||
ltype = gsk_sl_expression_get_return_type (multiplication->left);
|
||||
rtype = gsk_sl_expression_get_return_type (multiplication->right);
|
||||
|
||||
@@ -519,72 +520,37 @@ gsk_sl_expression_multiplication_write_spv (const GskSlExpression *expression,
|
||||
if (gsk_sl_type_get_scalar_type (ltype) != gsk_sl_type_get_scalar_type (multiplication->type))
|
||||
{
|
||||
GskSlType *new_type = gsk_sl_type_get_matching (ltype, gsk_sl_type_get_scalar_type (multiplication->type));
|
||||
left_id = gsk_spv_writer_add_conversion (writer, left_id, ltype, new_type);
|
||||
left_id = gsk_spv_writer_convert (writer, left_id, ltype, new_type);
|
||||
ltype = new_type;
|
||||
}
|
||||
right_id = gsk_sl_expression_write_spv (multiplication->right, writer);
|
||||
if (gsk_sl_type_get_scalar_type (rtype) != gsk_sl_type_get_scalar_type (multiplication->type))
|
||||
{
|
||||
GskSlType *new_type = gsk_sl_type_get_matching (rtype, gsk_sl_type_get_scalar_type (multiplication->type));
|
||||
right_id = gsk_spv_writer_add_conversion (writer, right_id, rtype, new_type);
|
||||
right_id = gsk_spv_writer_convert (writer, right_id, rtype, new_type);
|
||||
rtype = new_type;
|
||||
}
|
||||
|
||||
result_type_id = gsk_spv_writer_get_id_for_type (writer, multiplication->type);
|
||||
result_id = gsk_spv_writer_next_id (writer);
|
||||
|
||||
if (gsk_sl_type_is_matrix (ltype))
|
||||
{
|
||||
if (gsk_sl_type_is_matrix (rtype))
|
||||
{
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_CODE,
|
||||
5, GSK_SPV_OP_MATRIX_TIMES_MATRIX,
|
||||
(guint32[4]) { result_type_id,
|
||||
result_id,
|
||||
left_id,
|
||||
right_id });
|
||||
|
||||
return result_id;
|
||||
return gsk_spv_writer_matrix_times_matrix (writer, type, left_id, right_id);
|
||||
}
|
||||
else if (gsk_sl_type_is_vector (rtype))
|
||||
{
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_CODE,
|
||||
5, GSK_SPV_OP_VECTOR_TIMES_MATRIX,
|
||||
(guint32[4]) { result_type_id,
|
||||
result_id,
|
||||
right_id,
|
||||
left_id });
|
||||
|
||||
return result_id;
|
||||
return gsk_spv_writer_vector_times_matrix (writer, type, right_id, left_id);
|
||||
}
|
||||
else if (gsk_sl_type_is_scalar (rtype))
|
||||
{
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_CODE,
|
||||
5, GSK_SPV_OP_MATRIX_TIMES_SCALAR,
|
||||
(guint32[4]) { result_type_id,
|
||||
result_id,
|
||||
left_id,
|
||||
right_id });
|
||||
|
||||
return result_id;
|
||||
return gsk_spv_writer_matrix_times_scalar (writer, type, left_id, right_id);
|
||||
}
|
||||
}
|
||||
else if (gsk_sl_type_is_vector (ltype))
|
||||
{
|
||||
if (gsk_sl_type_is_matrix (rtype))
|
||||
{
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_CODE,
|
||||
5, GSK_SPV_OP_MATRIX_TIMES_VECTOR,
|
||||
(guint32[4]) { result_type_id,
|
||||
result_id,
|
||||
right_id,
|
||||
left_id });
|
||||
|
||||
return result_id;
|
||||
return gsk_spv_writer_matrix_times_vector (writer, type, right_id, left_id);
|
||||
}
|
||||
else if (gsk_sl_type_is_vector (rtype))
|
||||
{
|
||||
@@ -592,71 +558,31 @@ gsk_sl_expression_multiplication_write_spv (const GskSlExpression *expression,
|
||||
{
|
||||
case GSK_SL_FLOAT:
|
||||
case GSK_SL_DOUBLE:
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_CODE,
|
||||
5, GSK_SPV_OP_F_MUL,
|
||||
(guint32[4]) { result_type_id,
|
||||
result_id,
|
||||
left_id,
|
||||
right_id });
|
||||
break;
|
||||
return gsk_spv_writer_f_mul (writer, type, left_id, right_id);
|
||||
case GSK_SL_INT:
|
||||
case GSK_SL_UINT:
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_CODE,
|
||||
5, GSK_SPV_OP_I_MUL,
|
||||
(guint32[4]) { result_type_id,
|
||||
result_id,
|
||||
left_id,
|
||||
right_id });
|
||||
break;
|
||||
return gsk_spv_writer_i_mul (writer, type, left_id, right_id);
|
||||
case GSK_SL_VOID:
|
||||
case GSK_SL_BOOL:
|
||||
default:
|
||||
g_assert_not_reached ();
|
||||
break;
|
||||
}
|
||||
|
||||
return result_id;
|
||||
}
|
||||
else if (gsk_sl_type_is_scalar (rtype))
|
||||
{
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_CODE,
|
||||
5, GSK_SPV_OP_VECTOR_TIMES_SCALAR,
|
||||
(guint32[4]) { result_type_id,
|
||||
result_id,
|
||||
left_id,
|
||||
right_id });
|
||||
|
||||
return result_id;
|
||||
return gsk_spv_writer_vector_times_scalar (writer, type, left_id, right_id);
|
||||
}
|
||||
}
|
||||
else if (gsk_sl_type_is_scalar (ltype))
|
||||
{
|
||||
if (gsk_sl_type_is_matrix (rtype))
|
||||
{
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_CODE,
|
||||
5, GSK_SPV_OP_MATRIX_TIMES_SCALAR,
|
||||
(guint32[4]) { result_type_id,
|
||||
result_id,
|
||||
right_id,
|
||||
left_id });
|
||||
|
||||
return result_id;
|
||||
return gsk_spv_writer_matrix_times_scalar (writer, type, right_id, left_id);
|
||||
}
|
||||
else if (gsk_sl_type_is_vector (rtype))
|
||||
{
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_CODE,
|
||||
5, GSK_SPV_OP_VECTOR_TIMES_SCALAR,
|
||||
(guint32[4]) { result_type_id,
|
||||
result_id,
|
||||
right_id,
|
||||
left_id });
|
||||
|
||||
return result_id;
|
||||
return gsk_spv_writer_vector_times_scalar (writer, type, right_id, left_id);
|
||||
}
|
||||
else if (gsk_sl_type_is_scalar (rtype))
|
||||
{
|
||||
@@ -664,32 +590,18 @@ gsk_sl_expression_multiplication_write_spv (const GskSlExpression *expression,
|
||||
{
|
||||
case GSK_SL_FLOAT:
|
||||
case GSK_SL_DOUBLE:
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_CODE,
|
||||
5, GSK_SPV_OP_F_MUL,
|
||||
(guint32[4]) { result_type_id,
|
||||
result_id,
|
||||
left_id,
|
||||
right_id });
|
||||
break;
|
||||
return gsk_spv_writer_f_mul (writer, type, left_id, right_id);
|
||||
|
||||
case GSK_SL_INT:
|
||||
case GSK_SL_UINT:
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_CODE,
|
||||
5, GSK_SPV_OP_I_MUL,
|
||||
(guint32[4]) { result_type_id,
|
||||
result_id,
|
||||
left_id,
|
||||
right_id });
|
||||
break;
|
||||
return gsk_spv_writer_i_mul (writer, type, left_id, right_id);
|
||||
|
||||
case GSK_SL_VOID:
|
||||
case GSK_SL_BOOL:
|
||||
default:
|
||||
g_assert_not_reached ();
|
||||
break;
|
||||
}
|
||||
|
||||
return result_id;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -954,7 +866,7 @@ gsk_sl_expression_division_write_spv (const GskSlExpression *expression,
|
||||
{
|
||||
const GskSlExpressionArithmetic *arithmetic = (const GskSlExpressionArithmetic *) expression;
|
||||
GskSlType *ltype, *rtype;
|
||||
guint32 left_id, right_id, result_id, result_type_id;
|
||||
guint32 left_id, right_id;
|
||||
|
||||
ltype = gsk_sl_expression_get_return_type (arithmetic->left);
|
||||
rtype = gsk_sl_expression_get_return_type (arithmetic->right);
|
||||
@@ -963,90 +875,60 @@ gsk_sl_expression_division_write_spv (const GskSlExpression *expression,
|
||||
if (gsk_sl_type_get_scalar_type (ltype) != gsk_sl_type_get_scalar_type (arithmetic->type))
|
||||
{
|
||||
GskSlType *new_type = gsk_sl_type_get_matching (ltype, gsk_sl_type_get_scalar_type (arithmetic->type));
|
||||
left_id = gsk_spv_writer_add_conversion (writer, left_id, ltype, new_type);
|
||||
left_id = gsk_spv_writer_convert (writer, left_id, ltype, new_type);
|
||||
ltype = new_type;
|
||||
}
|
||||
right_id = gsk_sl_expression_write_spv (arithmetic->right, writer);
|
||||
if (gsk_sl_type_get_scalar_type (rtype) != gsk_sl_type_get_scalar_type (arithmetic->type))
|
||||
{
|
||||
GskSlType *new_type = gsk_sl_type_get_matching (rtype, gsk_sl_type_get_scalar_type (arithmetic->type));
|
||||
right_id = gsk_spv_writer_add_conversion (writer, right_id, rtype, new_type);
|
||||
right_id = gsk_spv_writer_convert (writer, right_id, rtype, new_type);
|
||||
rtype = new_type;
|
||||
}
|
||||
|
||||
result_type_id = gsk_spv_writer_get_id_for_type (writer, arithmetic->type);
|
||||
|
||||
if (gsk_sl_type_is_matrix (ltype))
|
||||
{
|
||||
if (gsk_sl_type_is_matrix (rtype))
|
||||
{
|
||||
GskSlType *col_type = gsk_sl_type_get_index_type (ltype);
|
||||
gsize cols = gsk_sl_type_get_length (ltype);
|
||||
gsize c;
|
||||
guint32 col_type_id, left_part_id, right_part_id, ids[cols + 2];
|
||||
guint32 left_part_id, right_part_id, ids[cols];
|
||||
|
||||
col_type_id = gsk_spv_writer_get_id_for_type (writer, gsk_sl_type_get_index_type (ltype));
|
||||
for (c = 0; c < cols; c++)
|
||||
{
|
||||
left_part_id = gsk_spv_writer_next_id (writer);
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_CODE,
|
||||
5, GSK_SPV_OP_COMPOSITE_EXTRACT,
|
||||
(guint32[4]) { col_type_id,
|
||||
left_part_id,
|
||||
left_id,
|
||||
c });
|
||||
right_part_id = gsk_spv_writer_next_id (writer);
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_CODE,
|
||||
5, GSK_SPV_OP_COMPOSITE_EXTRACT,
|
||||
(guint32[4]) { col_type_id,
|
||||
right_part_id,
|
||||
right_id,
|
||||
c });
|
||||
ids[2 + c] = gsk_spv_writer_next_id (writer);
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_CODE,
|
||||
5, GSK_SPV_OP_F_DIV,
|
||||
(guint32[4]) { col_type_id,
|
||||
ids[2 + c],
|
||||
left_part_id,
|
||||
right_part_id });
|
||||
left_part_id = gsk_spv_writer_composite_extract (writer,
|
||||
col_type,
|
||||
left_id,
|
||||
(guint32[1]) { 1 }, c);
|
||||
right_part_id = gsk_spv_writer_composite_extract (writer,
|
||||
col_type,
|
||||
right_id,
|
||||
(guint32[1]) { 1 }, c);
|
||||
ids[c] = gsk_spv_writer_f_div (writer,
|
||||
col_type,
|
||||
left_part_id,
|
||||
right_part_id);
|
||||
}
|
||||
|
||||
ids[0] = result_type_id;
|
||||
ids[1] = gsk_spv_writer_next_id (writer);
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_CODE,
|
||||
3 + cols, GSK_SPV_OP_COMPOSITE_CONSTRUCT,
|
||||
ids);
|
||||
|
||||
return ids[1];
|
||||
return gsk_spv_writer_composite_construct (writer,
|
||||
arithmetic->type,
|
||||
ids,
|
||||
cols);
|
||||
}
|
||||
else if (gsk_sl_type_is_scalar (rtype))
|
||||
{
|
||||
guint32 tmp_id, one_id, rtype_id;
|
||||
guint32 tmp_id;
|
||||
|
||||
rtype_id = gsk_spv_writer_get_id_for_type (writer, rtype);
|
||||
one_id = gsk_spv_writer_get_id_for_one (writer, gsk_sl_type_get_scalar_type (arithmetic->type));
|
||||
tmp_id = gsk_spv_writer_next_id (writer);
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_CODE,
|
||||
5, GSK_SPV_OP_F_DIV,
|
||||
(guint32[4]) { rtype_id,
|
||||
tmp_id,
|
||||
one_id,
|
||||
right_id });
|
||||
tmp_id = gsk_spv_writer_f_div (writer,
|
||||
rtype,
|
||||
gsk_spv_writer_get_id_for_one (writer, gsk_sl_type_get_scalar_type (arithmetic->type)),
|
||||
right_id);
|
||||
|
||||
result_id = gsk_spv_writer_next_id (writer);
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_CODE,
|
||||
5, GSK_SPV_OP_MATRIX_TIMES_SCALAR,
|
||||
(guint32[4]) { result_type_id,
|
||||
result_id,
|
||||
left_id,
|
||||
tmp_id });
|
||||
|
||||
return result_id;
|
||||
return gsk_spv_writer_matrix_times_scalar (writer,
|
||||
arithmetic->type,
|
||||
left_id,
|
||||
tmp_id);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1056,98 +938,58 @@ gsk_sl_expression_division_write_spv (const GskSlExpression *expression,
|
||||
}
|
||||
else if (gsk_sl_type_is_matrix (rtype))
|
||||
{
|
||||
guint32 tmp_id, one_id, ltype_id;
|
||||
guint32 tmp_id;
|
||||
|
||||
ltype_id = gsk_spv_writer_get_id_for_type (writer, ltype);
|
||||
one_id = gsk_spv_writer_get_id_for_one (writer, gsk_sl_type_get_scalar_type (arithmetic->type));
|
||||
tmp_id = gsk_spv_writer_next_id (writer);
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_CODE,
|
||||
5, GSK_SPV_OP_F_DIV,
|
||||
(guint32[4]) { ltype_id,
|
||||
tmp_id,
|
||||
one_id,
|
||||
left_id });
|
||||
|
||||
result_id = gsk_spv_writer_next_id (writer);
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_CODE,
|
||||
5, GSK_SPV_OP_MATRIX_TIMES_SCALAR,
|
||||
(guint32[4]) { result_type_id,
|
||||
result_id,
|
||||
right_id,
|
||||
tmp_id });
|
||||
|
||||
return result_id;
|
||||
tmp_id = gsk_spv_writer_f_div (writer,
|
||||
ltype,
|
||||
gsk_spv_writer_get_id_for_one (writer, gsk_sl_type_get_scalar_type (arithmetic->type)),
|
||||
left_id);
|
||||
return gsk_spv_writer_matrix_times_scalar (writer,
|
||||
arithmetic->type,
|
||||
right_id,
|
||||
tmp_id);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* ltype and rtype are not matices */
|
||||
/* ltype and rtype are not matrices */
|
||||
|
||||
if (gsk_sl_type_is_scalar (ltype) && gsk_sl_type_is_vector (rtype))
|
||||
{
|
||||
guint32 tmp_id = gsk_spv_writer_next_id (writer);
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_CODE,
|
||||
3 + gsk_sl_type_get_length (rtype), GSK_SPV_OP_COMPOSITE_CONSTRUCT,
|
||||
(guint32[6]) { result_type_id,
|
||||
tmp_id,
|
||||
left_id, left_id, left_id, left_id });
|
||||
guint32 tmp_id = gsk_spv_writer_composite_construct (writer,
|
||||
arithmetic->type,
|
||||
(guint32[4]) { left_id, left_id, left_id, left_id },
|
||||
gsk_sl_type_get_length (rtype));
|
||||
left_id = tmp_id;
|
||||
}
|
||||
else if (gsk_sl_type_is_scalar (rtype) && gsk_sl_type_is_vector (ltype))
|
||||
{
|
||||
guint32 tmp_id = gsk_spv_writer_next_id (writer);
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_CODE,
|
||||
3 + gsk_sl_type_get_length (ltype), GSK_SPV_OP_COMPOSITE_CONSTRUCT,
|
||||
(guint32[6]) { result_type_id,
|
||||
tmp_id,
|
||||
right_id, right_id, right_id, right_id });
|
||||
guint32 tmp_id = gsk_spv_writer_composite_construct (writer,
|
||||
arithmetic->type,
|
||||
(guint32[4]) { right_id, right_id, right_id, right_id },
|
||||
gsk_sl_type_get_length (ltype));
|
||||
right_id = tmp_id;
|
||||
}
|
||||
|
||||
/* ltype and rtype have the same number of components now */
|
||||
|
||||
result_id = gsk_spv_writer_next_id (writer);
|
||||
switch (gsk_sl_type_get_scalar_type (arithmetic->type))
|
||||
{
|
||||
case GSK_SL_FLOAT:
|
||||
case GSK_SL_DOUBLE:
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_CODE,
|
||||
5, GSK_SPV_OP_F_DIV,
|
||||
(guint32[4]) { result_type_id,
|
||||
result_id,
|
||||
left_id,
|
||||
right_id });
|
||||
break;
|
||||
return gsk_spv_writer_f_div (writer, arithmetic->type, left_id, right_id);
|
||||
|
||||
case GSK_SL_INT:
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_CODE,
|
||||
5, GSK_SPV_OP_S_DIV,
|
||||
(guint32[4]) { result_type_id,
|
||||
result_id,
|
||||
left_id,
|
||||
right_id });
|
||||
break;
|
||||
return gsk_spv_writer_s_div (writer, arithmetic->type, left_id, right_id);
|
||||
|
||||
case GSK_SL_UINT:
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_CODE,
|
||||
5, GSK_SPV_OP_U_DIV,
|
||||
(guint32[4]) { result_type_id,
|
||||
result_id,
|
||||
left_id,
|
||||
right_id });
|
||||
break;
|
||||
return gsk_spv_writer_u_div (writer, arithmetic->type, left_id, right_id);
|
||||
|
||||
case GSK_SL_VOID:
|
||||
case GSK_SL_BOOL:
|
||||
default:
|
||||
g_assert_not_reached ();
|
||||
break;
|
||||
return 0;
|
||||
}
|
||||
|
||||
return result_id;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1491,7 +1333,7 @@ gsk_sl_expression_reference_get_return_type (const GskSlExpression *expression)
|
||||
{
|
||||
const GskSlExpressionReference *reference = (const GskSlExpressionReference *) expression;
|
||||
|
||||
return gsk_sl_pointer_type_get_type (gsk_sl_variable_get_type (reference->variable));
|
||||
return gsk_sl_variable_get_type (reference->variable);
|
||||
}
|
||||
|
||||
static GskSlValue *
|
||||
@@ -1515,19 +1357,11 @@ gsk_sl_expression_reference_write_spv (const GskSlExpression *expression,
|
||||
GskSpvWriter *writer)
|
||||
{
|
||||
GskSlExpressionReference *reference = (GskSlExpressionReference *) expression;
|
||||
guint32 declaration_id, result_id, type_id;
|
||||
|
||||
type_id = gsk_spv_writer_get_id_for_type (writer, gsk_sl_pointer_type_get_type (gsk_sl_variable_get_type (reference->variable)));
|
||||
declaration_id = gsk_spv_writer_get_id_for_variable (writer, reference->variable);
|
||||
result_id = gsk_spv_writer_next_id (writer);
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_CODE,
|
||||
4, GSK_SPV_OP_LOAD,
|
||||
(guint32[3]) { type_id,
|
||||
result_id,
|
||||
declaration_id });
|
||||
|
||||
return result_id;
|
||||
return gsk_spv_writer_load (writer,
|
||||
gsk_sl_variable_get_type (reference->variable),
|
||||
gsk_spv_writer_get_id_for_variable (writer, reference->variable),
|
||||
0);
|
||||
}
|
||||
|
||||
static const GskSlExpressionClass GSK_SL_EXPRESSION_REFERENCE = {
|
||||
@@ -1717,25 +1551,19 @@ gsk_sl_expression_constructor_write_spv (const GskSlExpression *expression,
|
||||
|
||||
if (gsk_sl_type_is_scalar (type))
|
||||
{
|
||||
return gsk_spv_writer_add_conversion (writer, value_id, value_type, type);
|
||||
return gsk_spv_writer_convert (writer, value_id, value_type, type);
|
||||
}
|
||||
else if (gsk_sl_type_is_vector (type))
|
||||
{
|
||||
GskSlType *scalar_type = gsk_sl_type_get_scalar (gsk_sl_type_get_scalar_type (type));
|
||||
guint32 scalar_id, result_type_id, result_id;
|
||||
guint32 scalar_id;
|
||||
|
||||
scalar_id = gsk_spv_writer_add_conversion (writer, value_id, value_type, scalar_type);
|
||||
result_type_id = gsk_spv_writer_get_id_for_type (writer, type);
|
||||
result_id = gsk_spv_writer_next_id (writer);
|
||||
scalar_id = gsk_spv_writer_convert (writer, value_id, value_type, scalar_type);
|
||||
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_CODE,
|
||||
3 + gsk_sl_type_get_n_components (type), GSK_SPV_OP_COMPOSITE_CONSTRUCT,
|
||||
(guint32[6]) { result_type_id,
|
||||
result_id,
|
||||
scalar_id, scalar_id, scalar_id, scalar_id });
|
||||
|
||||
return result_id;
|
||||
return gsk_spv_writer_composite_construct (writer,
|
||||
type,
|
||||
(guint[4]) { scalar_id, scalar_id, scalar_id, scalar_id },
|
||||
gsk_sl_type_get_n_components (type));
|
||||
}
|
||||
else if (gsk_sl_type_is_matrix (type))
|
||||
{
|
||||
@@ -1743,34 +1571,26 @@ gsk_sl_expression_constructor_write_spv (const GskSlExpression *expression,
|
||||
GskSlType *col_type = gsk_sl_type_get_index_type (type);
|
||||
gsize cols = gsk_sl_type_get_length (type);
|
||||
gsize rows = gsk_sl_type_get_length (col_type);
|
||||
guint32 ids[2 + gsk_sl_type_get_length (type)];
|
||||
guint32 scalar_id, zero_id, col_type_id;
|
||||
guint32 ids[gsk_sl_type_get_length (type)];
|
||||
guint32 scalar_id, zero_id;
|
||||
gsize c;
|
||||
|
||||
scalar_id = gsk_spv_writer_add_conversion (writer, value_id, value_type, scalar_type);
|
||||
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));
|
||||
col_type_id = gsk_spv_writer_get_id_for_type (writer, col_type);
|
||||
|
||||
for (c = 0; c < cols; c++)
|
||||
{
|
||||
ids[2 + c] = gsk_spv_writer_next_id (writer);
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_CODE,
|
||||
3 + rows, GSK_SPV_OP_COMPOSITE_CONSTRUCT,
|
||||
(guint32[6]) { col_type_id,
|
||||
ids[2 + c],
|
||||
c == 0 ? scalar_id : zero_id,
|
||||
c == 1 ? scalar_id : zero_id,
|
||||
c == 2 ? scalar_id : zero_id,
|
||||
c == 3 ? scalar_id : zero_id });
|
||||
ids[c] = gsk_spv_writer_composite_construct (writer,
|
||||
type,
|
||||
(guint32[4]) {
|
||||
c == 0 ? scalar_id : zero_id,
|
||||
c == 1 ? scalar_id : zero_id,
|
||||
c == 2 ? scalar_id : zero_id,
|
||||
c == 3 ? scalar_id : zero_id
|
||||
},
|
||||
rows);
|
||||
}
|
||||
ids[0] = gsk_spv_writer_get_id_for_type (writer, type);
|
||||
ids[1] = gsk_spv_writer_next_id (writer);
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_CODE,
|
||||
3 + cols, GSK_SPV_OP_COMPOSITE_CONSTRUCT,
|
||||
ids);
|
||||
return ids[1];
|
||||
return gsk_spv_writer_composite_construct (writer, type, ids, cols);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1788,14 +1608,15 @@ gsk_sl_expression_constructor_write_spv (const GskSlExpression *expression,
|
||||
gsize value_cols = gsk_sl_type_get_length (type);
|
||||
gsize value_rows = gsk_sl_type_get_length (value_col_type);
|
||||
gsize c, r;
|
||||
guint32 col_ids[6], ids[6], one_id, zero_id, scalar_type_id;
|
||||
guint32 col_ids[4], ids[4], one_id, zero_id;
|
||||
GskSlValue *value;
|
||||
|
||||
value_id = gsk_sl_expression_write_spv (constructor->arguments[0], writer);
|
||||
|
||||
if (gsk_sl_type_get_scalar_type (value_type) != gsk_sl_type_get_scalar_type (type))
|
||||
{
|
||||
GskSlType *new_value_type = gsk_sl_type_get_matching (value_type, gsk_sl_type_get_scalar_type (type));
|
||||
value_id = gsk_spv_writer_add_conversion (writer, value_id, value_type, new_value_type);
|
||||
value_id = gsk_spv_writer_convert (writer, value_id, value_type, new_value_type);
|
||||
value_type = new_value_type;
|
||||
}
|
||||
|
||||
@@ -1804,79 +1625,64 @@ gsk_sl_expression_constructor_write_spv (const GskSlExpression *expression,
|
||||
one_id = gsk_spv_writer_get_id_for_one (writer, gsk_sl_type_get_scalar_type (scalar_type));
|
||||
gsk_sl_value_free (value);
|
||||
|
||||
scalar_type_id = gsk_spv_writer_get_id_for_type (writer, scalar_type);
|
||||
col_ids[0] = gsk_spv_writer_get_id_for_type (writer, col_type);
|
||||
for (c = 0; c < cols; c++)
|
||||
{
|
||||
for (r = 0; r < rows; r++)
|
||||
{
|
||||
if (c < value_cols && r < value_rows)
|
||||
{
|
||||
col_ids[2 + r] = gsk_spv_writer_next_id (writer);
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_CODE,
|
||||
6, GSK_SPV_OP_COMPOSITE_EXTRACT,
|
||||
(guint32[5]) { scalar_type_id,
|
||||
col_ids[2 + r],
|
||||
value_id,
|
||||
c,
|
||||
r });
|
||||
col_ids[r] = gsk_spv_writer_composite_extract (writer,
|
||||
scalar_type,
|
||||
value_id,
|
||||
(guint32[2]) { c, r },
|
||||
2);
|
||||
}
|
||||
else if (c == r)
|
||||
col_ids[2 + r] = one_id;
|
||||
col_ids[r] = one_id;
|
||||
else
|
||||
col_ids[2 + r] = zero_id;
|
||||
col_ids[r] = zero_id;
|
||||
}
|
||||
col_ids[1] = gsk_spv_writer_next_id (writer);
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_CODE,
|
||||
3 + rows, GSK_SPV_OP_COMPOSITE_CONSTRUCT,
|
||||
col_ids);
|
||||
ids[c + 2] = col_ids[1];
|
||||
ids[c] = gsk_spv_writer_composite_construct (writer, col_type, col_ids, rows);
|
||||
}
|
||||
ids[0] = gsk_spv_writer_get_id_for_type (writer, type);
|
||||
ids[1] = gsk_spv_writer_next_id (writer);
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_CODE,
|
||||
3 + cols, GSK_SPV_OP_COMPOSITE_CONSTRUCT,
|
||||
ids);
|
||||
return ids[1];
|
||||
return gsk_spv_writer_composite_construct (writer, type, ids, cols);
|
||||
}
|
||||
else
|
||||
{
|
||||
gsize n_components = gsk_sl_type_get_n_components (type);
|
||||
GskSlScalarType scalar = gsk_sl_type_get_scalar_type (type);
|
||||
guint32 component_ids[16], component_type_id;
|
||||
GskSlType *component_type;
|
||||
guint32 component_ids[16];
|
||||
gsize component = 0, arg, i;
|
||||
|
||||
component_type_id = gsk_spv_writer_get_id_for_type (writer, gsk_sl_type_get_scalar (scalar));
|
||||
component_type = gsk_sl_type_get_scalar (scalar);
|
||||
for (arg = 0; arg < constructor->n_arguments; arg++)
|
||||
{
|
||||
value_type = gsk_sl_expression_get_return_type (constructor->arguments[arg]);
|
||||
value_id = gsk_sl_expression_write_spv (constructor->arguments[arg], writer);
|
||||
if (gsk_sl_type_get_scalar_type (value_type) != scalar)
|
||||
{
|
||||
GskSlType *new_type = gsk_sl_type_get_matching (value_type, scalar);
|
||||
value_id = gsk_spv_writer_convert (writer,
|
||||
value_id,
|
||||
value_type,
|
||||
new_type);
|
||||
value_type = new_type;
|
||||
}
|
||||
|
||||
if (gsk_sl_type_is_scalar (value_type))
|
||||
{
|
||||
component_ids[component] = gsk_spv_writer_add_conversion (writer,
|
||||
value_id,
|
||||
value_type,
|
||||
gsk_sl_type_get_scalar (scalar));
|
||||
component_ids[component] = value_id;
|
||||
component++;
|
||||
}
|
||||
else if (gsk_sl_type_is_vector (value_type))
|
||||
{
|
||||
GskSlType *converted_type = gsk_sl_type_get_vector (scalar, gsk_sl_type_get_length (value_type));
|
||||
value_id = gsk_spv_writer_add_conversion (writer, value_id, value_type, converted_type);
|
||||
|
||||
for (i = 0; component < n_components && i < gsk_sl_type_get_length (value_type); i++)
|
||||
{
|
||||
component_ids[component] = gsk_spv_writer_next_id (writer);
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_CODE,
|
||||
5, GSK_SPV_OP_COMPOSITE_EXTRACT,
|
||||
(guint32[4]) { component_type_id,
|
||||
component_ids[component],
|
||||
value_id,
|
||||
i });
|
||||
component_ids[component] = gsk_spv_writer_composite_extract (writer,
|
||||
component_type,
|
||||
value_id,
|
||||
(guint32[1]) { i },
|
||||
1);
|
||||
component++;
|
||||
}
|
||||
}
|
||||
@@ -1890,19 +1696,11 @@ gsk_sl_expression_constructor_write_spv (const GskSlExpression *expression,
|
||||
{
|
||||
for (r = 0; r < rows && component < n_components; r++)
|
||||
{
|
||||
component_ids[component] = gsk_spv_writer_next_id (writer);
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_CODE,
|
||||
6, GSK_SPV_OP_COMPOSITE_EXTRACT,
|
||||
(guint32[5]) { component_type_id,
|
||||
component_ids[component],
|
||||
value_id,
|
||||
c,
|
||||
r });
|
||||
component_ids[component] = gsk_spv_writer_add_conversion (writer,
|
||||
component_ids[component],
|
||||
gsk_sl_type_get_scalar (gsk_sl_type_get_scalar_type (value_type)),
|
||||
gsk_sl_type_get_scalar (scalar));
|
||||
component_ids[component] = gsk_spv_writer_composite_extract (writer,
|
||||
component_type,
|
||||
value_id,
|
||||
(guint32[2]) { c, r },
|
||||
2);
|
||||
component++;
|
||||
}
|
||||
}
|
||||
@@ -1919,47 +1717,20 @@ gsk_sl_expression_constructor_write_spv (const GskSlExpression *expression,
|
||||
}
|
||||
else if (gsk_sl_type_is_vector (type))
|
||||
{
|
||||
guint32 ids[2 + gsk_sl_type_get_length (type)];
|
||||
guint i;
|
||||
|
||||
ids[0] = gsk_spv_writer_get_id_for_type (writer, type);
|
||||
ids[1] = gsk_spv_writer_next_id (writer);
|
||||
for (i = 0; i < gsk_sl_type_get_length (type); i++)
|
||||
ids[2 + i] = component_ids[i];
|
||||
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_CODE,
|
||||
2 + gsk_sl_type_get_length (type), GSK_SPV_OP_COMPOSITE_CONSTRUCT,
|
||||
ids);
|
||||
return ids[1];
|
||||
return gsk_spv_writer_composite_construct (writer, type, component_ids, gsk_sl_type_get_length (type));
|
||||
}
|
||||
else if (gsk_sl_type_is_matrix (type))
|
||||
{
|
||||
GskSlType *col_type = gsk_sl_type_get_index_type (type);
|
||||
gsize c, cols = gsk_sl_type_get_length (type);
|
||||
gsize r, rows = gsk_sl_type_get_length (col_type);
|
||||
guint32 ids[cols + 2], col_ids[rows + 2];
|
||||
gsize rows = gsk_sl_type_get_length (col_type);
|
||||
guint32 ids[cols];
|
||||
|
||||
col_ids[1] = gsk_spv_writer_get_id_for_type (writer, col_type);
|
||||
for (c = 0; c < cols; c++)
|
||||
{
|
||||
for (r = 0; r < rows; r++)
|
||||
{
|
||||
}
|
||||
col_ids[1] = gsk_spv_writer_next_id (writer);
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_CODE,
|
||||
3 + rows, GSK_SPV_OP_COMPOSITE_CONSTRUCT,
|
||||
col_ids);
|
||||
ids[c + 2] = col_ids[1];
|
||||
ids[c] = gsk_spv_writer_composite_construct (writer, col_type, &component_ids[c * rows], rows);
|
||||
}
|
||||
ids[0] = gsk_spv_writer_get_id_for_type (writer, type);
|
||||
ids[1] = gsk_spv_writer_next_id (writer);
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_CODE,
|
||||
3 + cols, GSK_SPV_OP_COMPOSITE_CONSTRUCT,
|
||||
ids);
|
||||
return ids[1];
|
||||
return gsk_spv_writer_composite_construct (writer, type, ids, cols);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -2145,22 +1916,14 @@ gsk_sl_expression_member_write_spv (const GskSlExpression *expression,
|
||||
{
|
||||
const GskSlExpressionMember *member = (const GskSlExpressionMember *) expression;
|
||||
GskSlType *type;
|
||||
guint32 expr_id, type_id, result_id;
|
||||
|
||||
type = gsk_sl_expression_get_return_type (member->expr);
|
||||
type_id = gsk_spv_writer_get_id_for_type (writer, gsk_sl_type_get_member_type (type, member->id));
|
||||
expr_id = gsk_sl_expression_write_spv (member->expr, writer);
|
||||
result_id = gsk_spv_writer_next_id (writer);
|
||||
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_CODE,
|
||||
5, GSK_SPV_OP_ACCESS_CHAIN,
|
||||
(guint32[4]) { type_id,
|
||||
result_id,
|
||||
expr_id,
|
||||
member->id });
|
||||
|
||||
return result_id;
|
||||
return gsk_spv_writer_composite_extract (writer,
|
||||
gsk_sl_type_get_member_type (type, member->id),
|
||||
gsk_sl_expression_write_spv (member->expr, writer),
|
||||
(guint32[1]) { member->id },
|
||||
1);
|
||||
}
|
||||
|
||||
static const GskSlExpressionClass GSK_SL_EXPRESSION_MEMBER = {
|
||||
@@ -2271,7 +2034,7 @@ gsk_sl_expression_swizzle_write_spv (const GskSlExpression *expression,
|
||||
{
|
||||
const GskSlExpressionSwizzle *swizzle = (const GskSlExpressionSwizzle *) expression;
|
||||
GskSlType *type;
|
||||
guint32 expr_id, type_id, result_id;
|
||||
guint32 expr_id;
|
||||
|
||||
type = gsk_sl_expression_get_return_type (swizzle->expr);
|
||||
expr_id = gsk_sl_expression_write_spv (swizzle->expr, writer);
|
||||
@@ -2281,51 +2044,35 @@ gsk_sl_expression_swizzle_write_spv (const GskSlExpression *expression,
|
||||
if (swizzle->length == 1)
|
||||
return expr_id;
|
||||
|
||||
type_id = gsk_spv_writer_get_id_for_type (writer, gsk_sl_expression_get_return_type (expression));
|
||||
result_id = gsk_spv_writer_next_id (writer);
|
||||
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_CODE,
|
||||
3 + swizzle->length, GSK_SPV_OP_COMPOSITE_CONSTRUCT,
|
||||
(guint32[6]) { type_id,
|
||||
result_id,
|
||||
expr_id,
|
||||
expr_id,
|
||||
expr_id,
|
||||
expr_id });
|
||||
|
||||
return result_id;
|
||||
return gsk_spv_writer_composite_construct (writer,
|
||||
gsk_sl_expression_get_return_type (expression),
|
||||
(guint32[4]) { expr_id, expr_id, expr_id, expr_id },
|
||||
swizzle->length);
|
||||
}
|
||||
else if (gsk_sl_type_is_vector (type))
|
||||
{
|
||||
type_id = gsk_spv_writer_get_id_for_type (writer, gsk_sl_expression_get_return_type (expression));
|
||||
result_id = gsk_spv_writer_next_id (writer);
|
||||
|
||||
if (swizzle->length == 1)
|
||||
{
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_CODE,
|
||||
4, GSK_SPV_OP_COMPOSITE_EXTRACT,
|
||||
(guint32[6]) { type_id,
|
||||
result_id,
|
||||
swizzle->indexes[0] });
|
||||
return gsk_spv_writer_composite_extract (writer,
|
||||
type,
|
||||
expr_id,
|
||||
(guint32[1]) { swizzle->indexes[0] },
|
||||
1);
|
||||
}
|
||||
else
|
||||
{
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_CODE,
|
||||
5 + swizzle->length, GSK_SPV_OP_COMPOSITE_CONSTRUCT,
|
||||
(guint32[8]) { type_id,
|
||||
result_id,
|
||||
expr_id,
|
||||
expr_id,
|
||||
swizzle->indexes[0],
|
||||
swizzle->indexes[1],
|
||||
swizzle->indexes[2],
|
||||
swizzle->indexes[3] });
|
||||
return gsk_spv_writer_vector_shuffle (writer,
|
||||
type,
|
||||
expr_id,
|
||||
expr_id,
|
||||
(guint32[4]) {
|
||||
swizzle->indexes[0],
|
||||
swizzle->indexes[1],
|
||||
swizzle->indexes[2],
|
||||
swizzle->indexes[3]
|
||||
},
|
||||
swizzle->length);
|
||||
}
|
||||
|
||||
return result_id;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -2432,42 +2179,28 @@ gsk_sl_expression_negation_write_spv (const GskSlExpression *expression,
|
||||
GskSpvWriter *writer)
|
||||
{
|
||||
const GskSlExpressionNegation *negation = (const GskSlExpressionNegation *) expression;
|
||||
guint type_id, expr_id, result_id;
|
||||
GskSlType *type;
|
||||
|
||||
type = gsk_sl_expression_get_return_type (negation->expr);
|
||||
type_id = gsk_spv_writer_get_id_for_type (writer, type);
|
||||
expr_id = gsk_sl_expression_write_spv (negation->expr, writer);
|
||||
result_id = gsk_spv_writer_next_id (writer);
|
||||
GskSlType *type = gsk_sl_expression_get_return_type (negation->expr);
|
||||
|
||||
switch (gsk_sl_type_get_scalar_type (type))
|
||||
{
|
||||
case GSK_SL_INT:
|
||||
case GSK_SL_UINT:
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_CODE,
|
||||
4, GSK_SPV_OP_S_NEGATE,
|
||||
(guint32[3]) { type_id,
|
||||
result_id,
|
||||
expr_id });
|
||||
break;
|
||||
return gsk_spv_writer_s_negate (writer,
|
||||
type,
|
||||
gsk_sl_expression_write_spv (negation->expr, writer));
|
||||
|
||||
case GSK_SL_FLOAT:
|
||||
case GSK_SL_DOUBLE:
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_CODE,
|
||||
4, GSK_SPV_OP_F_NEGATE,
|
||||
(guint32[3]) { type_id,
|
||||
result_id,
|
||||
expr_id });
|
||||
break;
|
||||
return gsk_spv_writer_f_negate (writer,
|
||||
type,
|
||||
gsk_sl_expression_write_spv (negation->expr, writer));
|
||||
|
||||
case GSK_SL_VOID:
|
||||
case GSK_SL_BOOL:
|
||||
default:
|
||||
g_assert_not_reached ();
|
||||
break;
|
||||
return 0;
|
||||
}
|
||||
|
||||
return result_id;
|
||||
}
|
||||
|
||||
static const GskSlExpressionClass GSK_SL_EXPRESSION_NEGATION = {
|
||||
|
||||
@@ -307,7 +307,7 @@ gsk_sl_function_declared_get_argument_type (const GskSlFunction *function,
|
||||
{
|
||||
const GskSlFunctionDeclared *declared = (const GskSlFunctionDeclared *) function;
|
||||
|
||||
return gsk_sl_pointer_type_get_type (gsk_sl_variable_get_type (declared->arguments[i]));
|
||||
return gsk_sl_variable_get_type (declared->arguments[i]);
|
||||
}
|
||||
|
||||
static GskSlValue *
|
||||
@@ -356,7 +356,8 @@ gsk_sl_function_declared_write_spv (const GskSlFunction *function,
|
||||
GskSpvWriter *writer)
|
||||
{
|
||||
GskSlFunctionDeclared *declared = (GskSlFunctionDeclared *) function;
|
||||
guint32 return_type_id, function_type_id, function_id, label_id;
|
||||
guint32 return_type_id, function_type_id, function_id;
|
||||
guint32 argument_types[declared->n_arguments];
|
||||
gsize i;
|
||||
|
||||
if (declared->statement == NULL)
|
||||
@@ -364,24 +365,16 @@ gsk_sl_function_declared_write_spv (const GskSlFunction *function,
|
||||
|
||||
/* declare type of function */
|
||||
return_type_id = gsk_spv_writer_get_id_for_type (writer, declared->return_type);
|
||||
function_type_id = gsk_spv_writer_next_id (writer);
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_DECLARE,
|
||||
3, GSK_SPV_OP_TYPE_FUNCTION,
|
||||
(guint32[2]) { function_type_id,
|
||||
return_type_id });
|
||||
for (i = 0; i < declared->n_arguments; i++)
|
||||
{
|
||||
argument_types[i] = gsk_spv_writer_get_id_for_type (writer, gsk_sl_variable_get_type (declared->arguments[i]));
|
||||
}
|
||||
function_type_id = gsk_spv_writer_type_function (writer, return_type_id, argument_types, declared->n_arguments);
|
||||
|
||||
/* add debug info */
|
||||
/* FIXME */
|
||||
|
||||
function_id = gsk_spv_writer_next_id (writer);
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_CODE,
|
||||
5, GSK_SPV_OP_FUNCTION,
|
||||
(guint32[4]) { return_type_id,
|
||||
function_id,
|
||||
0,
|
||||
function_type_id });
|
||||
function_id = gsk_spv_writer_function (writer, declared->return_type, 0, function_type_id);
|
||||
/* add function header */
|
||||
for (i = 0; i < declared->n_arguments; i++)
|
||||
{
|
||||
@@ -389,26 +382,15 @@ gsk_sl_function_declared_write_spv (const GskSlFunction *function,
|
||||
}
|
||||
|
||||
/* add function body */
|
||||
label_id = gsk_spv_writer_next_id (writer);
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_CODE,
|
||||
2, GSK_SPV_OP_LABEL,
|
||||
(guint32[1]) { label_id });
|
||||
gsk_spv_writer_label (writer);
|
||||
|
||||
gsk_sl_statement_write_spv (declared->statement, writer);
|
||||
|
||||
if (gsk_sl_type_is_void (declared->return_type) &&
|
||||
gsk_sl_statement_get_jump (declared->statement) < GSK_SL_JUMP_RETURN)
|
||||
{
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_CODE,
|
||||
1, GSK_SPV_OP_RETURN,
|
||||
NULL);
|
||||
}
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_CODE,
|
||||
1, GSK_SPV_OP_FUNCTION_END,
|
||||
NULL);
|
||||
gsk_spv_writer_return (writer);
|
||||
|
||||
gsk_spv_writer_function_end (writer);
|
||||
|
||||
return function_id;
|
||||
}
|
||||
|
||||
@@ -115,17 +115,7 @@ guint32
|
||||
gsk_sl_pointer_type_write_spv (const GskSlPointerType *type,
|
||||
GskSpvWriter *writer)
|
||||
{
|
||||
guint32 type_id, result_id;
|
||||
|
||||
type_id = gsk_spv_writer_get_id_for_type (writer, type->type);
|
||||
result_id = gsk_spv_writer_next_id (writer);
|
||||
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_DECLARE,
|
||||
4, GSK_SPV_OP_TYPE_POINTER,
|
||||
(guint32[3]) { result_id,
|
||||
gsk_sl_qualifier_get_storage_class (&type->qualifier),
|
||||
type_id });
|
||||
|
||||
return result_id;
|
||||
return gsk_spv_writer_type_pointer (writer,
|
||||
gsk_sl_qualifier_get_storage_class (&type->qualifier),
|
||||
gsk_spv_writer_get_id_for_type (writer, type->type));
|
||||
}
|
||||
|
||||
@@ -234,17 +234,16 @@ gsk_sl_statement_declaration_write_spv (const GskSlStatement *statement,
|
||||
GskSpvWriter *writer)
|
||||
{
|
||||
GskSlStatementDeclaration *declaration = (GskSlStatementDeclaration *) statement;
|
||||
guint32 variable_id;
|
||||
|
||||
variable_id = gsk_spv_writer_get_id_for_variable (writer, declaration->variable);
|
||||
|
||||
/* make sure it's written */
|
||||
gsk_spv_writer_get_id_for_variable (writer, declaration->variable);
|
||||
|
||||
if (declaration->initial && ! gsk_sl_variable_get_initial_value (declaration->variable))
|
||||
{
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_CODE,
|
||||
3, GSK_SPV_OP_STORE,
|
||||
(guint32[2]) { variable_id,
|
||||
gsk_sl_expression_write_spv (declaration->initial, writer)});
|
||||
gsk_spv_writer_store (writer,
|
||||
gsk_spv_writer_get_id_for_variable (writer, declaration->variable),
|
||||
gsk_sl_expression_write_spv (declaration->initial, writer),
|
||||
0);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -305,20 +304,12 @@ gsk_sl_statement_return_write_spv (const GskSlStatement *statement,
|
||||
|
||||
if (return_statement->value)
|
||||
{
|
||||
guint32 value_id;
|
||||
|
||||
value_id = gsk_sl_expression_write_spv (return_statement->value, writer);
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_CODE,
|
||||
2, GSK_SPV_OP_RETURN_VALUE,
|
||||
(guint32[1]) { value_id });
|
||||
gsk_spv_writer_return_value (writer,
|
||||
gsk_sl_expression_write_spv (return_statement->value, writer));
|
||||
}
|
||||
else
|
||||
{
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_CODE,
|
||||
1, GSK_SPV_OP_RETURN,
|
||||
NULL);
|
||||
gsk_spv_writer_return (writer);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -401,6 +392,7 @@ static void
|
||||
gsk_sl_statement_if_write_spv (const GskSlStatement *statement,
|
||||
GskSpvWriter *writer)
|
||||
{
|
||||
#if 0
|
||||
GskSlStatementIf *if_stmt = (GskSlStatementIf *) statement;
|
||||
guint32 label_id, if_id, else_id, condition_id;
|
||||
|
||||
@@ -451,6 +443,8 @@ gsk_sl_statement_if_write_spv (const GskSlStatement *statement,
|
||||
GSK_SPV_WRITER_SECTION_CODE,
|
||||
2, GSK_SPV_OP_LABEL,
|
||||
(guint32[1]) { label_id });
|
||||
#endif
|
||||
g_assert_not_reached ();
|
||||
}
|
||||
|
||||
static const GskSlStatementClass GSK_SL_STATEMENT_IF = {
|
||||
|
||||
283
gsk/gsksltype.c
283
gsk/gsksltype.c
@@ -102,18 +102,10 @@ static guint32
|
||||
write_float_spv (GskSpvWriter *writer,
|
||||
gconstpointer value)
|
||||
{
|
||||
guint32 type_id, result_id;
|
||||
|
||||
type_id = gsk_spv_writer_get_id_for_type (writer, gsk_sl_type_get_scalar (GSK_SL_FLOAT));
|
||||
result_id = gsk_spv_writer_next_id (writer);
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_DECLARE,
|
||||
4, GSK_SPV_OP_CONSTANT,
|
||||
(guint32[3]) { type_id,
|
||||
result_id,
|
||||
*(const guint32 *) value });
|
||||
|
||||
return result_id;
|
||||
return gsk_spv_writer_constant (writer,
|
||||
gsk_sl_type_get_scalar (GSK_SL_FLOAT),
|
||||
(guint32 *) value,
|
||||
1);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -129,19 +121,10 @@ static guint32
|
||||
write_double_spv (GskSpvWriter *writer,
|
||||
gconstpointer value)
|
||||
{
|
||||
guint32 type_id, result_id;
|
||||
|
||||
type_id = gsk_spv_writer_get_id_for_type (writer, gsk_sl_type_get_scalar (GSK_SL_DOUBLE));
|
||||
result_id = gsk_spv_writer_next_id (writer);
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_DECLARE,
|
||||
5, GSK_SPV_OP_CONSTANT,
|
||||
(guint32[4]) { type_id,
|
||||
result_id,
|
||||
*(const guint32 *) value,
|
||||
*(((const guint32 *) value) + 1) });
|
||||
|
||||
return result_id;
|
||||
return gsk_spv_writer_constant (writer,
|
||||
gsk_sl_type_get_scalar (GSK_SL_DOUBLE),
|
||||
(guint32 *) value,
|
||||
2);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -157,18 +140,10 @@ static guint32
|
||||
write_int_spv (GskSpvWriter *writer,
|
||||
gconstpointer value)
|
||||
{
|
||||
guint32 type_id, result_id;
|
||||
|
||||
type_id = gsk_spv_writer_get_id_for_type (writer, gsk_sl_type_get_scalar (GSK_SL_INT));
|
||||
result_id = gsk_spv_writer_next_id (writer);
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_DECLARE,
|
||||
4, GSK_SPV_OP_CONSTANT,
|
||||
(guint32[3]) { type_id,
|
||||
result_id,
|
||||
*(const guint32 *) value });
|
||||
|
||||
return result_id;
|
||||
return gsk_spv_writer_constant (writer,
|
||||
gsk_sl_type_get_scalar (GSK_SL_INT),
|
||||
(guint32 *) value,
|
||||
1);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -185,18 +160,10 @@ static guint32
|
||||
write_uint_spv (GskSpvWriter *writer,
|
||||
gconstpointer value)
|
||||
{
|
||||
guint32 type_id, result_id;
|
||||
|
||||
type_id = gsk_spv_writer_get_id_for_type (writer, gsk_sl_type_get_scalar (GSK_SL_UINT));
|
||||
result_id = gsk_spv_writer_next_id (writer);
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_DECLARE,
|
||||
4, GSK_SPV_OP_CONSTANT,
|
||||
(guint32[3]) { type_id,
|
||||
result_id,
|
||||
*(const guint32 *) value });
|
||||
|
||||
return result_id;
|
||||
return gsk_spv_writer_constant (writer,
|
||||
gsk_sl_type_get_scalar (GSK_SL_UINT),
|
||||
(guint32 *) value,
|
||||
1);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -212,17 +179,12 @@ static guint32
|
||||
write_bool_spv (GskSpvWriter *writer,
|
||||
gconstpointer value)
|
||||
{
|
||||
guint32 type_id, result_id;
|
||||
|
||||
type_id = gsk_spv_writer_get_id_for_type (writer, gsk_sl_type_get_scalar (GSK_SL_BOOL));
|
||||
result_id = gsk_spv_writer_next_id (writer);
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_DECLARE,
|
||||
3, *(const guint32 *) value ? GSK_SPV_OP_CONSTANT_TRUE : GSK_SPV_OP_CONSTANT_FALSE,
|
||||
(guint32[2]) { type_id,
|
||||
result_id });
|
||||
|
||||
return result_id;
|
||||
if (*(const guint32 *) value)
|
||||
return gsk_spv_writer_constant_true (writer,
|
||||
gsk_sl_type_get_scalar (GSK_SL_BOOL));
|
||||
else
|
||||
return gsk_spv_writer_constant_false (writer,
|
||||
gsk_sl_type_get_scalar (GSK_SL_BOOL));
|
||||
}
|
||||
|
||||
#define SIMPLE_CONVERSION(source_name, target_name, source_type, target_type) \
|
||||
@@ -452,15 +414,7 @@ static guint32
|
||||
gsk_sl_type_void_write_spv (GskSlType *type,
|
||||
GskSpvWriter *writer)
|
||||
{
|
||||
guint32 result;
|
||||
|
||||
result = gsk_spv_writer_next_id (writer);
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_DECLARE,
|
||||
2, GSK_SPV_OP_TYPE_VOID,
|
||||
(guint32[1]) { result });
|
||||
|
||||
return result;
|
||||
return gsk_spv_writer_type_void (writer);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -602,70 +556,29 @@ gsk_sl_type_scalar_write_spv (GskSlType *type,
|
||||
GskSpvWriter *writer)
|
||||
{
|
||||
GskSlTypeScalar *scalar = (GskSlTypeScalar *) type;
|
||||
guint32 result;
|
||||
|
||||
switch (scalar->scalar)
|
||||
{
|
||||
case GSK_SL_VOID:
|
||||
result = gsk_spv_writer_next_id (writer);
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_DECLARE,
|
||||
2, GSK_SPV_OP_TYPE_VOID,
|
||||
(guint32[1]) { result });
|
||||
break;
|
||||
|
||||
case GSK_SL_FLOAT:
|
||||
result = gsk_spv_writer_next_id (writer);
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_DECLARE,
|
||||
3, GSK_SPV_OP_TYPE_FLOAT,
|
||||
(guint32[2]) { result,
|
||||
32 });
|
||||
break;
|
||||
return gsk_spv_writer_type_float (writer, 32);
|
||||
|
||||
case GSK_SL_DOUBLE:
|
||||
result = gsk_spv_writer_next_id (writer);
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_DECLARE,
|
||||
3, GSK_SPV_OP_TYPE_FLOAT,
|
||||
(guint32[2]) { result,
|
||||
64 });
|
||||
break;
|
||||
return gsk_spv_writer_type_float (writer, 64);
|
||||
|
||||
case GSK_SL_INT:
|
||||
result = gsk_spv_writer_next_id (writer);
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_DECLARE,
|
||||
4, GSK_SPV_OP_TYPE_INT,
|
||||
(guint32[3]) { result,
|
||||
32,
|
||||
1 });
|
||||
break;
|
||||
return gsk_spv_writer_type_int (writer, 32, 1);
|
||||
|
||||
case GSK_SL_UINT:
|
||||
result = gsk_spv_writer_next_id (writer);
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_DECLARE,
|
||||
4, GSK_SPV_OP_TYPE_INT,
|
||||
(guint32[3]) { result,
|
||||
32,
|
||||
0 });
|
||||
break;
|
||||
return gsk_spv_writer_type_int (writer, 32, 0);
|
||||
|
||||
case GSK_SL_BOOL:
|
||||
result = gsk_spv_writer_next_id (writer);
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_DECLARE,
|
||||
2, GSK_SPV_OP_TYPE_BOOL,
|
||||
(guint32[1]) { result });
|
||||
break;
|
||||
return gsk_spv_writer_type_bool (writer);
|
||||
|
||||
case GSK_SL_VOID:
|
||||
default:
|
||||
g_assert_not_reached ();
|
||||
break;
|
||||
return 0;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -824,18 +737,10 @@ gsk_sl_type_vector_write_spv (GskSlType *type,
|
||||
GskSpvWriter *writer)
|
||||
{
|
||||
GskSlTypeVector *vector = (GskSlTypeVector *) type;
|
||||
guint32 result_id, scalar_id;
|
||||
|
||||
scalar_id = gsk_spv_writer_get_id_for_type (writer, gsk_sl_type_get_scalar (vector->scalar));
|
||||
result_id = gsk_spv_writer_next_id (writer);
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_DECLARE,
|
||||
4, GSK_SPV_OP_TYPE_VECTOR,
|
||||
(guint32[3]) { result_id,
|
||||
scalar_id,
|
||||
vector->length });
|
||||
|
||||
return result_id;
|
||||
return gsk_spv_writer_type_vector (writer,
|
||||
gsk_spv_writer_get_id_for_type (writer, gsk_sl_type_get_scalar (vector->scalar)),
|
||||
vector->length);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -891,7 +796,7 @@ gsk_sl_type_vector_write_value_spv (GskSlType *type,
|
||||
gconstpointer value)
|
||||
{
|
||||
GskSlTypeVector *vector = (GskSlTypeVector *) type;
|
||||
guint32 ids[vector->length + 2];
|
||||
guint32 ids[vector->length];
|
||||
GskSlType *scalar_type;
|
||||
GskSlValue *v;
|
||||
const guchar *data;
|
||||
@@ -900,23 +805,18 @@ gsk_sl_type_vector_write_value_spv (GskSlType *type,
|
||||
data = value;
|
||||
scalar_type = gsk_sl_type_get_scalar (vector->scalar);
|
||||
|
||||
ids[0] = gsk_spv_writer_get_id_for_type (writer, type);
|
||||
for (i = 0; i < vector->length; i++)
|
||||
{
|
||||
v = gsk_sl_value_new_for_data (scalar_type, (gpointer) data, NULL, NULL);
|
||||
ids[2 + i] = gsk_spv_writer_get_id_for_value (writer, v);
|
||||
ids[i] = gsk_spv_writer_get_id_for_value (writer, v);
|
||||
gsk_sl_value_free (v);
|
||||
data += scalar_infos[vector->scalar].size;
|
||||
}
|
||||
ids[1] = gsk_spv_writer_next_id (writer);
|
||||
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_DECLARE,
|
||||
3 + vector->length,
|
||||
GSK_SPV_OP_CONSTANT_COMPOSITE,
|
||||
ids);
|
||||
|
||||
return ids[1];
|
||||
return gsk_spv_writer_constant_composite (writer,
|
||||
type,
|
||||
ids,
|
||||
vector->length);
|
||||
}
|
||||
|
||||
static const GskSlTypeClass GSK_SL_TYPE_VECTOR = {
|
||||
@@ -1047,18 +947,10 @@ gsk_sl_type_matrix_write_spv (GskSlType *type,
|
||||
GskSpvWriter *writer)
|
||||
{
|
||||
GskSlTypeMatrix *matrix = (GskSlTypeMatrix *) type;
|
||||
guint32 result_id, vector_id;
|
||||
|
||||
vector_id = gsk_spv_writer_get_id_for_type (writer, gsk_sl_type_get_index_type (type));
|
||||
result_id = gsk_spv_writer_next_id (writer);
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_DECLARE,
|
||||
4, GSK_SPV_OP_TYPE_MATRIX,
|
||||
(guint32[3]) { result_id,
|
||||
vector_id,
|
||||
matrix->columns });
|
||||
|
||||
return result_id;
|
||||
return gsk_spv_writer_type_matrix (writer,
|
||||
gsk_spv_writer_get_id_for_type (writer, gsk_sl_type_get_index_type (type)),
|
||||
matrix->columns);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -1114,7 +1006,7 @@ gsk_sl_type_matrix_write_value_spv (GskSlType *type,
|
||||
gconstpointer value)
|
||||
{
|
||||
GskSlTypeMatrix *matrix = (GskSlTypeMatrix *) type;
|
||||
guint32 ids[matrix->rows + 2];
|
||||
guint32 ids[matrix->rows];
|
||||
GskSlType *vector_type;
|
||||
GskSlValue *v;
|
||||
const guchar *data;
|
||||
@@ -1123,23 +1015,18 @@ gsk_sl_type_matrix_write_value_spv (GskSlType *type,
|
||||
data = value;
|
||||
vector_type = gsk_sl_type_get_index_type (type);
|
||||
|
||||
ids[0] = gsk_spv_writer_get_id_for_type (writer, type);
|
||||
for (i = 0; i < matrix->columns; i++)
|
||||
{
|
||||
v = gsk_sl_value_new_for_data (vector_type, (gpointer) data, NULL, NULL);
|
||||
ids[2 + i] = gsk_spv_writer_get_id_for_value (writer, v);
|
||||
ids[i] = gsk_spv_writer_get_id_for_value (writer, v);
|
||||
gsk_sl_value_free (v);
|
||||
data += gsk_sl_type_get_size (vector_type);
|
||||
}
|
||||
ids[1] = gsk_spv_writer_next_id (writer);
|
||||
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_DECLARE,
|
||||
3 + matrix->columns,
|
||||
GSK_SPV_OP_CONSTANT_COMPOSITE,
|
||||
ids);
|
||||
|
||||
return ids[1];
|
||||
return gsk_spv_writer_constant_composite (writer,
|
||||
type,
|
||||
ids,
|
||||
matrix->columns);
|
||||
}
|
||||
|
||||
static const GskSlTypeClass GSK_SL_TYPE_MATRIX = {
|
||||
@@ -1267,22 +1154,17 @@ gsk_sl_type_struct_write_spv (GskSlType *type,
|
||||
GskSpvWriter *writer)
|
||||
{
|
||||
GskSlTypeStruct *struc = (GskSlTypeStruct *) type;
|
||||
guint32 ids[struc->n_members + 1];
|
||||
guint32 ids[struc->n_members];
|
||||
guint i;
|
||||
|
||||
ids[0] = gsk_spv_writer_next_id (writer);
|
||||
|
||||
for (i = 0; i < struc->n_members; i++)
|
||||
{
|
||||
ids[i + 1] = gsk_spv_writer_get_id_for_type (writer, struc->members[i].type);
|
||||
ids[i] = gsk_spv_writer_get_id_for_type (writer, struc->members[i].type);
|
||||
}
|
||||
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_DECLARE,
|
||||
2 + struc->n_members, GSK_SPV_OP_TYPE_STRUCT,
|
||||
ids);
|
||||
|
||||
return ids[0];
|
||||
return gsk_spv_writer_type_struct (writer,
|
||||
ids,
|
||||
struc->n_members);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -1337,29 +1219,23 @@ gsk_sl_type_struct_write_value_spv (GskSlType *type,
|
||||
gconstpointer value)
|
||||
{
|
||||
GskSlTypeStruct *struc = (GskSlTypeStruct *) type;
|
||||
guint32 ids[struc->n_members + 2];
|
||||
guint32 ids[struc->n_members];
|
||||
GskSlValue *v;
|
||||
guint i;
|
||||
|
||||
ids[0] = gsk_spv_writer_get_id_for_type (writer, type);
|
||||
for (i = 0; i < struc->n_members; i++)
|
||||
{
|
||||
v = gsk_sl_value_new_for_data (struc->members[i].type,
|
||||
(guchar *) value + struc->members[i].offset,
|
||||
NULL, NULL);
|
||||
ids[2 + i] = gsk_spv_writer_get_id_for_value (writer, v);
|
||||
ids[i] = gsk_spv_writer_get_id_for_value (writer, v);
|
||||
gsk_sl_value_free (v);
|
||||
}
|
||||
|
||||
ids[1] = gsk_spv_writer_next_id (writer);
|
||||
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_DECLARE,
|
||||
3 + struc->n_members,
|
||||
GSK_SPV_OP_CONSTANT_COMPOSITE,
|
||||
ids);
|
||||
|
||||
return ids[1];
|
||||
return gsk_spv_writer_constant_composite (writer,
|
||||
type,
|
||||
ids,
|
||||
struc->n_members);
|
||||
}
|
||||
|
||||
static const GskSlTypeClass GSK_SL_TYPE_STRUCT = {
|
||||
@@ -1487,28 +1363,21 @@ gsk_sl_type_block_write_spv (GskSlType *type,
|
||||
GskSpvWriter *writer)
|
||||
{
|
||||
GskSlTypeBlock *block = (GskSlTypeBlock *) type;
|
||||
guint32 ids[block->n_members + 1];
|
||||
guint32 ids[block->n_members], result_id;
|
||||
guint i;
|
||||
|
||||
ids[0] = gsk_spv_writer_next_id (writer);
|
||||
|
||||
for (i = 0; i < block->n_members; i++)
|
||||
{
|
||||
ids[i + 1] = gsk_spv_writer_get_id_for_type (writer, block->members[i].type);
|
||||
ids[i] = gsk_spv_writer_get_id_for_type (writer, block->members[i].type);
|
||||
}
|
||||
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_DEBUG,
|
||||
3, GSK_SPV_OP_DECORATE,
|
||||
(guint32[2]) { ids[0],
|
||||
GSK_SPV_DECORATION_BLOCK });
|
||||
result_id = gsk_spv_writer_type_struct (writer,
|
||||
ids,
|
||||
block->n_members);
|
||||
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_DECLARE,
|
||||
2 + block->n_members, GSK_SPV_OP_TYPE_STRUCT,
|
||||
ids);
|
||||
|
||||
return ids[0];
|
||||
gsk_spv_writer_decorate (writer, result_id, GSK_SPV_DECORATION_BLOCK);
|
||||
|
||||
return result_id;
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -1563,29 +1432,23 @@ gsk_sl_type_block_write_value_spv (GskSlType *type,
|
||||
gconstpointer value)
|
||||
{
|
||||
GskSlTypeBlock *block = (GskSlTypeBlock *) type;
|
||||
guint32 ids[block->n_members + 2];
|
||||
guint32 ids[block->n_members];
|
||||
GskSlValue *v;
|
||||
guint i;
|
||||
|
||||
ids[0] = gsk_spv_writer_get_id_for_type (writer, type);
|
||||
for (i = 0; i < block->n_members; i++)
|
||||
{
|
||||
v = gsk_sl_value_new_for_data (block->members[i].type,
|
||||
(guchar *) value + block->members[i].offset,
|
||||
NULL, NULL);
|
||||
ids[2 + i] = gsk_spv_writer_get_id_for_value (writer, v);
|
||||
ids[i] = gsk_spv_writer_get_id_for_value (writer, v);
|
||||
gsk_sl_value_free (v);
|
||||
}
|
||||
|
||||
ids[1] = gsk_spv_writer_next_id (writer);
|
||||
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_DECLARE,
|
||||
3 + block->n_members,
|
||||
GSK_SPV_OP_CONSTANT_COMPOSITE,
|
||||
ids);
|
||||
|
||||
return ids[1];
|
||||
return gsk_spv_writer_constant_composite (writer,
|
||||
type,
|
||||
ids,
|
||||
block->n_members);
|
||||
}
|
||||
|
||||
static const GskSlTypeClass GSK_SL_TYPE_BLOCK = {
|
||||
|
||||
@@ -117,8 +117,14 @@ gsk_sl_variable_print (const GskSlVariable *variable,
|
||||
}
|
||||
}
|
||||
|
||||
GskSlPointerType *
|
||||
GskSlType *
|
||||
gsk_sl_variable_get_type (const GskSlVariable *variable)
|
||||
{
|
||||
return gsk_sl_pointer_type_get_type (variable->type);
|
||||
}
|
||||
|
||||
GskSlPointerType *
|
||||
gsk_sl_variable_get_pointer_type (const GskSlVariable *variable)
|
||||
{
|
||||
return variable->type;
|
||||
}
|
||||
@@ -147,36 +153,21 @@ gsk_sl_variable_write_spv (const GskSlVariable *variable,
|
||||
{
|
||||
if (gsk_sl_qualifier_get_location (gsk_sl_pointer_type_get_qualifier (variable->type)) == GSK_SL_QUALIFIER_PARAMETER)
|
||||
{
|
||||
guint32 type_id, variable_id;
|
||||
|
||||
type_id = gsk_spv_writer_get_id_for_type (writer, gsk_sl_pointer_type_get_type (variable->type));
|
||||
variable_id = gsk_spv_writer_next_id (writer);
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_CODE,
|
||||
3, GSK_SPV_OP_FUNCTION_PARAMETER,
|
||||
(guint32[2]) { type_id,
|
||||
variable_id });
|
||||
|
||||
return variable_id;
|
||||
return gsk_spv_writer_function_parameter (writer,
|
||||
gsk_sl_pointer_type_get_type (variable->type));
|
||||
}
|
||||
else
|
||||
{
|
||||
guint32 pointer_type_id, variable_id, value_id;
|
||||
guint32 value_id;
|
||||
|
||||
pointer_type_id = gsk_spv_writer_get_id_for_pointer_type (writer, variable->type);
|
||||
variable_id = gsk_spv_writer_next_id (writer);
|
||||
if (variable->initial_value)
|
||||
value_id = gsk_spv_writer_get_id_for_value (writer, variable->initial_value);
|
||||
else
|
||||
value_id = 0;
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_CODE,
|
||||
variable->initial_value ? 5 : 4, GSK_SPV_OP_VARIABLE,
|
||||
(guint32[4]) { pointer_type_id,
|
||||
variable_id,
|
||||
gsk_sl_qualifier_get_storage_class (gsk_sl_pointer_type_get_qualifier (variable->type)),
|
||||
value_id });
|
||||
|
||||
return variable_id;
|
||||
return gsk_spv_writer_variable (writer,
|
||||
variable->type,
|
||||
gsk_sl_qualifier_get_storage_class (gsk_sl_pointer_type_get_qualifier (variable->type)),
|
||||
value_id);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -35,7 +35,8 @@ void gsk_sl_variable_unref (GskSlVariable
|
||||
void gsk_sl_variable_print (const GskSlVariable *variable,
|
||||
GskSlPrinter *printer);
|
||||
|
||||
GskSlPointerType * gsk_sl_variable_get_type (const GskSlVariable *variable);
|
||||
GskSlType * gsk_sl_variable_get_type (const GskSlVariable *variable);
|
||||
GskSlPointerType * gsk_sl_variable_get_pointer_type (const GskSlVariable *variable);
|
||||
const char * gsk_sl_variable_get_name (const GskSlVariable *variable);
|
||||
const GskSlValue * gsk_sl_variable_get_initial_value (const GskSlVariable *variable);
|
||||
gboolean gsk_sl_variable_is_constant (const GskSlVariable *variable);
|
||||
|
||||
855
gsk/gskspvenumsprivate.h
Normal file
855
gsk/gskspvenumsprivate.h
Normal file
@@ -0,0 +1,855 @@
|
||||
/* GTK - The GIMP Toolkit
|
||||
*
|
||||
* Copyright © 2017 Benjamin Otte <otte@gnome.org>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/*
|
||||
* !!! THIS FILE WAS AUTOGENERATED !!!
|
||||
*
|
||||
* This file was created using the command
|
||||
* gjs spirv.js enums spirv.core.grammar.json
|
||||
* Apply any changes to those files and then regenerate using above command.
|
||||
*/
|
||||
|
||||
#ifndef __GSK_SPV_ENUMS_H__
|
||||
#define __GSK_SPV_ENUMS_H__
|
||||
|
||||
typedef enum {
|
||||
GSK_SPV_IMAGE_OPERANDS_NONE = 0x0000,
|
||||
GSK_SPV_IMAGE_OPERANDS_BIAS = 0x0001,
|
||||
GSK_SPV_IMAGE_OPERANDS_LOD = 0x0002,
|
||||
GSK_SPV_IMAGE_OPERANDS_GRAD = 0x0004,
|
||||
GSK_SPV_IMAGE_OPERANDS_CONST_OFFSET = 0x0008,
|
||||
GSK_SPV_IMAGE_OPERANDS_OFFSET = 0x0010,
|
||||
GSK_SPV_IMAGE_OPERANDS_CONST_OFFSETS = 0x0020,
|
||||
GSK_SPV_IMAGE_OPERANDS_SAMPLE = 0x0040,
|
||||
GSK_SPV_IMAGE_OPERANDS_MIN_LOD = 0x0080
|
||||
} GskSpvImageOperands;
|
||||
|
||||
typedef enum {
|
||||
GSK_SPV_FP_FAST_MATH_MODE_NONE = 0x0000,
|
||||
GSK_SPV_FP_FAST_MATH_MODE_NOT_NA_N = 0x0001,
|
||||
GSK_SPV_FP_FAST_MATH_MODE_NOT_INF = 0x0002,
|
||||
GSK_SPV_FP_FAST_MATH_MODE_NSZ = 0x0004,
|
||||
GSK_SPV_FP_FAST_MATH_MODE_ALLOW_RECIP = 0x0008,
|
||||
GSK_SPV_FP_FAST_MATH_MODE_FAST = 0x0010
|
||||
} GskSpvFPFastMathMode;
|
||||
|
||||
typedef enum {
|
||||
GSK_SPV_SELECTION_CONTROL_NONE = 0x0000,
|
||||
GSK_SPV_SELECTION_CONTROL_FLATTEN = 0x0001,
|
||||
GSK_SPV_SELECTION_CONTROL_DONT_FLATTEN = 0x0002
|
||||
} GskSpvSelectionControl;
|
||||
|
||||
typedef enum {
|
||||
GSK_SPV_LOOP_CONTROL_NONE = 0x0000,
|
||||
GSK_SPV_LOOP_CONTROL_UNROLL = 0x0001,
|
||||
GSK_SPV_LOOP_CONTROL_DONT_UNROLL = 0x0002
|
||||
} GskSpvLoopControl;
|
||||
|
||||
typedef enum {
|
||||
GSK_SPV_FUNCTION_CONTROL_NONE = 0x0000,
|
||||
GSK_SPV_FUNCTION_CONTROL_INLINE = 0x0001,
|
||||
GSK_SPV_FUNCTION_CONTROL_DONT_INLINE = 0x0002,
|
||||
GSK_SPV_FUNCTION_CONTROL_PURE = 0x0004,
|
||||
GSK_SPV_FUNCTION_CONTROL_CONST = 0x0008
|
||||
} GskSpvFunctionControl;
|
||||
|
||||
typedef enum {
|
||||
GSK_SPV_MEMORY_SEMANTICS_RELAXED = 0x0000,
|
||||
GSK_SPV_MEMORY_SEMANTICS_NONE = 0x0000,
|
||||
GSK_SPV_MEMORY_SEMANTICS_ACQUIRE = 0x0002,
|
||||
GSK_SPV_MEMORY_SEMANTICS_RELEASE = 0x0004,
|
||||
GSK_SPV_MEMORY_SEMANTICS_ACQUIRE_RELEASE = 0x0008,
|
||||
GSK_SPV_MEMORY_SEMANTICS_SEQUENTIALLY_CONSISTENT = 0x0010,
|
||||
GSK_SPV_MEMORY_SEMANTICS_UNIFORM_MEMORY = 0x0040,
|
||||
GSK_SPV_MEMORY_SEMANTICS_SUBGROUP_MEMORY = 0x0080,
|
||||
GSK_SPV_MEMORY_SEMANTICS_WORKGROUP_MEMORY = 0x0100,
|
||||
GSK_SPV_MEMORY_SEMANTICS_CROSS_WORKGROUP_MEMORY = 0x0200,
|
||||
GSK_SPV_MEMORY_SEMANTICS_ATOMIC_COUNTER_MEMORY = 0x0400,
|
||||
GSK_SPV_MEMORY_SEMANTICS_IMAGE_MEMORY = 0x0800
|
||||
} GskSpvMemorySemantics;
|
||||
|
||||
typedef enum {
|
||||
GSK_SPV_MEMORY_ACCESS_NONE = 0x0000,
|
||||
GSK_SPV_MEMORY_ACCESS_VOLATILE = 0x0001,
|
||||
GSK_SPV_MEMORY_ACCESS_ALIGNED = 0x0002,
|
||||
GSK_SPV_MEMORY_ACCESS_NONTEMPORAL = 0x0004
|
||||
} GskSpvMemoryAccess;
|
||||
|
||||
typedef enum {
|
||||
GSK_SPV_KERNEL_PROFILING_INFO_NONE = 0x0000,
|
||||
GSK_SPV_KERNEL_PROFILING_INFO_CMD_EXEC_TIME = 0x0001
|
||||
} GskSpvKernelProfilingInfo;
|
||||
|
||||
typedef enum {
|
||||
GSK_SPV_SOURCE_LANGUAGE_UNKNOWN = 0,
|
||||
GSK_SPV_SOURCE_LANGUAGE_ESSL = 1,
|
||||
GSK_SPV_SOURCE_LANGUAGE_GLSL = 2,
|
||||
GSK_SPV_SOURCE_LANGUAGE_OPEN_CL_C = 3,
|
||||
GSK_SPV_SOURCE_LANGUAGE_OPEN_CL_CPP = 4,
|
||||
GSK_SPV_SOURCE_LANGUAGE_HLSL = 5
|
||||
} GskSpvSourceLanguage;
|
||||
|
||||
typedef enum {
|
||||
GSK_SPV_EXECUTION_MODEL_VERTEX = 0,
|
||||
GSK_SPV_EXECUTION_MODEL_TESSELLATION_CONTROL = 1,
|
||||
GSK_SPV_EXECUTION_MODEL_TESSELLATION_EVALUATION = 2,
|
||||
GSK_SPV_EXECUTION_MODEL_GEOMETRY = 3,
|
||||
GSK_SPV_EXECUTION_MODEL_FRAGMENT = 4,
|
||||
GSK_SPV_EXECUTION_MODEL_GL_COMPUTE = 5,
|
||||
GSK_SPV_EXECUTION_MODEL_KERNEL = 6
|
||||
} GskSpvExecutionModel;
|
||||
|
||||
typedef enum {
|
||||
GSK_SPV_ADDRESSING_MODEL_LOGICAL = 0,
|
||||
GSK_SPV_ADDRESSING_MODEL_PHYSICAL32 = 1,
|
||||
GSK_SPV_ADDRESSING_MODEL_PHYSICAL64 = 2
|
||||
} GskSpvAddressingModel;
|
||||
|
||||
typedef enum {
|
||||
GSK_SPV_MEMORY_MODEL_SIMPLE = 0,
|
||||
GSK_SPV_MEMORY_MODEL_GLSL450 = 1,
|
||||
GSK_SPV_MEMORY_MODEL_OPEN_CL = 2
|
||||
} GskSpvMemoryModel;
|
||||
|
||||
typedef enum {
|
||||
GSK_SPV_EXECUTION_MODE_INVOCATIONS = 0,
|
||||
GSK_SPV_EXECUTION_MODE_SPACING_EQUAL = 1,
|
||||
GSK_SPV_EXECUTION_MODE_SPACING_FRACTIONAL_EVEN = 2,
|
||||
GSK_SPV_EXECUTION_MODE_SPACING_FRACTIONAL_ODD = 3,
|
||||
GSK_SPV_EXECUTION_MODE_VERTEX_ORDER_CW = 4,
|
||||
GSK_SPV_EXECUTION_MODE_VERTEX_ORDER_CCW = 5,
|
||||
GSK_SPV_EXECUTION_MODE_PIXEL_CENTER_INTEGER = 6,
|
||||
GSK_SPV_EXECUTION_MODE_ORIGIN_UPPER_LEFT = 7,
|
||||
GSK_SPV_EXECUTION_MODE_ORIGIN_LOWER_LEFT = 8,
|
||||
GSK_SPV_EXECUTION_MODE_EARLY_FRAGMENT_TESTS = 9,
|
||||
GSK_SPV_EXECUTION_MODE_POINT_MODE = 10,
|
||||
GSK_SPV_EXECUTION_MODE_XFB = 11,
|
||||
GSK_SPV_EXECUTION_MODE_DEPTH_REPLACING = 12,
|
||||
GSK_SPV_EXECUTION_MODE_DEPTH_GREATER = 14,
|
||||
GSK_SPV_EXECUTION_MODE_DEPTH_LESS = 15,
|
||||
GSK_SPV_EXECUTION_MODE_DEPTH_UNCHANGED = 16,
|
||||
GSK_SPV_EXECUTION_MODE_LOCAL_SIZE = 17,
|
||||
GSK_SPV_EXECUTION_MODE_LOCAL_SIZE_HINT = 18,
|
||||
GSK_SPV_EXECUTION_MODE_INPUT_POINTS = 19,
|
||||
GSK_SPV_EXECUTION_MODE_INPUT_LINES = 20,
|
||||
GSK_SPV_EXECUTION_MODE_INPUT_LINES_ADJACENCY = 21,
|
||||
GSK_SPV_EXECUTION_MODE_TRIANGLES = 22,
|
||||
GSK_SPV_EXECUTION_MODE_INPUT_TRIANGLES_ADJACENCY = 23,
|
||||
GSK_SPV_EXECUTION_MODE_QUADS = 24,
|
||||
GSK_SPV_EXECUTION_MODE_ISOLINES = 25,
|
||||
GSK_SPV_EXECUTION_MODE_OUTPUT_VERTICES = 26,
|
||||
GSK_SPV_EXECUTION_MODE_OUTPUT_POINTS = 27,
|
||||
GSK_SPV_EXECUTION_MODE_OUTPUT_LINE_STRIP = 28,
|
||||
GSK_SPV_EXECUTION_MODE_OUTPUT_TRIANGLE_STRIP = 29,
|
||||
GSK_SPV_EXECUTION_MODE_VEC_TYPE_HINT = 30,
|
||||
GSK_SPV_EXECUTION_MODE_CONTRACTION_OFF = 31,
|
||||
GSK_SPV_EXECUTION_MODE_POST_DEPTH_COVERAGE = 4446,
|
||||
GSK_SPV_EXECUTION_MODE_STENCIL_REF_REPLACING_EXT = 5027
|
||||
} GskSpvExecutionMode;
|
||||
|
||||
typedef enum {
|
||||
GSK_SPV_STORAGE_CLASS_UNIFORM_CONSTANT = 0,
|
||||
GSK_SPV_STORAGE_CLASS_INPUT = 1,
|
||||
GSK_SPV_STORAGE_CLASS_UNIFORM = 2,
|
||||
GSK_SPV_STORAGE_CLASS_OUTPUT = 3,
|
||||
GSK_SPV_STORAGE_CLASS_WORKGROUP = 4,
|
||||
GSK_SPV_STORAGE_CLASS_CROSS_WORKGROUP = 5,
|
||||
GSK_SPV_STORAGE_CLASS_PRIVATE = 6,
|
||||
GSK_SPV_STORAGE_CLASS_FUNCTION = 7,
|
||||
GSK_SPV_STORAGE_CLASS_GENERIC = 8,
|
||||
GSK_SPV_STORAGE_CLASS_PUSH_CONSTANT = 9,
|
||||
GSK_SPV_STORAGE_CLASS_ATOMIC_COUNTER = 10,
|
||||
GSK_SPV_STORAGE_CLASS_IMAGE = 11,
|
||||
GSK_SPV_STORAGE_CLASS_STORAGE_BUFFER = 12
|
||||
} GskSpvStorageClass;
|
||||
|
||||
typedef enum {
|
||||
GSK_SPV_DIM_1_D = 0,
|
||||
GSK_SPV_DIM_2_D = 1,
|
||||
GSK_SPV_DIM_3_D = 2,
|
||||
GSK_SPV_DIM_CUBE = 3,
|
||||
GSK_SPV_DIM_RECT = 4,
|
||||
GSK_SPV_DIM_BUFFER = 5,
|
||||
GSK_SPV_DIM_SUBPASS_DATA = 6
|
||||
} GskSpvDim;
|
||||
|
||||
typedef enum {
|
||||
GSK_SPV_SAMPLER_ADDRESSING_MODE_NONE = 0,
|
||||
GSK_SPV_SAMPLER_ADDRESSING_MODE_CLAMP_TO_EDGE = 1,
|
||||
GSK_SPV_SAMPLER_ADDRESSING_MODE_CLAMP = 2,
|
||||
GSK_SPV_SAMPLER_ADDRESSING_MODE_REPEAT = 3,
|
||||
GSK_SPV_SAMPLER_ADDRESSING_MODE_REPEAT_MIRRORED = 4
|
||||
} GskSpvSamplerAddressingMode;
|
||||
|
||||
typedef enum {
|
||||
GSK_SPV_SAMPLER_FILTER_MODE_NEAREST = 0,
|
||||
GSK_SPV_SAMPLER_FILTER_MODE_LINEAR = 1
|
||||
} GskSpvSamplerFilterMode;
|
||||
|
||||
typedef enum {
|
||||
GSK_SPV_IMAGE_FORMAT_UNKNOWN = 0,
|
||||
GSK_SPV_IMAGE_FORMAT_RGBA32F = 1,
|
||||
GSK_SPV_IMAGE_FORMAT_RGBA16F = 2,
|
||||
GSK_SPV_IMAGE_FORMAT_R32F = 3,
|
||||
GSK_SPV_IMAGE_FORMAT_RGBA8 = 4,
|
||||
GSK_SPV_IMAGE_FORMAT_RGBA8_SNORM = 5,
|
||||
GSK_SPV_IMAGE_FORMAT_RG32F = 6,
|
||||
GSK_SPV_IMAGE_FORMAT_RG16F = 7,
|
||||
GSK_SPV_IMAGE_FORMAT_R11F_G11F_B10F = 8,
|
||||
GSK_SPV_IMAGE_FORMAT_R16F = 9,
|
||||
GSK_SPV_IMAGE_FORMAT_RGBA16 = 10,
|
||||
GSK_SPV_IMAGE_FORMAT_RGB10_A2 = 11,
|
||||
GSK_SPV_IMAGE_FORMAT_RG16 = 12,
|
||||
GSK_SPV_IMAGE_FORMAT_RG8 = 13,
|
||||
GSK_SPV_IMAGE_FORMAT_R16 = 14,
|
||||
GSK_SPV_IMAGE_FORMAT_R8 = 15,
|
||||
GSK_SPV_IMAGE_FORMAT_RGBA16_SNORM = 16,
|
||||
GSK_SPV_IMAGE_FORMAT_RG16_SNORM = 17,
|
||||
GSK_SPV_IMAGE_FORMAT_RG8_SNORM = 18,
|
||||
GSK_SPV_IMAGE_FORMAT_R16_SNORM = 19,
|
||||
GSK_SPV_IMAGE_FORMAT_R8_SNORM = 20,
|
||||
GSK_SPV_IMAGE_FORMAT_RGBA32I = 21,
|
||||
GSK_SPV_IMAGE_FORMAT_RGBA16I = 22,
|
||||
GSK_SPV_IMAGE_FORMAT_RGBA8I = 23,
|
||||
GSK_SPV_IMAGE_FORMAT_R32I = 24,
|
||||
GSK_SPV_IMAGE_FORMAT_RG32I = 25,
|
||||
GSK_SPV_IMAGE_FORMAT_RG16I = 26,
|
||||
GSK_SPV_IMAGE_FORMAT_RG8I = 27,
|
||||
GSK_SPV_IMAGE_FORMAT_R16I = 28,
|
||||
GSK_SPV_IMAGE_FORMAT_R8I = 29,
|
||||
GSK_SPV_IMAGE_FORMAT_RGBA32UI = 30,
|
||||
GSK_SPV_IMAGE_FORMAT_RGBA16UI = 31,
|
||||
GSK_SPV_IMAGE_FORMAT_RGBA8UI = 32,
|
||||
GSK_SPV_IMAGE_FORMAT_R32UI = 33,
|
||||
GSK_SPV_IMAGE_FORMAT_RGB10A2UI = 34,
|
||||
GSK_SPV_IMAGE_FORMAT_RG32UI = 35,
|
||||
GSK_SPV_IMAGE_FORMAT_RG16UI = 36,
|
||||
GSK_SPV_IMAGE_FORMAT_RG8UI = 37,
|
||||
GSK_SPV_IMAGE_FORMAT_R16UI = 38,
|
||||
GSK_SPV_IMAGE_FORMAT_R8UI = 39
|
||||
} GskSpvImageFormat;
|
||||
|
||||
typedef enum {
|
||||
GSK_SPV_IMAGE_CHANNEL_ORDER_R = 0,
|
||||
GSK_SPV_IMAGE_CHANNEL_ORDER_A = 1,
|
||||
GSK_SPV_IMAGE_CHANNEL_ORDER_RG = 2,
|
||||
GSK_SPV_IMAGE_CHANNEL_ORDER_RA = 3,
|
||||
GSK_SPV_IMAGE_CHANNEL_ORDER_RGB = 4,
|
||||
GSK_SPV_IMAGE_CHANNEL_ORDER_RGBA = 5,
|
||||
GSK_SPV_IMAGE_CHANNEL_ORDER_BGRA = 6,
|
||||
GSK_SPV_IMAGE_CHANNEL_ORDER_ARGB = 7,
|
||||
GSK_SPV_IMAGE_CHANNEL_ORDER_INTENSITY = 8,
|
||||
GSK_SPV_IMAGE_CHANNEL_ORDER_LUMINANCE = 9,
|
||||
GSK_SPV_IMAGE_CHANNEL_ORDER_RX = 10,
|
||||
GSK_SPV_IMAGE_CHANNEL_ORDER_R_GX = 11,
|
||||
GSK_SPV_IMAGE_CHANNEL_ORDER_RG_BX = 12,
|
||||
GSK_SPV_IMAGE_CHANNEL_ORDER_DEPTH = 13,
|
||||
GSK_SPV_IMAGE_CHANNEL_ORDER_DEPTH_STENCIL = 14,
|
||||
GSK_SPV_IMAGE_CHANNEL_ORDER_S_RGB = 15,
|
||||
GSK_SPV_IMAGE_CHANNEL_ORDER_S_RG_BX = 16,
|
||||
GSK_SPV_IMAGE_CHANNEL_ORDER_S_RGBA = 17,
|
||||
GSK_SPV_IMAGE_CHANNEL_ORDER_S_BGRA = 18,
|
||||
GSK_SPV_IMAGE_CHANNEL_ORDER_ABGR = 19
|
||||
} GskSpvImageChannelOrder;
|
||||
|
||||
typedef enum {
|
||||
GSK_SPV_IMAGE_CHANNEL_DATA_TYPE_SNORM_INT8 = 0,
|
||||
GSK_SPV_IMAGE_CHANNEL_DATA_TYPE_SNORM_INT16 = 1,
|
||||
GSK_SPV_IMAGE_CHANNEL_DATA_TYPE_UNORM_INT8 = 2,
|
||||
GSK_SPV_IMAGE_CHANNEL_DATA_TYPE_UNORM_INT16 = 3,
|
||||
GSK_SPV_IMAGE_CHANNEL_DATA_TYPE_UNORM_SHORT565 = 4,
|
||||
GSK_SPV_IMAGE_CHANNEL_DATA_TYPE_UNORM_SHORT555 = 5,
|
||||
GSK_SPV_IMAGE_CHANNEL_DATA_TYPE_UNORM_INT101010 = 6,
|
||||
GSK_SPV_IMAGE_CHANNEL_DATA_TYPE_SIGNED_INT8 = 7,
|
||||
GSK_SPV_IMAGE_CHANNEL_DATA_TYPE_SIGNED_INT16 = 8,
|
||||
GSK_SPV_IMAGE_CHANNEL_DATA_TYPE_SIGNED_INT32 = 9,
|
||||
GSK_SPV_IMAGE_CHANNEL_DATA_TYPE_UNSIGNED_INT8 = 10,
|
||||
GSK_SPV_IMAGE_CHANNEL_DATA_TYPE_UNSIGNED_INT16 = 11,
|
||||
GSK_SPV_IMAGE_CHANNEL_DATA_TYPE_UNSIGNED_INT32 = 12,
|
||||
GSK_SPV_IMAGE_CHANNEL_DATA_TYPE_HALF_FLOAT = 13,
|
||||
GSK_SPV_IMAGE_CHANNEL_DATA_TYPE_FLOAT = 14,
|
||||
GSK_SPV_IMAGE_CHANNEL_DATA_TYPE_UNORM_INT24 = 15,
|
||||
GSK_SPV_IMAGE_CHANNEL_DATA_TYPE_UNORM_INT101010_2 = 16
|
||||
} GskSpvImageChannelDataType;
|
||||
|
||||
typedef enum {
|
||||
GSK_SPV_FP_ROUNDING_MODE_RTE = 0,
|
||||
GSK_SPV_FP_ROUNDING_MODE_RTZ = 1,
|
||||
GSK_SPV_FP_ROUNDING_MODE_RTP = 2,
|
||||
GSK_SPV_FP_ROUNDING_MODE_RTN = 3
|
||||
} GskSpvFPRoundingMode;
|
||||
|
||||
typedef enum {
|
||||
GSK_SPV_LINKAGE_TYPE_EXPORT = 0,
|
||||
GSK_SPV_LINKAGE_TYPE_IMPORT = 1
|
||||
} GskSpvLinkageType;
|
||||
|
||||
typedef enum {
|
||||
GSK_SPV_ACCESS_QUALIFIER_READ_ONLY = 0,
|
||||
GSK_SPV_ACCESS_QUALIFIER_WRITE_ONLY = 1,
|
||||
GSK_SPV_ACCESS_QUALIFIER_READ_WRITE = 2
|
||||
} GskSpvAccessQualifier;
|
||||
|
||||
typedef enum {
|
||||
GSK_SPV_FUNCTION_PARAMETER_ATTRIBUTE_ZEXT = 0,
|
||||
GSK_SPV_FUNCTION_PARAMETER_ATTRIBUTE_SEXT = 1,
|
||||
GSK_SPV_FUNCTION_PARAMETER_ATTRIBUTE_BY_VAL = 2,
|
||||
GSK_SPV_FUNCTION_PARAMETER_ATTRIBUTE_SRET = 3,
|
||||
GSK_SPV_FUNCTION_PARAMETER_ATTRIBUTE_NO_ALIAS = 4,
|
||||
GSK_SPV_FUNCTION_PARAMETER_ATTRIBUTE_NO_CAPTURE = 5,
|
||||
GSK_SPV_FUNCTION_PARAMETER_ATTRIBUTE_NO_WRITE = 6,
|
||||
GSK_SPV_FUNCTION_PARAMETER_ATTRIBUTE_NO_READ_WRITE = 7
|
||||
} GskSpvFunctionParameterAttribute;
|
||||
|
||||
typedef enum {
|
||||
GSK_SPV_DECORATION_RELAXED_PRECISION = 0,
|
||||
GSK_SPV_DECORATION_SPEC_ID = 1,
|
||||
GSK_SPV_DECORATION_BLOCK = 2,
|
||||
GSK_SPV_DECORATION_BUFFER_BLOCK = 3,
|
||||
GSK_SPV_DECORATION_ROW_MAJOR = 4,
|
||||
GSK_SPV_DECORATION_COL_MAJOR = 5,
|
||||
GSK_SPV_DECORATION_ARRAY_STRIDE = 6,
|
||||
GSK_SPV_DECORATION_MATRIX_STRIDE = 7,
|
||||
GSK_SPV_DECORATION_GLSL_SHARED = 8,
|
||||
GSK_SPV_DECORATION_GLSL_PACKED = 9,
|
||||
GSK_SPV_DECORATION_C_PACKED = 10,
|
||||
GSK_SPV_DECORATION_BUILT_IN = 11,
|
||||
GSK_SPV_DECORATION_NO_PERSPECTIVE = 13,
|
||||
GSK_SPV_DECORATION_FLAT = 14,
|
||||
GSK_SPV_DECORATION_PATCH = 15,
|
||||
GSK_SPV_DECORATION_CENTROID = 16,
|
||||
GSK_SPV_DECORATION_SAMPLE = 17,
|
||||
GSK_SPV_DECORATION_INVARIANT = 18,
|
||||
GSK_SPV_DECORATION_RESTRICT = 19,
|
||||
GSK_SPV_DECORATION_ALIASED = 20,
|
||||
GSK_SPV_DECORATION_VOLATILE = 21,
|
||||
GSK_SPV_DECORATION_CONSTANT = 22,
|
||||
GSK_SPV_DECORATION_COHERENT = 23,
|
||||
GSK_SPV_DECORATION_NON_WRITABLE = 24,
|
||||
GSK_SPV_DECORATION_NON_READABLE = 25,
|
||||
GSK_SPV_DECORATION_UNIFORM = 26,
|
||||
GSK_SPV_DECORATION_SATURATED_CONVERSION = 28,
|
||||
GSK_SPV_DECORATION_STREAM = 29,
|
||||
GSK_SPV_DECORATION_LOCATION = 30,
|
||||
GSK_SPV_DECORATION_COMPONENT = 31,
|
||||
GSK_SPV_DECORATION_INDEX = 32,
|
||||
GSK_SPV_DECORATION_BINDING = 33,
|
||||
GSK_SPV_DECORATION_DESCRIPTOR_SET = 34,
|
||||
GSK_SPV_DECORATION_OFFSET = 35,
|
||||
GSK_SPV_DECORATION_XFB_BUFFER = 36,
|
||||
GSK_SPV_DECORATION_XFB_STRIDE = 37,
|
||||
GSK_SPV_DECORATION_FUNC_PARAM_ATTR = 38,
|
||||
GSK_SPV_DECORATION_FP_ROUNDING_MODE = 39,
|
||||
GSK_SPV_DECORATION_FP_FAST_MATH_MODE = 40,
|
||||
GSK_SPV_DECORATION_LINKAGE_ATTRIBUTES = 41,
|
||||
GSK_SPV_DECORATION_NO_CONTRACTION = 42,
|
||||
GSK_SPV_DECORATION_INPUT_ATTACHMENT_INDEX = 43,
|
||||
GSK_SPV_DECORATION_ALIGNMENT = 44,
|
||||
GSK_SPV_DECORATION_EXPLICIT_INTERP_AMD = 4999,
|
||||
GSK_SPV_DECORATION_OVERRIDE_COVERAGE_NV = 5248,
|
||||
GSK_SPV_DECORATION_PASSTHROUGH_NV = 5250,
|
||||
GSK_SPV_DECORATION_VIEWPORT_RELATIVE_NV = 5252,
|
||||
GSK_SPV_DECORATION_SECONDARY_VIEWPORT_RELATIVE_NV = 5256
|
||||
} GskSpvDecoration;
|
||||
|
||||
typedef enum {
|
||||
GSK_SPV_BUILT_IN_POSITION = 0,
|
||||
GSK_SPV_BUILT_IN_POINT_SIZE = 1,
|
||||
GSK_SPV_BUILT_IN_CLIP_DISTANCE = 3,
|
||||
GSK_SPV_BUILT_IN_CULL_DISTANCE = 4,
|
||||
GSK_SPV_BUILT_IN_VERTEX_ID = 5,
|
||||
GSK_SPV_BUILT_IN_INSTANCE_ID = 6,
|
||||
GSK_SPV_BUILT_IN_PRIMITIVE_ID = 7,
|
||||
GSK_SPV_BUILT_IN_INVOCATION_ID = 8,
|
||||
GSK_SPV_BUILT_IN_LAYER = 9,
|
||||
GSK_SPV_BUILT_IN_VIEWPORT_INDEX = 10,
|
||||
GSK_SPV_BUILT_IN_TESS_LEVEL_OUTER = 11,
|
||||
GSK_SPV_BUILT_IN_TESS_LEVEL_INNER = 12,
|
||||
GSK_SPV_BUILT_IN_TESS_COORD = 13,
|
||||
GSK_SPV_BUILT_IN_PATCH_VERTICES = 14,
|
||||
GSK_SPV_BUILT_IN_FRAG_COORD = 15,
|
||||
GSK_SPV_BUILT_IN_POINT_COORD = 16,
|
||||
GSK_SPV_BUILT_IN_FRONT_FACING = 17,
|
||||
GSK_SPV_BUILT_IN_SAMPLE_ID = 18,
|
||||
GSK_SPV_BUILT_IN_SAMPLE_POSITION = 19,
|
||||
GSK_SPV_BUILT_IN_SAMPLE_MASK = 20,
|
||||
GSK_SPV_BUILT_IN_FRAG_DEPTH = 22,
|
||||
GSK_SPV_BUILT_IN_HELPER_INVOCATION = 23,
|
||||
GSK_SPV_BUILT_IN_NUM_WORKGROUPS = 24,
|
||||
GSK_SPV_BUILT_IN_WORKGROUP_SIZE = 25,
|
||||
GSK_SPV_BUILT_IN_WORKGROUP_ID = 26,
|
||||
GSK_SPV_BUILT_IN_LOCAL_INVOCATION_ID = 27,
|
||||
GSK_SPV_BUILT_IN_GLOBAL_INVOCATION_ID = 28,
|
||||
GSK_SPV_BUILT_IN_LOCAL_INVOCATION_INDEX = 29,
|
||||
GSK_SPV_BUILT_IN_WORK_DIM = 30,
|
||||
GSK_SPV_BUILT_IN_GLOBAL_SIZE = 31,
|
||||
GSK_SPV_BUILT_IN_ENQUEUED_WORKGROUP_SIZE = 32,
|
||||
GSK_SPV_BUILT_IN_GLOBAL_OFFSET = 33,
|
||||
GSK_SPV_BUILT_IN_GLOBAL_LINEAR_ID = 34,
|
||||
GSK_SPV_BUILT_IN_SUBGROUP_SIZE = 36,
|
||||
GSK_SPV_BUILT_IN_SUBGROUP_MAX_SIZE = 37,
|
||||
GSK_SPV_BUILT_IN_NUM_SUBGROUPS = 38,
|
||||
GSK_SPV_BUILT_IN_NUM_ENQUEUED_SUBGROUPS = 39,
|
||||
GSK_SPV_BUILT_IN_SUBGROUP_ID = 40,
|
||||
GSK_SPV_BUILT_IN_SUBGROUP_LOCAL_INVOCATION_ID = 41,
|
||||
GSK_SPV_BUILT_IN_VERTEX_INDEX = 42,
|
||||
GSK_SPV_BUILT_IN_INSTANCE_INDEX = 43,
|
||||
GSK_SPV_BUILT_IN_SUBGROUP_EQ_MASK_KHR = 4416,
|
||||
GSK_SPV_BUILT_IN_SUBGROUP_GE_MASK_KHR = 4417,
|
||||
GSK_SPV_BUILT_IN_SUBGROUP_GT_MASK_KHR = 4418,
|
||||
GSK_SPV_BUILT_IN_SUBGROUP_LE_MASK_KHR = 4419,
|
||||
GSK_SPV_BUILT_IN_SUBGROUP_LT_MASK_KHR = 4420,
|
||||
GSK_SPV_BUILT_IN_BASE_VERTEX = 4424,
|
||||
GSK_SPV_BUILT_IN_BASE_INSTANCE = 4425,
|
||||
GSK_SPV_BUILT_IN_DRAW_INDEX = 4426,
|
||||
GSK_SPV_BUILT_IN_DEVICE_INDEX = 4438,
|
||||
GSK_SPV_BUILT_IN_VIEW_INDEX = 4440,
|
||||
GSK_SPV_BUILT_IN_BARY_COORD_NO_PERSP_AMD = 4992,
|
||||
GSK_SPV_BUILT_IN_BARY_COORD_NO_PERSP_CENTROID_AMD = 4993,
|
||||
GSK_SPV_BUILT_IN_BARY_COORD_NO_PERSP_SAMPLE_AMD = 4994,
|
||||
GSK_SPV_BUILT_IN_BARY_COORD_SMOOTH_AMD = 4995,
|
||||
GSK_SPV_BUILT_IN_BARY_COORD_SMOOTH_CENTROID_AMD = 4996,
|
||||
GSK_SPV_BUILT_IN_BARY_COORD_SMOOTH_SAMPLE_AMD = 4997,
|
||||
GSK_SPV_BUILT_IN_BARY_COORD_PULL_MODEL_AMD = 4998,
|
||||
GSK_SPV_BUILT_IN_FRAG_STENCIL_REF_EXT = 5014,
|
||||
GSK_SPV_BUILT_IN_VIEWPORT_MASK_NV = 5253,
|
||||
GSK_SPV_BUILT_IN_SECONDARY_POSITION_NV = 5257,
|
||||
GSK_SPV_BUILT_IN_SECONDARY_VIEWPORT_MASK_NV = 5258,
|
||||
GSK_SPV_BUILT_IN_POSITION_PER_VIEW_NV = 5261,
|
||||
GSK_SPV_BUILT_IN_VIEWPORT_MASK_PER_VIEW_NV = 5262
|
||||
} GskSpvBuiltIn;
|
||||
|
||||
typedef enum {
|
||||
GSK_SPV_SCOPE_CROSS_DEVICE = 0,
|
||||
GSK_SPV_SCOPE_DEVICE = 1,
|
||||
GSK_SPV_SCOPE_WORKGROUP = 2,
|
||||
GSK_SPV_SCOPE_SUBGROUP = 3,
|
||||
GSK_SPV_SCOPE_INVOCATION = 4
|
||||
} GskSpvScope;
|
||||
|
||||
typedef enum {
|
||||
GSK_SPV_GROUP_OPERATION_REDUCE = 0,
|
||||
GSK_SPV_GROUP_OPERATION_INCLUSIVE_SCAN = 1,
|
||||
GSK_SPV_GROUP_OPERATION_EXCLUSIVE_SCAN = 2
|
||||
} GskSpvGroupOperation;
|
||||
|
||||
typedef enum {
|
||||
GSK_SPV_KERNEL_ENQUEUE_FLAGS_NO_WAIT = 0,
|
||||
GSK_SPV_KERNEL_ENQUEUE_FLAGS_WAIT_KERNEL = 1,
|
||||
GSK_SPV_KERNEL_ENQUEUE_FLAGS_WAIT_WORK_GROUP = 2
|
||||
} GskSpvKernelEnqueueFlags;
|
||||
|
||||
typedef enum {
|
||||
GSK_SPV_CAPABILITY_MATRIX = 0,
|
||||
GSK_SPV_CAPABILITY_SHADER = 1,
|
||||
GSK_SPV_CAPABILITY_GEOMETRY = 2,
|
||||
GSK_SPV_CAPABILITY_TESSELLATION = 3,
|
||||
GSK_SPV_CAPABILITY_ADDRESSES = 4,
|
||||
GSK_SPV_CAPABILITY_LINKAGE = 5,
|
||||
GSK_SPV_CAPABILITY_KERNEL = 6,
|
||||
GSK_SPV_CAPABILITY_VECTOR16 = 7,
|
||||
GSK_SPV_CAPABILITY_FLOAT16_BUFFER = 8,
|
||||
GSK_SPV_CAPABILITY_FLOAT16 = 9,
|
||||
GSK_SPV_CAPABILITY_FLOAT64 = 10,
|
||||
GSK_SPV_CAPABILITY_INT64 = 11,
|
||||
GSK_SPV_CAPABILITY_INT64_ATOMICS = 12,
|
||||
GSK_SPV_CAPABILITY_IMAGE_BASIC = 13,
|
||||
GSK_SPV_CAPABILITY_IMAGE_READ_WRITE = 14,
|
||||
GSK_SPV_CAPABILITY_IMAGE_MIPMAP = 15,
|
||||
GSK_SPV_CAPABILITY_PIPES = 17,
|
||||
GSK_SPV_CAPABILITY_GROUPS = 18,
|
||||
GSK_SPV_CAPABILITY_DEVICE_ENQUEUE = 19,
|
||||
GSK_SPV_CAPABILITY_LITERAL_SAMPLER = 20,
|
||||
GSK_SPV_CAPABILITY_ATOMIC_STORAGE = 21,
|
||||
GSK_SPV_CAPABILITY_INT16 = 22,
|
||||
GSK_SPV_CAPABILITY_TESSELLATION_POINT_SIZE = 23,
|
||||
GSK_SPV_CAPABILITY_GEOMETRY_POINT_SIZE = 24,
|
||||
GSK_SPV_CAPABILITY_IMAGE_GATHER_EXTENDED = 25,
|
||||
GSK_SPV_CAPABILITY_STORAGE_IMAGE_MULTISAMPLE = 27,
|
||||
GSK_SPV_CAPABILITY_UNIFORM_BUFFER_ARRAY_DYNAMIC_INDEXING = 28,
|
||||
GSK_SPV_CAPABILITY_SAMPLED_IMAGE_ARRAY_DYNAMIC_INDEXING = 29,
|
||||
GSK_SPV_CAPABILITY_STORAGE_BUFFER_ARRAY_DYNAMIC_INDEXING = 30,
|
||||
GSK_SPV_CAPABILITY_STORAGE_IMAGE_ARRAY_DYNAMIC_INDEXING = 31,
|
||||
GSK_SPV_CAPABILITY_CLIP_DISTANCE = 32,
|
||||
GSK_SPV_CAPABILITY_CULL_DISTANCE = 33,
|
||||
GSK_SPV_CAPABILITY_IMAGE_CUBE_ARRAY = 34,
|
||||
GSK_SPV_CAPABILITY_SAMPLE_RATE_SHADING = 35,
|
||||
GSK_SPV_CAPABILITY_IMAGE_RECT = 36,
|
||||
GSK_SPV_CAPABILITY_SAMPLED_RECT = 37,
|
||||
GSK_SPV_CAPABILITY_GENERIC_POINTER = 38,
|
||||
GSK_SPV_CAPABILITY_INT8 = 39,
|
||||
GSK_SPV_CAPABILITY_INPUT_ATTACHMENT = 40,
|
||||
GSK_SPV_CAPABILITY_SPARSE_RESIDENCY = 41,
|
||||
GSK_SPV_CAPABILITY_MIN_LOD = 42,
|
||||
GSK_SPV_CAPABILITY_SAMPLED1_D = 43,
|
||||
GSK_SPV_CAPABILITY_IMAGE1_D = 44,
|
||||
GSK_SPV_CAPABILITY_SAMPLED_CUBE_ARRAY = 45,
|
||||
GSK_SPV_CAPABILITY_SAMPLED_BUFFER = 46,
|
||||
GSK_SPV_CAPABILITY_IMAGE_BUFFER = 47,
|
||||
GSK_SPV_CAPABILITY_IMAGE_MS_ARRAY = 48,
|
||||
GSK_SPV_CAPABILITY_STORAGE_IMAGE_EXTENDED_FORMATS = 49,
|
||||
GSK_SPV_CAPABILITY_IMAGE_QUERY = 50,
|
||||
GSK_SPV_CAPABILITY_DERIVATIVE_CONTROL = 51,
|
||||
GSK_SPV_CAPABILITY_INTERPOLATION_FUNCTION = 52,
|
||||
GSK_SPV_CAPABILITY_TRANSFORM_FEEDBACK = 53,
|
||||
GSK_SPV_CAPABILITY_GEOMETRY_STREAMS = 54,
|
||||
GSK_SPV_CAPABILITY_STORAGE_IMAGE_READ_WITHOUT_FORMAT = 55,
|
||||
GSK_SPV_CAPABILITY_STORAGE_IMAGE_WRITE_WITHOUT_FORMAT = 56,
|
||||
GSK_SPV_CAPABILITY_MULTI_VIEWPORT = 57,
|
||||
GSK_SPV_CAPABILITY_SUBGROUP_BALLOT_KHR = 4423,
|
||||
GSK_SPV_CAPABILITY_DRAW_PARAMETERS = 4427,
|
||||
GSK_SPV_CAPABILITY_SUBGROUP_VOTE_KHR = 4431,
|
||||
GSK_SPV_CAPABILITY_STORAGE_BUFFER16_BIT_ACCESS = 4433,
|
||||
GSK_SPV_CAPABILITY_STORAGE_UNIFORM_BUFFER_BLOCK16 = 4433,
|
||||
GSK_SPV_CAPABILITY_UNIFORM_AND_STORAGE_BUFFER16_BIT_ACCESS = 4434,
|
||||
GSK_SPV_CAPABILITY_STORAGE_UNIFORM16 = 4434,
|
||||
GSK_SPV_CAPABILITY_STORAGE_PUSH_CONSTANT16 = 4435,
|
||||
GSK_SPV_CAPABILITY_STORAGE_INPUT_OUTPUT16 = 4436,
|
||||
GSK_SPV_CAPABILITY_DEVICE_GROUP = 4437,
|
||||
GSK_SPV_CAPABILITY_MULTI_VIEW = 4439,
|
||||
GSK_SPV_CAPABILITY_VARIABLE_POINTERS_STORAGE_BUFFER = 4441,
|
||||
GSK_SPV_CAPABILITY_VARIABLE_POINTERS = 4442,
|
||||
GSK_SPV_CAPABILITY_ATOMIC_STORAGE_OPS = 4445,
|
||||
GSK_SPV_CAPABILITY_SAMPLE_MASK_POST_DEPTH_COVERAGE = 4447,
|
||||
GSK_SPV_CAPABILITY_IMAGE_GATHER_BIAS_LOD_AMD = 5009,
|
||||
GSK_SPV_CAPABILITY_FRAGMENT_MASK_AMD = 5010,
|
||||
GSK_SPV_CAPABILITY_STENCIL_EXPORT_EXT = 5013,
|
||||
GSK_SPV_CAPABILITY_IMAGE_READ_WRITE_LOD_AMD = 5015,
|
||||
GSK_SPV_CAPABILITY_SAMPLE_MASK_OVERRIDE_COVERAGE_NV = 5249,
|
||||
GSK_SPV_CAPABILITY_GEOMETRY_SHADER_PASSTHROUGH_NV = 5251,
|
||||
GSK_SPV_CAPABILITY_SHADER_VIEWPORT_INDEX_LAYER_EXT = 5254,
|
||||
GSK_SPV_CAPABILITY_SHADER_VIEWPORT_INDEX_LAYER_NV = 5254,
|
||||
GSK_SPV_CAPABILITY_SHADER_VIEWPORT_MASK_NV = 5255,
|
||||
GSK_SPV_CAPABILITY_SHADER_STEREO_VIEW_NV = 5259,
|
||||
GSK_SPV_CAPABILITY_PER_VIEW_ATTRIBUTES_NV = 5260
|
||||
} GskSpvCapability;
|
||||
|
||||
typedef enum {
|
||||
GSK_SPV_OP_NOP = 0,
|
||||
GSK_SPV_OP_UNDEF = 1,
|
||||
GSK_SPV_OP_SOURCE_CONTINUED = 2,
|
||||
GSK_SPV_OP_SOURCE = 3,
|
||||
GSK_SPV_OP_SOURCE_EXTENSION = 4,
|
||||
GSK_SPV_OP_NAME = 5,
|
||||
GSK_SPV_OP_MEMBER_NAME = 6,
|
||||
GSK_SPV_OP_STRING = 7,
|
||||
GSK_SPV_OP_LINE = 8,
|
||||
GSK_SPV_OP_EXTENSION = 10,
|
||||
GSK_SPV_OP_EXT_INST_IMPORT = 11,
|
||||
GSK_SPV_OP_EXT_INST = 12,
|
||||
GSK_SPV_OP_MEMORY_MODEL = 14,
|
||||
GSK_SPV_OP_ENTRY_POINT = 15,
|
||||
GSK_SPV_OP_EXECUTION_MODE = 16,
|
||||
GSK_SPV_OP_CAPABILITY = 17,
|
||||
GSK_SPV_OP_TYPE_VOID = 19,
|
||||
GSK_SPV_OP_TYPE_BOOL = 20,
|
||||
GSK_SPV_OP_TYPE_INT = 21,
|
||||
GSK_SPV_OP_TYPE_FLOAT = 22,
|
||||
GSK_SPV_OP_TYPE_VECTOR = 23,
|
||||
GSK_SPV_OP_TYPE_MATRIX = 24,
|
||||
GSK_SPV_OP_TYPE_IMAGE = 25,
|
||||
GSK_SPV_OP_TYPE_SAMPLER = 26,
|
||||
GSK_SPV_OP_TYPE_SAMPLED_IMAGE = 27,
|
||||
GSK_SPV_OP_TYPE_ARRAY = 28,
|
||||
GSK_SPV_OP_TYPE_RUNTIME_ARRAY = 29,
|
||||
GSK_SPV_OP_TYPE_STRUCT = 30,
|
||||
GSK_SPV_OP_TYPE_OPAQUE = 31,
|
||||
GSK_SPV_OP_TYPE_POINTER = 32,
|
||||
GSK_SPV_OP_TYPE_FUNCTION = 33,
|
||||
GSK_SPV_OP_TYPE_EVENT = 34,
|
||||
GSK_SPV_OP_TYPE_DEVICE_EVENT = 35,
|
||||
GSK_SPV_OP_TYPE_RESERVE_ID = 36,
|
||||
GSK_SPV_OP_TYPE_QUEUE = 37,
|
||||
GSK_SPV_OP_TYPE_PIPE = 38,
|
||||
GSK_SPV_OP_TYPE_FORWARD_POINTER = 39,
|
||||
GSK_SPV_OP_CONSTANT_TRUE = 41,
|
||||
GSK_SPV_OP_CONSTANT_FALSE = 42,
|
||||
GSK_SPV_OP_CONSTANT = 43,
|
||||
GSK_SPV_OP_CONSTANT_COMPOSITE = 44,
|
||||
GSK_SPV_OP_CONSTANT_SAMPLER = 45,
|
||||
GSK_SPV_OP_CONSTANT_NULL = 46,
|
||||
GSK_SPV_OP_SPEC_CONSTANT_TRUE = 48,
|
||||
GSK_SPV_OP_SPEC_CONSTANT_FALSE = 49,
|
||||
GSK_SPV_OP_SPEC_CONSTANT = 50,
|
||||
GSK_SPV_OP_SPEC_CONSTANT_COMPOSITE = 51,
|
||||
GSK_SPV_OP_SPEC_CONSTANT_OP = 52,
|
||||
GSK_SPV_OP_FUNCTION = 54,
|
||||
GSK_SPV_OP_FUNCTION_PARAMETER = 55,
|
||||
GSK_SPV_OP_FUNCTION_END = 56,
|
||||
GSK_SPV_OP_FUNCTION_CALL = 57,
|
||||
GSK_SPV_OP_VARIABLE = 59,
|
||||
GSK_SPV_OP_IMAGE_TEXEL_POINTER = 60,
|
||||
GSK_SPV_OP_LOAD = 61,
|
||||
GSK_SPV_OP_STORE = 62,
|
||||
GSK_SPV_OP_COPY_MEMORY = 63,
|
||||
GSK_SPV_OP_COPY_MEMORY_SIZED = 64,
|
||||
GSK_SPV_OP_ACCESS_CHAIN = 65,
|
||||
GSK_SPV_OP_IN_BOUNDS_ACCESS_CHAIN = 66,
|
||||
GSK_SPV_OP_PTR_ACCESS_CHAIN = 67,
|
||||
GSK_SPV_OP_ARRAY_LENGTH = 68,
|
||||
GSK_SPV_OP_GENERIC_PTR_MEM_SEMANTICS = 69,
|
||||
GSK_SPV_OP_IN_BOUNDS_PTR_ACCESS_CHAIN = 70,
|
||||
GSK_SPV_OP_DECORATE = 71,
|
||||
GSK_SPV_OP_MEMBER_DECORATE = 72,
|
||||
GSK_SPV_OP_DECORATION_GROUP = 73,
|
||||
GSK_SPV_OP_GROUP_DECORATE = 74,
|
||||
GSK_SPV_OP_GROUP_MEMBER_DECORATE = 75,
|
||||
GSK_SPV_OP_VECTOR_EXTRACT_DYNAMIC = 77,
|
||||
GSK_SPV_OP_VECTOR_INSERT_DYNAMIC = 78,
|
||||
GSK_SPV_OP_VECTOR_SHUFFLE = 79,
|
||||
GSK_SPV_OP_COMPOSITE_CONSTRUCT = 80,
|
||||
GSK_SPV_OP_COMPOSITE_EXTRACT = 81,
|
||||
GSK_SPV_OP_COMPOSITE_INSERT = 82,
|
||||
GSK_SPV_OP_COPY_OBJECT = 83,
|
||||
GSK_SPV_OP_TRANSPOSE = 84,
|
||||
GSK_SPV_OP_SAMPLED_IMAGE = 86,
|
||||
GSK_SPV_OP_IMAGE_SAMPLE_IMPLICIT_LOD = 87,
|
||||
GSK_SPV_OP_IMAGE_SAMPLE_EXPLICIT_LOD = 88,
|
||||
GSK_SPV_OP_IMAGE_SAMPLE_DREF_IMPLICIT_LOD = 89,
|
||||
GSK_SPV_OP_IMAGE_SAMPLE_DREF_EXPLICIT_LOD = 90,
|
||||
GSK_SPV_OP_IMAGE_SAMPLE_PROJ_IMPLICIT_LOD = 91,
|
||||
GSK_SPV_OP_IMAGE_SAMPLE_PROJ_EXPLICIT_LOD = 92,
|
||||
GSK_SPV_OP_IMAGE_SAMPLE_PROJ_DREF_IMPLICIT_LOD = 93,
|
||||
GSK_SPV_OP_IMAGE_SAMPLE_PROJ_DREF_EXPLICIT_LOD = 94,
|
||||
GSK_SPV_OP_IMAGE_FETCH = 95,
|
||||
GSK_SPV_OP_IMAGE_GATHER = 96,
|
||||
GSK_SPV_OP_IMAGE_DREF_GATHER = 97,
|
||||
GSK_SPV_OP_IMAGE_READ = 98,
|
||||
GSK_SPV_OP_IMAGE_WRITE = 99,
|
||||
GSK_SPV_OP_IMAGE = 100,
|
||||
GSK_SPV_OP_IMAGE_QUERY_FORMAT = 101,
|
||||
GSK_SPV_OP_IMAGE_QUERY_ORDER = 102,
|
||||
GSK_SPV_OP_IMAGE_QUERY_SIZE_LOD = 103,
|
||||
GSK_SPV_OP_IMAGE_QUERY_SIZE = 104,
|
||||
GSK_SPV_OP_IMAGE_QUERY_LOD = 105,
|
||||
GSK_SPV_OP_IMAGE_QUERY_LEVELS = 106,
|
||||
GSK_SPV_OP_IMAGE_QUERY_SAMPLES = 107,
|
||||
GSK_SPV_OP_CONVERT_F_TO_U = 109,
|
||||
GSK_SPV_OP_CONVERT_F_TO_S = 110,
|
||||
GSK_SPV_OP_CONVERT_S_TO_F = 111,
|
||||
GSK_SPV_OP_CONVERT_U_TO_F = 112,
|
||||
GSK_SPV_OP_U_CONVERT = 113,
|
||||
GSK_SPV_OP_S_CONVERT = 114,
|
||||
GSK_SPV_OP_F_CONVERT = 115,
|
||||
GSK_SPV_OP_QUANTIZE_TO_F16 = 116,
|
||||
GSK_SPV_OP_CONVERT_PTR_TO_U = 117,
|
||||
GSK_SPV_OP_SAT_CONVERT_S_TO_U = 118,
|
||||
GSK_SPV_OP_SAT_CONVERT_U_TO_S = 119,
|
||||
GSK_SPV_OP_CONVERT_U_TO_PTR = 120,
|
||||
GSK_SPV_OP_PTR_CAST_TO_GENERIC = 121,
|
||||
GSK_SPV_OP_GENERIC_CAST_TO_PTR = 122,
|
||||
GSK_SPV_OP_GENERIC_CAST_TO_PTR_EXPLICIT = 123,
|
||||
GSK_SPV_OP_BITCAST = 124,
|
||||
GSK_SPV_OP_S_NEGATE = 126,
|
||||
GSK_SPV_OP_F_NEGATE = 127,
|
||||
GSK_SPV_OP_I_ADD = 128,
|
||||
GSK_SPV_OP_F_ADD = 129,
|
||||
GSK_SPV_OP_I_SUB = 130,
|
||||
GSK_SPV_OP_F_SUB = 131,
|
||||
GSK_SPV_OP_I_MUL = 132,
|
||||
GSK_SPV_OP_F_MUL = 133,
|
||||
GSK_SPV_OP_U_DIV = 134,
|
||||
GSK_SPV_OP_S_DIV = 135,
|
||||
GSK_SPV_OP_F_DIV = 136,
|
||||
GSK_SPV_OP_U_MOD = 137,
|
||||
GSK_SPV_OP_S_REM = 138,
|
||||
GSK_SPV_OP_S_MOD = 139,
|
||||
GSK_SPV_OP_F_REM = 140,
|
||||
GSK_SPV_OP_F_MOD = 141,
|
||||
GSK_SPV_OP_VECTOR_TIMES_SCALAR = 142,
|
||||
GSK_SPV_OP_MATRIX_TIMES_SCALAR = 143,
|
||||
GSK_SPV_OP_VECTOR_TIMES_MATRIX = 144,
|
||||
GSK_SPV_OP_MATRIX_TIMES_VECTOR = 145,
|
||||
GSK_SPV_OP_MATRIX_TIMES_MATRIX = 146,
|
||||
GSK_SPV_OP_OUTER_PRODUCT = 147,
|
||||
GSK_SPV_OP_DOT = 148,
|
||||
GSK_SPV_OP_I_ADD_CARRY = 149,
|
||||
GSK_SPV_OP_I_SUB_BORROW = 150,
|
||||
GSK_SPV_OP_U_MUL_EXTENDED = 151,
|
||||
GSK_SPV_OP_S_MUL_EXTENDED = 152,
|
||||
GSK_SPV_OP_ANY = 154,
|
||||
GSK_SPV_OP_ALL = 155,
|
||||
GSK_SPV_OP_IS_NAN = 156,
|
||||
GSK_SPV_OP_IS_INF = 157,
|
||||
GSK_SPV_OP_IS_FINITE = 158,
|
||||
GSK_SPV_OP_IS_NORMAL = 159,
|
||||
GSK_SPV_OP_SIGN_BIT_SET = 160,
|
||||
GSK_SPV_OP_LESS_OR_GREATER = 161,
|
||||
GSK_SPV_OP_ORDERED = 162,
|
||||
GSK_SPV_OP_UNORDERED = 163,
|
||||
GSK_SPV_OP_LOGICAL_EQUAL = 164,
|
||||
GSK_SPV_OP_LOGICAL_NOT_EQUAL = 165,
|
||||
GSK_SPV_OP_LOGICAL_OR = 166,
|
||||
GSK_SPV_OP_LOGICAL_AND = 167,
|
||||
GSK_SPV_OP_LOGICAL_NOT = 168,
|
||||
GSK_SPV_OP_SELECT = 169,
|
||||
GSK_SPV_OP_I_EQUAL = 170,
|
||||
GSK_SPV_OP_I_NOT_EQUAL = 171,
|
||||
GSK_SPV_OP_U_GREATER_THAN = 172,
|
||||
GSK_SPV_OP_S_GREATER_THAN = 173,
|
||||
GSK_SPV_OP_U_GREATER_THAN_EQUAL = 174,
|
||||
GSK_SPV_OP_S_GREATER_THAN_EQUAL = 175,
|
||||
GSK_SPV_OP_U_LESS_THAN = 176,
|
||||
GSK_SPV_OP_S_LESS_THAN = 177,
|
||||
GSK_SPV_OP_U_LESS_THAN_EQUAL = 178,
|
||||
GSK_SPV_OP_S_LESS_THAN_EQUAL = 179,
|
||||
GSK_SPV_OP_F_ORD_EQUAL = 180,
|
||||
GSK_SPV_OP_F_UNORD_EQUAL = 181,
|
||||
GSK_SPV_OP_F_ORD_NOT_EQUAL = 182,
|
||||
GSK_SPV_OP_F_UNORD_NOT_EQUAL = 183,
|
||||
GSK_SPV_OP_F_ORD_LESS_THAN = 184,
|
||||
GSK_SPV_OP_F_UNORD_LESS_THAN = 185,
|
||||
GSK_SPV_OP_F_ORD_GREATER_THAN = 186,
|
||||
GSK_SPV_OP_F_UNORD_GREATER_THAN = 187,
|
||||
GSK_SPV_OP_F_ORD_LESS_THAN_EQUAL = 188,
|
||||
GSK_SPV_OP_F_UNORD_LESS_THAN_EQUAL = 189,
|
||||
GSK_SPV_OP_F_ORD_GREATER_THAN_EQUAL = 190,
|
||||
GSK_SPV_OP_F_UNORD_GREATER_THAN_EQUAL = 191,
|
||||
GSK_SPV_OP_SHIFT_RIGHT_LOGICAL = 194,
|
||||
GSK_SPV_OP_SHIFT_RIGHT_ARITHMETIC = 195,
|
||||
GSK_SPV_OP_SHIFT_LEFT_LOGICAL = 196,
|
||||
GSK_SPV_OP_BITWISE_OR = 197,
|
||||
GSK_SPV_OP_BITWISE_XOR = 198,
|
||||
GSK_SPV_OP_BITWISE_AND = 199,
|
||||
GSK_SPV_OP_NOT = 200,
|
||||
GSK_SPV_OP_BIT_FIELD_INSERT = 201,
|
||||
GSK_SPV_OP_BIT_FIELD_S_EXTRACT = 202,
|
||||
GSK_SPV_OP_BIT_FIELD_U_EXTRACT = 203,
|
||||
GSK_SPV_OP_BIT_REVERSE = 204,
|
||||
GSK_SPV_OP_BIT_COUNT = 205,
|
||||
GSK_SPV_OP_D_PDX = 207,
|
||||
GSK_SPV_OP_D_PDY = 208,
|
||||
GSK_SPV_OP_FWIDTH = 209,
|
||||
GSK_SPV_OP_D_PDX_FINE = 210,
|
||||
GSK_SPV_OP_D_PDY_FINE = 211,
|
||||
GSK_SPV_OP_FWIDTH_FINE = 212,
|
||||
GSK_SPV_OP_D_PDX_COARSE = 213,
|
||||
GSK_SPV_OP_D_PDY_COARSE = 214,
|
||||
GSK_SPV_OP_FWIDTH_COARSE = 215,
|
||||
GSK_SPV_OP_EMIT_VERTEX = 218,
|
||||
GSK_SPV_OP_END_PRIMITIVE = 219,
|
||||
GSK_SPV_OP_EMIT_STREAM_VERTEX = 220,
|
||||
GSK_SPV_OP_END_STREAM_PRIMITIVE = 221,
|
||||
GSK_SPV_OP_CONTROL_BARRIER = 224,
|
||||
GSK_SPV_OP_MEMORY_BARRIER = 225,
|
||||
GSK_SPV_OP_ATOMIC_LOAD = 227,
|
||||
GSK_SPV_OP_ATOMIC_STORE = 228,
|
||||
GSK_SPV_OP_ATOMIC_EXCHANGE = 229,
|
||||
GSK_SPV_OP_ATOMIC_COMPARE_EXCHANGE = 230,
|
||||
GSK_SPV_OP_ATOMIC_COMPARE_EXCHANGE_WEAK = 231,
|
||||
GSK_SPV_OP_ATOMIC_I_INCREMENT = 232,
|
||||
GSK_SPV_OP_ATOMIC_I_DECREMENT = 233,
|
||||
GSK_SPV_OP_ATOMIC_I_ADD = 234,
|
||||
GSK_SPV_OP_ATOMIC_I_SUB = 235,
|
||||
GSK_SPV_OP_ATOMIC_S_MIN = 236,
|
||||
GSK_SPV_OP_ATOMIC_U_MIN = 237,
|
||||
GSK_SPV_OP_ATOMIC_S_MAX = 238,
|
||||
GSK_SPV_OP_ATOMIC_U_MAX = 239,
|
||||
GSK_SPV_OP_ATOMIC_AND = 240,
|
||||
GSK_SPV_OP_ATOMIC_OR = 241,
|
||||
GSK_SPV_OP_ATOMIC_XOR = 242,
|
||||
GSK_SPV_OP_PHI = 245,
|
||||
GSK_SPV_OP_LOOP_MERGE = 246,
|
||||
GSK_SPV_OP_SELECTION_MERGE = 247,
|
||||
GSK_SPV_OP_LABEL = 248,
|
||||
GSK_SPV_OP_BRANCH = 249,
|
||||
GSK_SPV_OP_BRANCH_CONDITIONAL = 250,
|
||||
GSK_SPV_OP_SWITCH = 251,
|
||||
GSK_SPV_OP_KILL = 252,
|
||||
GSK_SPV_OP_RETURN = 253,
|
||||
GSK_SPV_OP_RETURN_VALUE = 254,
|
||||
GSK_SPV_OP_UNREACHABLE = 255,
|
||||
GSK_SPV_OP_LIFETIME_START = 256,
|
||||
GSK_SPV_OP_LIFETIME_STOP = 257,
|
||||
GSK_SPV_OP_GROUP_ASYNC_COPY = 259,
|
||||
GSK_SPV_OP_GROUP_WAIT_EVENTS = 260,
|
||||
GSK_SPV_OP_GROUP_ALL = 261,
|
||||
GSK_SPV_OP_GROUP_ANY = 262,
|
||||
GSK_SPV_OP_GROUP_BROADCAST = 263,
|
||||
GSK_SPV_OP_GROUP_I_ADD = 264,
|
||||
GSK_SPV_OP_GROUP_F_ADD = 265,
|
||||
GSK_SPV_OP_GROUP_F_MIN = 266,
|
||||
GSK_SPV_OP_GROUP_U_MIN = 267,
|
||||
GSK_SPV_OP_GROUP_S_MIN = 268,
|
||||
GSK_SPV_OP_GROUP_F_MAX = 269,
|
||||
GSK_SPV_OP_GROUP_U_MAX = 270,
|
||||
GSK_SPV_OP_GROUP_S_MAX = 271,
|
||||
GSK_SPV_OP_READ_PIPE = 274,
|
||||
GSK_SPV_OP_WRITE_PIPE = 275,
|
||||
GSK_SPV_OP_RESERVED_READ_PIPE = 276,
|
||||
GSK_SPV_OP_RESERVED_WRITE_PIPE = 277,
|
||||
GSK_SPV_OP_RESERVE_READ_PIPE_PACKETS = 278,
|
||||
GSK_SPV_OP_RESERVE_WRITE_PIPE_PACKETS = 279,
|
||||
GSK_SPV_OP_COMMIT_READ_PIPE = 280,
|
||||
GSK_SPV_OP_COMMIT_WRITE_PIPE = 281,
|
||||
GSK_SPV_OP_IS_VALID_RESERVE_ID = 282,
|
||||
GSK_SPV_OP_GET_NUM_PIPE_PACKETS = 283,
|
||||
GSK_SPV_OP_GET_MAX_PIPE_PACKETS = 284,
|
||||
GSK_SPV_OP_GROUP_RESERVE_READ_PIPE_PACKETS = 285,
|
||||
GSK_SPV_OP_GROUP_RESERVE_WRITE_PIPE_PACKETS = 286,
|
||||
GSK_SPV_OP_GROUP_COMMIT_READ_PIPE = 287,
|
||||
GSK_SPV_OP_GROUP_COMMIT_WRITE_PIPE = 288,
|
||||
GSK_SPV_OP_ENQUEUE_MARKER = 291,
|
||||
GSK_SPV_OP_ENQUEUE_KERNEL = 292,
|
||||
GSK_SPV_OP_GET_KERNEL_N_DRANGE_SUB_GROUP_COUNT = 293,
|
||||
GSK_SPV_OP_GET_KERNEL_N_DRANGE_MAX_SUB_GROUP_SIZE = 294,
|
||||
GSK_SPV_OP_GET_KERNEL_WORK_GROUP_SIZE = 295,
|
||||
GSK_SPV_OP_GET_KERNEL_PREFERRED_WORK_GROUP_SIZE_MULTIPLE = 296,
|
||||
GSK_SPV_OP_RETAIN_EVENT = 297,
|
||||
GSK_SPV_OP_RELEASE_EVENT = 298,
|
||||
GSK_SPV_OP_CREATE_USER_EVENT = 299,
|
||||
GSK_SPV_OP_IS_VALID_EVENT = 300,
|
||||
GSK_SPV_OP_SET_USER_EVENT_STATUS = 301,
|
||||
GSK_SPV_OP_CAPTURE_EVENT_PROFILING_INFO = 302,
|
||||
GSK_SPV_OP_GET_DEFAULT_QUEUE = 303,
|
||||
GSK_SPV_OP_BUILD_ND_RANGE = 304,
|
||||
GSK_SPV_OP_IMAGE_SPARSE_SAMPLE_IMPLICIT_LOD = 305,
|
||||
GSK_SPV_OP_IMAGE_SPARSE_SAMPLE_EXPLICIT_LOD = 306,
|
||||
GSK_SPV_OP_IMAGE_SPARSE_SAMPLE_DREF_IMPLICIT_LOD = 307,
|
||||
GSK_SPV_OP_IMAGE_SPARSE_SAMPLE_DREF_EXPLICIT_LOD = 308,
|
||||
GSK_SPV_OP_IMAGE_SPARSE_SAMPLE_PROJ_IMPLICIT_LOD = 309,
|
||||
GSK_SPV_OP_IMAGE_SPARSE_SAMPLE_PROJ_EXPLICIT_LOD = 310,
|
||||
GSK_SPV_OP_IMAGE_SPARSE_SAMPLE_PROJ_DREF_IMPLICIT_LOD = 311,
|
||||
GSK_SPV_OP_IMAGE_SPARSE_SAMPLE_PROJ_DREF_EXPLICIT_LOD = 312,
|
||||
GSK_SPV_OP_IMAGE_SPARSE_FETCH = 313,
|
||||
GSK_SPV_OP_IMAGE_SPARSE_GATHER = 314,
|
||||
GSK_SPV_OP_IMAGE_SPARSE_DREF_GATHER = 315,
|
||||
GSK_SPV_OP_IMAGE_SPARSE_TEXELS_RESIDENT = 316,
|
||||
GSK_SPV_OP_NO_LINE = 317,
|
||||
GSK_SPV_OP_ATOMIC_FLAG_TEST_AND_SET = 318,
|
||||
GSK_SPV_OP_ATOMIC_FLAG_CLEAR = 319,
|
||||
GSK_SPV_OP_IMAGE_SPARSE_READ = 320,
|
||||
GSK_SPV_OP_SUBGROUP_BALLOT_KHR = 4421,
|
||||
GSK_SPV_OP_SUBGROUP_FIRST_INVOCATION_KHR = 4422,
|
||||
GSK_SPV_OP_SUBGROUP_ALL_KHR = 4428,
|
||||
GSK_SPV_OP_SUBGROUP_ANY_KHR = 4429,
|
||||
GSK_SPV_OP_SUBGROUP_ALL_EQUAL_KHR = 4430,
|
||||
GSK_SPV_OP_SUBGROUP_READ_INVOCATION_KHR = 4432,
|
||||
GSK_SPV_OP_GROUP_I_ADD_NON_UNIFORM_AMD = 5000,
|
||||
GSK_SPV_OP_GROUP_F_ADD_NON_UNIFORM_AMD = 5001,
|
||||
GSK_SPV_OP_GROUP_F_MIN_NON_UNIFORM_AMD = 5002,
|
||||
GSK_SPV_OP_GROUP_U_MIN_NON_UNIFORM_AMD = 5003,
|
||||
GSK_SPV_OP_GROUP_S_MIN_NON_UNIFORM_AMD = 5004,
|
||||
GSK_SPV_OP_GROUP_F_MAX_NON_UNIFORM_AMD = 5005,
|
||||
GSK_SPV_OP_GROUP_U_MAX_NON_UNIFORM_AMD = 5006,
|
||||
GSK_SPV_OP_GROUP_S_MAX_NON_UNIFORM_AMD = 5007,
|
||||
GSK_SPV_OP_FRAGMENT_MASK_FETCH_AMD = 5011,
|
||||
GSK_SPV_OP_FRAGMENT_FETCH_AMD = 5012
|
||||
} GskSpvOpcode;
|
||||
|
||||
#endif /* __GSK_SPV_ENUMS_H__ */
|
||||
@@ -106,34 +106,21 @@ gsk_spv_writer_unref (GskSpvWriter *writer)
|
||||
static void
|
||||
gsk_spv_writer_write_header (GskSpvWriter *writer)
|
||||
{
|
||||
guchar instruction_set[] = "\0\0\0\0GLSL.std.450\0\0\0\0";
|
||||
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_HEADER,
|
||||
2, GSK_SPV_OP_CAPABILITY,
|
||||
(guint32[1]) { GSK_SPV_CAPABILITY_SHADER });
|
||||
*(guint32 *) instruction_set = 1;
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_HEADER,
|
||||
1 + sizeof (instruction_set) / 4, GSK_SPV_OP_EXT_INST_IMPORT,
|
||||
(guint32 *) instruction_set);
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_HEADER,
|
||||
3, GSK_SPV_OP_MEMORY_MODEL,
|
||||
(guint32[2]) { GSK_SPV_ADDRESSING_LOGICAL,
|
||||
GSK_SPV_MEMORY_GLSL450 });
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_HEADER,
|
||||
5, GSK_SPV_OP_ENTRY_POINT,
|
||||
(guint32[4]) { GSK_SPV_EXECUTION_MODEL_FRAGMENT,
|
||||
writer->entry_point,
|
||||
STRING ("main", 0),
|
||||
0 });
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_HEADER,
|
||||
3, GSK_SPV_OP_EXECUTION_MODE,
|
||||
(guint32[4]) { writer->entry_point,
|
||||
GSK_SPV_EXECUTION_MODE_ORIGIN_UPPER_LEFT });
|
||||
gsk_spv_writer_capability (writer, GSK_SPV_CAPABILITY_SHADER);
|
||||
gsk_spv_writer_ext_inst_import (writer,
|
||||
"GLSL.std.450");
|
||||
gsk_spv_writer_memory_model (writer,
|
||||
GSK_SPV_ADDRESSING_MODEL_LOGICAL,
|
||||
GSK_SPV_MEMORY_MODEL_GLSL450);
|
||||
gsk_spv_writer_entry_point (writer,
|
||||
GSK_SPV_EXECUTION_MODEL_FRAGMENT,
|
||||
writer->entry_point,
|
||||
"main",
|
||||
NULL,
|
||||
0);
|
||||
gsk_spv_writer_execution_mode (writer,
|
||||
writer->entry_point,
|
||||
GSK_SPV_EXECUTION_MODE_ORIGIN_UPPER_LEFT);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -288,7 +275,7 @@ gsk_spv_writer_get_id_for_variable (GskSpvWriter *writer,
|
||||
}
|
||||
|
||||
guint32
|
||||
gsk_spv_writer_next_id (GskSpvWriter *writer)
|
||||
gsk_spv_writer_make_id (GskSpvWriter *writer)
|
||||
{
|
||||
writer->last_id++;
|
||||
|
||||
@@ -302,18 +289,11 @@ gsk_spv_writer_set_entry_point (GskSpvWriter *writer,
|
||||
writer->entry_point = entry_point;
|
||||
}
|
||||
|
||||
void
|
||||
gsk_spv_writer_add (GskSpvWriter *writer,
|
||||
GskSpvWriterSection section,
|
||||
guint16 word_count,
|
||||
guint16 opcode,
|
||||
guint32 *words)
|
||||
GArray *
|
||||
gsk_spv_writer_get_bytes (GskSpvWriter *writer,
|
||||
GskSpvWriterSection section)
|
||||
{
|
||||
guint32 word;
|
||||
|
||||
word = word_count << 16 | opcode;
|
||||
g_array_append_val (writer->code[section], word);
|
||||
g_array_append_vals (writer->code[section], words, word_count - 1);
|
||||
return writer->code[section];
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -329,10 +309,10 @@ copy_8_bytes (gpointer dest, gpointer src)
|
||||
}
|
||||
|
||||
guint32
|
||||
gsk_spv_writer_add_conversion (GskSpvWriter *writer,
|
||||
guint32 id,
|
||||
GskSlType *type,
|
||||
GskSlType *new_type)
|
||||
gsk_spv_writer_convert (GskSpvWriter *writer,
|
||||
guint32 id,
|
||||
GskSlType *type,
|
||||
GskSlType *new_type)
|
||||
{
|
||||
GskSlScalarType scalar = gsk_sl_type_get_scalar_type (type);
|
||||
GskSlScalarType new_scalar = gsk_sl_type_get_scalar_type (new_type);
|
||||
@@ -344,7 +324,6 @@ gsk_spv_writer_add_conversion (GskSpvWriter *writer,
|
||||
gsk_sl_type_is_vector (type))
|
||||
{
|
||||
GskSlValue *value;
|
||||
guint32 result_type_id, result_id;
|
||||
guint32 true_id, false_id, zero_id;
|
||||
|
||||
switch (new_scalar)
|
||||
@@ -360,27 +339,14 @@ gsk_spv_writer_add_conversion (GskSpvWriter *writer,
|
||||
{
|
||||
case GSK_SL_INT:
|
||||
case GSK_SL_UINT:
|
||||
result_type_id = gsk_spv_writer_get_id_for_type (writer, new_type);
|
||||
result_id = gsk_spv_writer_next_id (writer);
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_CODE,
|
||||
4, GSK_SPV_OP_BITCAST,
|
||||
(guint32[3]) { result_type_id,
|
||||
result_id,
|
||||
id });
|
||||
return result_id;
|
||||
return gsk_spv_writer_bitcast (writer, new_type, id);
|
||||
|
||||
case GSK_SL_FLOAT:
|
||||
case GSK_SL_DOUBLE:
|
||||
result_type_id = gsk_spv_writer_get_id_for_type (writer, new_type);
|
||||
result_id = gsk_spv_writer_next_id (writer);
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_CODE,
|
||||
4, new_scalar == GSK_SL_UINT ? GSK_SPV_OP_CONVERT_F_TO_U : GSK_SPV_OP_CONVERT_F_TO_S,
|
||||
(guint32[3]) { result_type_id,
|
||||
result_id,
|
||||
id });
|
||||
return result_id;
|
||||
if (new_scalar == GSK_SL_UINT)
|
||||
return gsk_spv_writer_convert_f_to_u (writer, new_type, id);
|
||||
else
|
||||
return gsk_spv_writer_convert_f_to_s (writer, new_type, id);
|
||||
|
||||
case GSK_SL_BOOL:
|
||||
value = gsk_sl_value_new (new_type);
|
||||
@@ -388,17 +354,7 @@ gsk_spv_writer_add_conversion (GskSpvWriter *writer,
|
||||
gsk_sl_value_componentwise (value, copy_4_bytes, &(gint32) { 1 });
|
||||
true_id = gsk_spv_writer_get_id_for_value (writer, value);
|
||||
gsk_sl_value_free (value);
|
||||
result_type_id = gsk_spv_writer_get_id_for_type (writer, new_type);
|
||||
result_id = gsk_spv_writer_next_id (writer);
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_CODE,
|
||||
6, GSK_SPV_OP_SELECT,
|
||||
(guint32[5]) { result_type_id,
|
||||
result_id,
|
||||
id,
|
||||
true_id,
|
||||
false_id });
|
||||
return result_id;
|
||||
return gsk_spv_writer_select (writer, new_type, id, true_id, false_id);
|
||||
|
||||
case GSK_SL_VOID:
|
||||
default:
|
||||
@@ -412,38 +368,14 @@ gsk_spv_writer_add_conversion (GskSpvWriter *writer,
|
||||
switch (scalar)
|
||||
{
|
||||
case GSK_SL_INT:
|
||||
result_type_id = gsk_spv_writer_get_id_for_type (writer, new_type);
|
||||
result_id = gsk_spv_writer_next_id (writer);
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_CODE,
|
||||
4, GSK_SPV_OP_CONVERT_S_TO_F,
|
||||
(guint32[3]) { result_type_id,
|
||||
result_id,
|
||||
id });
|
||||
return result_id;
|
||||
return gsk_spv_writer_convert_s_to_f (writer, new_type, id);
|
||||
|
||||
case GSK_SL_UINT:
|
||||
result_type_id = gsk_spv_writer_get_id_for_type (writer, new_type);
|
||||
result_id = gsk_spv_writer_next_id (writer);
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_CODE,
|
||||
4, GSK_SPV_OP_CONVERT_U_TO_F,
|
||||
(guint32[3]) { result_type_id,
|
||||
result_id,
|
||||
id });
|
||||
return result_id;
|
||||
return gsk_spv_writer_convert_u_to_f (writer, new_type, id);
|
||||
|
||||
case GSK_SL_FLOAT:
|
||||
case GSK_SL_DOUBLE:
|
||||
result_type_id = gsk_spv_writer_get_id_for_type (writer, new_type);
|
||||
result_id = gsk_spv_writer_next_id (writer);
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_CODE,
|
||||
4, GSK_SPV_OP_F_CONVERT,
|
||||
(guint32[3]) { result_type_id,
|
||||
result_id,
|
||||
id });
|
||||
return result_id;
|
||||
return gsk_spv_writer_f_convert (writer, new_type, id);
|
||||
|
||||
case GSK_SL_BOOL:
|
||||
value = gsk_sl_value_new (new_type);
|
||||
@@ -454,17 +386,11 @@ gsk_spv_writer_add_conversion (GskSpvWriter *writer,
|
||||
gsk_sl_value_componentwise (value, copy_4_bytes, &(float) { 1 });
|
||||
true_id = gsk_spv_writer_get_id_for_value (writer, value);
|
||||
gsk_sl_value_free (value);
|
||||
result_type_id = gsk_spv_writer_get_id_for_type (writer, new_type);
|
||||
result_id = gsk_spv_writer_next_id (writer);
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_CODE,
|
||||
6, GSK_SPV_OP_SELECT,
|
||||
(guint32[5]) { result_type_id,
|
||||
result_id,
|
||||
id,
|
||||
true_id,
|
||||
false_id });
|
||||
return result_id;
|
||||
return gsk_spv_writer_select (writer,
|
||||
new_type,
|
||||
id,
|
||||
true_id,
|
||||
false_id);
|
||||
|
||||
case GSK_SL_VOID:
|
||||
default:
|
||||
@@ -481,32 +407,14 @@ gsk_spv_writer_add_conversion (GskSpvWriter *writer,
|
||||
value = gsk_sl_value_new (new_type);
|
||||
zero_id = gsk_spv_writer_get_id_for_value (writer, value);
|
||||
gsk_sl_value_free (value);
|
||||
result_type_id = gsk_spv_writer_get_id_for_type (writer, new_type);
|
||||
result_id = gsk_spv_writer_next_id (writer);
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_CODE,
|
||||
5, GSK_SPV_OP_I_NOT_EQUAL,
|
||||
(guint32[4]) { result_type_id,
|
||||
result_id,
|
||||
id,
|
||||
zero_id });
|
||||
return result_id;
|
||||
return gsk_spv_writer_i_not_equal (writer, new_type, id, zero_id);
|
||||
|
||||
case GSK_SL_FLOAT:
|
||||
case GSK_SL_DOUBLE:
|
||||
value = gsk_sl_value_new (new_type);
|
||||
zero_id = gsk_spv_writer_get_id_for_value (writer, value);
|
||||
gsk_sl_value_free (value);
|
||||
result_type_id = gsk_spv_writer_get_id_for_type (writer, new_type);
|
||||
result_id = gsk_spv_writer_next_id (writer);
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_CODE,
|
||||
5, GSK_SPV_OP_F_ORD_NOT_EQUAL,
|
||||
(guint32[4]) { result_type_id,
|
||||
result_id,
|
||||
id,
|
||||
zero_id });
|
||||
return result_id;
|
||||
return gsk_spv_writer_f_ord_not_equal (writer, new_type, id, zero_id);
|
||||
|
||||
case GSK_SL_BOOL:
|
||||
case GSK_SL_VOID:
|
||||
@@ -522,32 +430,17 @@ gsk_spv_writer_add_conversion (GskSpvWriter *writer,
|
||||
{
|
||||
GskSlType *row_type, *new_row_type;
|
||||
guint i, n = gsk_sl_type_get_length (type);
|
||||
guint32 ids[n + 2], row_id;
|
||||
guint32 ids[n];
|
||||
|
||||
row_type = gsk_sl_type_get_index_type (type);
|
||||
new_row_type = gsk_sl_type_get_index_type (new_type);
|
||||
row_id = gsk_spv_writer_get_id_for_type (writer, row_type);
|
||||
for (i = 0; i < n; i++)
|
||||
{
|
||||
guint tmp_id = gsk_spv_writer_next_id (writer);
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_CODE,
|
||||
5, GSK_SPV_OP_COMPOSITE_EXTRACT,
|
||||
(guint32[4]) { row_id,
|
||||
tmp_id,
|
||||
id,
|
||||
i });
|
||||
ids[i + 2] = gsk_spv_writer_add_conversion (writer, tmp_id, row_type, new_row_type);
|
||||
ids[i] = gsk_spv_writer_composite_extract (writer, row_type, id, (guint32[1]) { i }, 1);
|
||||
ids[i] = gsk_spv_writer_convert (writer, ids[i], row_type, new_row_type);
|
||||
}
|
||||
|
||||
ids[0] = gsk_spv_writer_get_id_for_type (writer, new_type);
|
||||
ids[1] = gsk_spv_writer_next_id (writer);
|
||||
gsk_spv_writer_add (writer,
|
||||
GSK_SPV_WRITER_SECTION_CODE,
|
||||
3 + n, GSK_SPV_OP_COMPOSITE_CONSTRUCT,
|
||||
ids);
|
||||
|
||||
return ids[1];
|
||||
return gsk_spv_writer_composite_construct (writer, new_type, ids, n);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
6367
gsk/gskspvwritergeneratedprivate.h
Normal file
6367
gsk/gskspvwritergeneratedprivate.h
Normal file
File diff suppressed because it is too large
Load Diff
@@ -22,6 +22,7 @@
|
||||
#include <glib.h>
|
||||
|
||||
#include "gsksltypesprivate.h"
|
||||
#include "gskspvenumsprivate.h"
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
@@ -30,257 +31,11 @@ G_BEGIN_DECLS
|
||||
#define GSK_SPV_VERSION_MINOR 0
|
||||
#define GSK_SPV_GENERATOR 0
|
||||
|
||||
typedef enum {
|
||||
GSK_SPV_OP_NOP = 0,
|
||||
GSK_SPV_OP_UNDEF = 1,
|
||||
GSK_SPV_OP_SOURCE_CONTINUED = 2,
|
||||
GSK_SPV_OP_SOURCE = 3,
|
||||
GSK_SPV_OP_SOURCE_EXTENSION = 4,
|
||||
GSK_SPV_OP_NAME = 5,
|
||||
GSK_SPV_OP_MEMBER_NAME = 6,
|
||||
GSK_SPV_OP_STRING = 7,
|
||||
GSK_SPV_OP_LINE = 8,
|
||||
GSK_SPV_OP_EXTENSION = 10,
|
||||
GSK_SPV_OP_EXT_INST_IMPORT = 11,
|
||||
GSK_SPV_OP_EXT_INST = 12,
|
||||
GSK_SPV_OP_MEMORY_MODEL = 14,
|
||||
GSK_SPV_OP_ENTRY_POINT = 15,
|
||||
GSK_SPV_OP_EXECUTION_MODE = 16,
|
||||
GSK_SPV_OP_CAPABILITY = 17,
|
||||
GSK_SPV_OP_TYPE_VOID = 19,
|
||||
GSK_SPV_OP_TYPE_BOOL = 20,
|
||||
GSK_SPV_OP_TYPE_INT = 21,
|
||||
GSK_SPV_OP_TYPE_FLOAT = 22,
|
||||
GSK_SPV_OP_TYPE_VECTOR = 23,
|
||||
GSK_SPV_OP_TYPE_MATRIX = 24,
|
||||
GSK_SPV_OP_TYPE_IMAGE = 25,
|
||||
GSK_SPV_OP_TYPE_SAMPLER = 26,
|
||||
GSK_SPV_OP_TYPE_SAMPLED_IMAGE = 27,
|
||||
GSK_SPV_OP_TYPE_ARRAY = 28,
|
||||
GSK_SPV_OP_TYPE_RUNTIME_ARRAY = 29,
|
||||
GSK_SPV_OP_TYPE_STRUCT = 30,
|
||||
GSK_SPV_OP_TYPE_OPAQUE = 31,
|
||||
GSK_SPV_OP_TYPE_POINTER = 32,
|
||||
GSK_SPV_OP_TYPE_FUNCTION = 33,
|
||||
GSK_SPV_OP_TYPE_EVENT = 34,
|
||||
GSK_SPV_OP_TYPE_DEVICE_EVENT = 35,
|
||||
GSK_SPV_OP_TYPE_RESERVE_ID = 36,
|
||||
GSK_SPV_OP_TYPE_QUEUE = 37,
|
||||
GSK_SPV_OP_TYPE_PIPE = 38,
|
||||
GSK_SPV_OP_TYPE_FORWARD_POINTER = 39,
|
||||
GSK_SPV_OP_CONSTANT_TRUE = 41,
|
||||
GSK_SPV_OP_CONSTANT_FALSE = 42,
|
||||
GSK_SPV_OP_CONSTANT = 43,
|
||||
GSK_SPV_OP_CONSTANT_COMPOSITE = 44,
|
||||
GSK_SPV_OP_CONSTANT_SAMPLER = 45,
|
||||
GSK_SPV_OP_CONSTANT_NULL = 46,
|
||||
GSK_SPV_OP_SPEC_CONSTANT_TRUE = 48,
|
||||
GSK_SPV_OP_SPEC_CONSTANT_FALSE = 49,
|
||||
GSK_SPV_OP_SPEC_CONSTANT = 50,
|
||||
GSK_SPV_OP_SPEC_CONSTANT_COMPOSITE = 51,
|
||||
GSK_SPV_OP_SPEC_CONSTANT_OP = 52,
|
||||
GSK_SPV_OP_FUNCTION = 54,
|
||||
GSK_SPV_OP_FUNCTION_PARAMETER = 55,
|
||||
GSK_SPV_OP_FUNCTION_END = 56,
|
||||
GSK_SPV_OP_FUNCTION_CALL = 57,
|
||||
GSK_SPV_OP_VARIABLE = 59,
|
||||
GSK_SPV_OP_IMAGE_TEXEL_POINTER = 60,
|
||||
GSK_SPV_OP_LOAD = 61,
|
||||
GSK_SPV_OP_STORE = 62,
|
||||
GSK_SPV_OP_COPY_MEMORY = 63,
|
||||
GSK_SPV_OP_COPY_MEMORY_SIZED = 64,
|
||||
GSK_SPV_OP_ACCESS_CHAIN = 65,
|
||||
GSK_SPV_OP_IN_BOUNDS_ACCESS_CHAIN = 66,
|
||||
GSK_SPV_OP_PTR_ACCESS_CHAIN = 67,
|
||||
GSK_SPV_OP_ARRAY_LENGTH = 68,
|
||||
GSK_SPV_OP_GENERIC_PTR_MEM_SEMANTICS = 69,
|
||||
GSK_SPV_OP_IN_BOUNDS_PTR_ACCESS_CHAIN = 70,
|
||||
GSK_SPV_OP_DECORATE = 71,
|
||||
GSK_SPV_OP_MEMBER_DECORATE = 72,
|
||||
GSK_SPV_OP_DECORATION_GROUP = 73,
|
||||
GSK_SPV_OP_GROUP_DECORATE = 74,
|
||||
GSK_SPV_OP_GROUP_MEMBER_DECORATE = 75,
|
||||
GSK_SPV_OP_VECTOR_EXTRACT_DYNAMIC = 77,
|
||||
GSK_SPV_OP_VECTOR_INSERT_DYNAMIC = 78,
|
||||
GSK_SPV_OP_VECTOR_SHUFFLE = 79,
|
||||
GSK_SPV_OP_COMPOSITE_CONSTRUCT = 80,
|
||||
GSK_SPV_OP_COMPOSITE_EXTRACT = 81,
|
||||
GSK_SPV_OP_COMPOSITE_INSERT = 82,
|
||||
GSK_SPV_OP_COPY_OBJECT = 83,
|
||||
GSK_SPV_OP_TRANSPOSE = 84,
|
||||
GSK_SPV_OP_CONVERT_F_TO_U = 109,
|
||||
GSK_SPV_OP_CONVERT_F_TO_S = 110,
|
||||
GSK_SPV_OP_CONVERT_S_TO_F = 111,
|
||||
GSK_SPV_OP_CONVERT_U_TO_F = 112,
|
||||
GSK_SPV_OP_U_CONVERT = 113,
|
||||
GSK_SPV_OP_S_CONVERT = 114,
|
||||
GSK_SPV_OP_F_CONVERT = 115,
|
||||
GSK_SPV_OP_QUANTIZE_TO_F16 = 116,
|
||||
GSK_SPV_OP_CONVERT_PTR_TO_U = 117,
|
||||
GSK_SPV_OP_SAT_CONVERT_S_TO_U = 118,
|
||||
GSK_SPV_OP_SAT_CONVERT_U_TO_S = 119,
|
||||
GSK_SPV_OP_CONVERT_U_TO_PTR = 120,
|
||||
GSK_SPV_OP_PTR_CAST_TO_GENERIC = 121,
|
||||
GSK_SPV_OP_GENERIC_CAST_TO_PTR = 122,
|
||||
GSK_SPV_OP_GENERIC_CAST_TO_PTR_EXPLICIT = 123,
|
||||
GSK_SPV_OP_BITCAST = 124,
|
||||
GSK_SPV_OP_S_NEGATE = 126,
|
||||
GSK_SPV_OP_F_NEGATE = 127,
|
||||
GSK_SPV_OP_I_ADD = 128,
|
||||
GSK_SPV_OP_F_ADD = 129,
|
||||
GSK_SPV_OP_I_SUB = 130,
|
||||
GSK_SPV_OP_F_SUB = 131,
|
||||
GSK_SPV_OP_I_MUL = 132,
|
||||
GSK_SPV_OP_F_MUL = 133,
|
||||
GSK_SPV_OP_U_DIV = 134,
|
||||
GSK_SPV_OP_S_DIV = 135,
|
||||
GSK_SPV_OP_F_DIV = 136,
|
||||
GSK_SPV_OP_U_MOD = 137,
|
||||
GSK_SPV_OP_S_REM = 138,
|
||||
GSK_SPV_OP_S_MOD = 139,
|
||||
GSK_SPV_OP_F_REM = 140,
|
||||
GSK_SPV_OP_F_MOD = 141,
|
||||
GSK_SPV_OP_VECTOR_TIMES_SCALAR = 142,
|
||||
GSK_SPV_OP_MATRIX_TIMES_SCALAR = 143,
|
||||
GSK_SPV_OP_VECTOR_TIMES_MATRIX = 144,
|
||||
GSK_SPV_OP_MATRIX_TIMES_VECTOR = 145,
|
||||
GSK_SPV_OP_MATRIX_TIMES_MATRIX = 146,
|
||||
GSK_SPV_OP_OUTER_PRODUCT = 147,
|
||||
GSK_SPV_OP_DOT = 148,
|
||||
GSK_SPV_OP_I_ADD_CARRY = 149,
|
||||
GSK_SPV_OP_I_SUB_BORROW = 150,
|
||||
GSK_SPV_OP_U_MUL_EXTENDED = 151,
|
||||
GSK_SPV_OP_S_MUL_EXTENDED = 152,
|
||||
GSK_SPV_OP_ANY = 154,
|
||||
GSK_SPV_OP_ALL = 155,
|
||||
GSK_SPV_OP_IS_NAN = 156,
|
||||
GSK_SPV_OP_IS_INF = 157,
|
||||
GSK_SPV_OP_IS_FINITE = 158,
|
||||
GSK_SPV_OP_IS_NORMAL = 159,
|
||||
GSK_SPV_OP_SIGN_BIT_SET = 160,
|
||||
GSK_SPV_OP_LESS_OR_GREATER = 161,
|
||||
GSK_SPV_OP_ORDERED = 162,
|
||||
GSK_SPV_OP_UNORDERED = 163,
|
||||
GSK_SPV_OP_LOGICAL_EQUAL = 164,
|
||||
GSK_SPV_OP_LOGICAL_NOT_EQUAL = 165,
|
||||
GSK_SPV_OP_LOGICAL_OR = 166,
|
||||
GSK_SPV_OP_LOGICAL_AND = 167,
|
||||
GSK_SPV_OP_LOGICAL_NOT = 168,
|
||||
GSK_SPV_OP_SELECT = 169,
|
||||
GSK_SPV_OP_I_EQUAL = 170,
|
||||
GSK_SPV_OP_I_NOT_EQUAL = 171,
|
||||
GSK_SPV_OP_U_GREATER_THAN = 172,
|
||||
GSK_SPV_OP_S_GREATER_THAN = 173,
|
||||
GSK_SPV_OP_U_GREATER_THAN_EQUAL = 174,
|
||||
GSK_SPV_OP_S_GREATER_THAN_EQUAL = 175,
|
||||
GSK_SPV_OP_U_LESS_THAN = 176,
|
||||
GSK_SPV_OP_S_LESS_THAN = 177,
|
||||
GSK_SPV_OP_U_LESS_THAN_EQUAL = 178,
|
||||
GSK_SPV_OP_S_LESS_THAN_EQUAL = 179,
|
||||
GSK_SPV_OP_F_ORD_EQUAL = 180,
|
||||
GSK_SPV_OP_F_UNORD_EQUAL = 181,
|
||||
GSK_SPV_OP_F_ORD_NOT_EQUAL = 182,
|
||||
GSK_SPV_OP_F_UNORD_NOT_EQUAL = 183,
|
||||
GSK_SPV_OP_F_ORD_LESS_THAN = 184,
|
||||
GSK_SPV_OP_F_UNORD_LESS_THAN = 185,
|
||||
GSK_SPV_OP_F_ORD_GREATER_THAN = 186,
|
||||
GSK_SPV_OP_F_UNORD_GREATER_THAN = 187,
|
||||
GSK_SPV_OP_F_ORD_LESS_THAN_EQUAL = 188,
|
||||
GSK_SPV_OP_F_UNORD_LESS_THAN_EQUAL = 189,
|
||||
GSK_SPV_OP_F_ORD_GREATER_THAN_EQUAL = 190,
|
||||
GSK_SPV_OP_F_UNORD_GREATER_THAN_EQUAL = 191,
|
||||
GSK_SPV_OP_PHI = 245,
|
||||
GSK_SPV_OP_LOOP_MERGE = 246,
|
||||
GSK_SPV_OP_SELECTION_MERGE = 247,
|
||||
GSK_SPV_OP_LABEL = 248,
|
||||
GSK_SPV_OP_BRANCH = 249,
|
||||
GSK_SPV_OP_BRANCH_CONDITIONAL = 250,
|
||||
GSK_SPV_OP_SWITCH = 251,
|
||||
GSK_SPV_OP_KILL = 252,
|
||||
GSK_SPV_OP_RETURN = 253,
|
||||
GSK_SPV_OP_RETURN_VALUE = 254,
|
||||
GSK_SPV_OP_UNREACHABLE = 255,
|
||||
GSK_SPV_OP_LIFETIME_START = 256,
|
||||
GSK_SPV_OP_LIFETIME_STOP = 257,
|
||||
GSK_SPV_OP_SIZE_OF = 321,
|
||||
GSK_SPV_OP_TYPE_PIPE_STORAGE = 322,
|
||||
GSK_SPV_OP_TYPE_NAMED_BARRIER = 327,
|
||||
GSK_SPV_OP_DECORATE_ID = 332
|
||||
} GskSpvOpcode;
|
||||
|
||||
typedef enum {
|
||||
GSK_SPV_CAPABILITY_MATRIX = 0,
|
||||
GSK_SPV_CAPABILITY_SHADER = 1
|
||||
} GskSpvCapability;
|
||||
|
||||
typedef enum {
|
||||
GSK_SPV_ADDRESSING_LOGICAL = 0,
|
||||
GSK_SPV_ADDRESSING_PHYSICAL32 = 1,
|
||||
GSK_SPV_ADDRESSING_PHYSICAL64 = 2,
|
||||
} GskSpvAddressingModel;
|
||||
|
||||
typedef enum {
|
||||
GSK_SPV_MEMORY_SIMPLE = 0,
|
||||
GSK_SPV_MEMORY_GLSL450 = 1,
|
||||
GSK_SPV_MEMORY_OPEN_CL = 2
|
||||
} GskSpvMemoryModel;
|
||||
|
||||
typedef enum {
|
||||
GSK_SPV_EXECUTION_MODEL_VERTEX = 0,
|
||||
GSK_SPV_EXECUTION_MODEL_TESSELATION_CONTROL = 1,
|
||||
GSK_SPV_EXECUTION_MODEL_TESSELATION_EVALUATION = 2,
|
||||
GSK_SPV_EXECUTION_MODEL_GEOMETRY = 3,
|
||||
GSK_SPV_EXECUTION_MODEL_FRAGMENT = 4,
|
||||
GSK_SPV_EXECUTION_MODEL_GL_COMPUTE = 5,
|
||||
GSK_SPV_EXECUTION_MODEL_KERNEL = 6,
|
||||
} GskSpvExecutionModel;
|
||||
|
||||
typedef enum {
|
||||
GSK_SPV_EXECUTION_MODE_ORIGIN_UPPER_LEFT = 7
|
||||
} GskSpvExecutionMode;
|
||||
|
||||
typedef enum {
|
||||
GSK_SPV_STORAGE_CLASS_UNIFORM_CONSTANT = 0,
|
||||
GSK_SPV_STORAGE_CLASS_INPUT = 1,
|
||||
GSK_SPV_STORAGE_CLASS_UNIFORM = 2,
|
||||
GSK_SPV_STORAGE_CLASS_OUTPUT = 3,
|
||||
GSK_SPV_STORAGE_CLASS_WORKGROUP = 4,
|
||||
GSK_SPV_STORAGE_CLASS_CROSS_WORKGROUP = 5,
|
||||
GSK_SPV_STORAGE_CLASS_PRIVATE = 6,
|
||||
GSK_SPV_STORAGE_CLASS_FUNCTION = 7,
|
||||
GSK_SPV_STORAGE_CLASS_GENERIC = 8,
|
||||
GSK_SPV_STORAGE_CLASS_PUSH_CONSTANT = 9,
|
||||
GSK_SPV_STORAGE_CLASS_ATOMIC_COUNTER = 10,
|
||||
GSK_SPV_STORAGE_CLASS_IMAGE = 11,
|
||||
GSK_SPV_STORAGE_CLASS_STORAGE_BUFFER = 12
|
||||
} GskSpvStorageClass;
|
||||
|
||||
typedef enum {
|
||||
GSK_SPV_DECORATION_RELAXED_PRECISION = 0,
|
||||
GSK_SPV_DECORATION_SPEC_ID = 1,
|
||||
GSK_SPV_DECORATION_BLOCK = 2,
|
||||
GSK_SPV_DECORATION_BUFFER_BLOCK = 3,
|
||||
GSK_SPV_DECORATION_ROW_MAJOR = 4,
|
||||
GSK_SPV_DECORATION_COLUMN_MAJOR = 5,
|
||||
GSK_SPV_DECORATION_ARRAY_STRIDE = 6,
|
||||
GSK_SPV_DECORATION_MATRIX_STRIDE = 7,
|
||||
GSK_SPV_DECORATION_GLSL_SHARED = 8,
|
||||
GSK_SPV_DECORATION_GLSL_PACKED = 9,
|
||||
GSK_SPV_DECORATION_C_PACKED = 10,
|
||||
GSK_SPV_DECORATION_BUILTIN = 11,
|
||||
GSK_SPV_DECORATION_NO_PERSPECTIVE = 13,
|
||||
GSK_SPV_DECORATION_FLAT = 14,
|
||||
GSK_SPV_DECORATION_PATCH = 15,
|
||||
GSK_SPV_DECORATION_CENTROID = 16,
|
||||
GSK_SPV_DECORATION_SAMPLE = 17,
|
||||
GSK_SPV_DECORATION_INVARIANT = 18,
|
||||
GSK_SPV_DECORATION_RESTRICT = 19,
|
||||
GSK_SPV_DECORATION_ALIASED = 20
|
||||
} GskSpvDecoration;
|
||||
|
||||
typedef enum {
|
||||
GSK_SPV_WRITER_SECTION_HEADER,
|
||||
GSK_SPV_WRITER_SECTION_DEBUG,
|
||||
GSK_SPV_WRITER_SECTION_DECORATE,
|
||||
GSK_SPV_WRITER_SECTION_DEFINE,
|
||||
GSK_SPV_WRITER_SECTION_DECLARE,
|
||||
GSK_SPV_WRITER_SECTION_CODE,
|
||||
/* add more */
|
||||
@@ -309,18 +64,17 @@ guint32 gsk_spv_writer_get_id_for_one (GskSpvWriter
|
||||
guint32 gsk_spv_writer_get_id_for_variable (GskSpvWriter *writer,
|
||||
GskSlVariable *variable);
|
||||
|
||||
guint32 gsk_spv_writer_next_id (GskSpvWriter *writer);
|
||||
void gsk_spv_writer_add (GskSpvWriter *writer,
|
||||
GskSpvWriterSection section,
|
||||
guint16 word_count,
|
||||
guint16 opcode,
|
||||
guint32 *words);
|
||||
guint32 gsk_spv_writer_make_id (GskSpvWriter *writer);
|
||||
GArray * gsk_spv_writer_get_bytes (GskSpvWriter *writer,
|
||||
GskSpvWriterSection section);
|
||||
|
||||
guint32 gsk_spv_writer_add_conversion (GskSpvWriter *writer,
|
||||
guint32 gsk_spv_writer_convert (GskSpvWriter *writer,
|
||||
guint32 id,
|
||||
GskSlType *type,
|
||||
GskSlType *new_type);
|
||||
|
||||
#include "gskspvwritergeneratedprivate.h"
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __GSK_SPV_WRITER_PRIVATE_H__ */
|
||||
|
||||
@@ -62,6 +62,11 @@ gsk_public_headers = files([
|
||||
'gsktypes.h',
|
||||
])
|
||||
|
||||
gsk_private_headers = files([
|
||||
'gskspvenumsprivate.h',
|
||||
'gskspvwritergeneratedprivate.h'
|
||||
])
|
||||
|
||||
install_headers(gsk_public_headers, 'gsk.h', subdir: 'gtk-4.0/gsk')
|
||||
|
||||
gsk_private_vulkan_shaders = []
|
||||
|
||||
5630
gsk/spirv.core.grammar.json
Normal file
5630
gsk/spirv.core.grammar.json
Normal file
File diff suppressed because it is too large
Load Diff
715
gsk/spirv.js
Normal file
715
gsk/spirv.js
Normal file
@@ -0,0 +1,715 @@
|
||||
function usage()
|
||||
{
|
||||
print ("usage: gjs spirv.js enums|functions SPIRV_GRAMMAR_FILE");
|
||||
}
|
||||
|
||||
if (ARGV.length != 2)
|
||||
{
|
||||
usage();
|
||||
throw new SyntaxError ("Script needs 2 arguments but got " + ARGV.length);
|
||||
}
|
||||
|
||||
var contents = imports.gi.Gio.File.new_for_path(ARGV[1]).load_contents(null);
|
||||
var spirv = JSON.parse(contents[1]);
|
||||
|
||||
if (!String.prototype.format) {
|
||||
String.prototype.format = function() {
|
||||
var args = arguments;
|
||||
return this.replace(/{(\d+)}/g, function(match, number) {
|
||||
return typeof args[number] != 'undefined'
|
||||
? args[number]
|
||||
: match
|
||||
;
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
function all_lower(s)
|
||||
{
|
||||
let result = "";
|
||||
let needs_underscore = false;
|
||||
let had_caps = false;
|
||||
for (let i = 0; i < s.length; i++)
|
||||
{
|
||||
if (s[i] >= 'a' && s[i] <= 'z')
|
||||
{
|
||||
needs_underscore = true;
|
||||
had_caps = false;
|
||||
result += s[i];
|
||||
}
|
||||
else if (s[i] >= "A" && s[i] <= "Z")
|
||||
{
|
||||
if (needs_underscore)
|
||||
result += "_";
|
||||
else if (s[i+1] && s[i+1] >= "a" && s[i+1] <= "z" && had_caps)
|
||||
result += "_";
|
||||
needs_underscore = false;
|
||||
had_caps = true;
|
||||
result += s[i].toLowerCase();
|
||||
}
|
||||
else if (s[i] >= '0' && s[i] <= '9')
|
||||
{
|
||||
needs_underscore = true
|
||||
had_caps = false;
|
||||
result += s[i]
|
||||
}
|
||||
else
|
||||
{
|
||||
needs_underscore = false
|
||||
had_caps = false;
|
||||
result += "_";
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
function all_upper(s)
|
||||
{
|
||||
return all_lower(s).toUpperCase();
|
||||
}
|
||||
|
||||
function sanitize_name (name)
|
||||
{
|
||||
name = name.substr(1);
|
||||
return all_lower(name.substr(0, name.indexOf("'")));
|
||||
}
|
||||
|
||||
var SpecialTypes = {
|
||||
"OpVariable": { "result_type": "IdResultPointerType" },
|
||||
"OpImageTexelPointer": { "result_type": "IdResultPointerType" },
|
||||
"OpAccessChain": { "result_type": "IdResultPointerType" },
|
||||
"OpInBoundsAccessChain": { "result_type": "IdResultPointerType" },
|
||||
"OpConvertUToPtr": { "result_type": "IdResultPointerType" },
|
||||
"OpPtrCastToGeneric": { "result_type": "IdResultPointerType" },
|
||||
"OpGenericCastToPtr": { "result_type": "IdResultPointerType" },
|
||||
"OpGenericCastToPtrExplicit": { "result_type": "IdResultPointerType" }
|
||||
};
|
||||
|
||||
/* maps opcodes to section in file they appear in */
|
||||
var Sections = {
|
||||
"OpNop": "",
|
||||
"OpUndef": "",
|
||||
"OpSourceContinued": "",
|
||||
"OpSource": "debug",
|
||||
"OpSourceExtension": "debug",
|
||||
"OpName": "debug",
|
||||
"OpMemberName": "debug",
|
||||
"OpString": "",
|
||||
"OpLine": "",
|
||||
"OpExtension": "header",
|
||||
"OpExtInstImport": "header",
|
||||
"OpExtInst": "",
|
||||
"OpMemoryModel": "header",
|
||||
"OpEntryPoint": "header",
|
||||
"OpExecutionMode": "header",
|
||||
"OpCapability": "header",
|
||||
"OpTypeVoid": "define",
|
||||
"OpTypeBool": "define",
|
||||
"OpTypeInt": "define",
|
||||
"OpTypeFloat": "define",
|
||||
"OpTypeVector": "define",
|
||||
"OpTypeMatrix": "define",
|
||||
"OpTypeImage": "define",
|
||||
"OpTypeSampler": "define",
|
||||
"OpTypeSampledImage": "define",
|
||||
"OpTypeArray": "define",
|
||||
"OpTypeRuntimeArray": "define",
|
||||
"OpTypeStruct": "define",
|
||||
"OpTypeOpaque": "define",
|
||||
"OpTypePointer": "define",
|
||||
"OpTypeFunction": "define",
|
||||
"OpTypeEvent": "define",
|
||||
"OpTypeDeviceEvent": "define",
|
||||
"OpTypeReserveId": "define",
|
||||
"OpTypeQueue": "define",
|
||||
"OpTypePipe": "define",
|
||||
"OpTypeForwardPointer": "define",
|
||||
"OpConstantTrue": "define",
|
||||
"OpConstantFalse": "define",
|
||||
"OpConstant": "define",
|
||||
"OpConstantComposite": "define",
|
||||
"OpConstantSampler": "define",
|
||||
"OpConstantNull": "define",
|
||||
"OpSpecConstantTrue": "define",
|
||||
"OpSpecConstantFalse": "define",
|
||||
"OpSpecConstant": "define",
|
||||
"OpSpecConstantComposite": "define",
|
||||
"OpSpecConstantOp": "define",
|
||||
"OpFunction": "declare",
|
||||
"OpFunctionParameter": "declare",
|
||||
"OpFunctionEnd": "code",
|
||||
"OpFunctionCall": "code",
|
||||
"OpVariable": "declare",
|
||||
"OpImageTexelPointer": "code",
|
||||
"OpLoad": "code",
|
||||
"OpStore": "code",
|
||||
"OpCopyMemory": "code",
|
||||
"OpCopyMemorySized": "code",
|
||||
"OpAccessChain": "code",
|
||||
"OpInBoundsAccessChain": "code",
|
||||
"OpPtrAccessChain": "code",
|
||||
"OpArrayLength": "code",
|
||||
"OpGenericPtrMemSemantics": "",
|
||||
"OpInBoundsPtrAccessChain": "code",
|
||||
"OpDecorate": "decorate",
|
||||
"OpMemberDecorate": "decorate",
|
||||
"OpDecorationGroup": "decorate",
|
||||
"OpGroupDecorate": "decorate",
|
||||
"OpGroupMemberDecorate": "decorate",
|
||||
"OpVectorExtractDynamic": "code",
|
||||
"OpVectorInsertDynamic": "code",
|
||||
"OpVectorShuffle": "code",
|
||||
"OpCompositeConstruct": "code",
|
||||
"OpCompositeExtract": "code",
|
||||
"OpCompositeInsert": "code",
|
||||
"OpCopyObject": "",
|
||||
"OpTranspose": "code",
|
||||
"OpSampledImage": "",
|
||||
"OpImageSampleImplicitLod": "code",
|
||||
"OpImageSampleExplicitLod": "code",
|
||||
"OpImageSampleDrefImplicitLod": "code",
|
||||
"OpImageSampleDrefExplicitLod": "code",
|
||||
"OpImageSampleProjImplicitLod": "code",
|
||||
"OpImageSampleProjExplicitLod": "code",
|
||||
"OpImageSampleProjDrefImplicitLod": "code",
|
||||
"OpImageSampleProjDrefExplicitLod": "code",
|
||||
"OpImageFetch": "code",
|
||||
"OpImageGather": "code",
|
||||
"OpImageDrefGather": "code",
|
||||
"OpImageRead": "code",
|
||||
"OpImageWrite": "code",
|
||||
"OpImage": "code",
|
||||
"OpImageQueryFormat": "code",
|
||||
"OpImageQueryOrder": "code",
|
||||
"OpImageQuerySizeLod": "code",
|
||||
"OpImageQuerySize": "code",
|
||||
"OpImageQueryLod": "code",
|
||||
"OpImageQueryLevels": "code",
|
||||
"OpImageQuerySamples": "code",
|
||||
"OpConvertFToU": "code",
|
||||
"OpConvertFToS": "code",
|
||||
"OpConvertSToF": "code",
|
||||
"OpConvertUToF": "code",
|
||||
"OpUConvert": "code",
|
||||
"OpSConvert": "code",
|
||||
"OpFConvert": "code",
|
||||
"OpQuantizeToF16": "code",
|
||||
"OpConvertPtrToU": "code",
|
||||
"OpSatConvertSToU": "code",
|
||||
"OpSatConvertUToS": "code",
|
||||
"OpConvertUToPtr": "code",
|
||||
"OpPtrCastToGeneric": "code",
|
||||
"OpGenericCastToPtr": "code",
|
||||
"OpGenericCastToPtrExplicit": "code",
|
||||
"OpBitcast": "code",
|
||||
"OpSNegate": "code",
|
||||
"OpFNegate": "code",
|
||||
"OpIAdd": "code",
|
||||
"OpFAdd": "code",
|
||||
"OpISub": "code",
|
||||
"OpFSub": "code",
|
||||
"OpIMul": "code",
|
||||
"OpFMul": "code",
|
||||
"OpUDiv": "code",
|
||||
"OpSDiv": "code",
|
||||
"OpFDiv": "code",
|
||||
"OpUMod": "code",
|
||||
"OpSRem": "code",
|
||||
"OpSMod": "code",
|
||||
"OpFRem": "code",
|
||||
"OpFMod": "code",
|
||||
"OpVectorTimesScalar": "code",
|
||||
"OpMatrixTimesScalar": "code",
|
||||
"OpVectorTimesMatrix": "code",
|
||||
"OpMatrixTimesVector": "code",
|
||||
"OpMatrixTimesMatrix": "code",
|
||||
"OpOuterProduct": "code",
|
||||
"OpDot": "code",
|
||||
"OpIAddCarry": "code",
|
||||
"OpISubBorrow": "code",
|
||||
"OpUMulExtended": "code",
|
||||
"OpSMulExtended": "code",
|
||||
"OpAny": "code",
|
||||
"OpAll": "code",
|
||||
"OpIsNan": "code",
|
||||
"OpIsInf": "code",
|
||||
"OpIsFinite": "code",
|
||||
"OpIsNormal": "code",
|
||||
"OpSignBitSet": "code",
|
||||
"OpLessOrGreater": "code",
|
||||
"OpOrdered": "code",
|
||||
"OpUnordered": "code",
|
||||
"OpLogicalEqual": "code",
|
||||
"OpLogicalNotEqual": "code",
|
||||
"OpLogicalOr": "code",
|
||||
"OpLogicalAnd": "code",
|
||||
"OpLogicalNot": "code",
|
||||
"OpSelect": "code",
|
||||
"OpIEqual": "code",
|
||||
"OpINotEqual": "code",
|
||||
"OpUGreaterThan": "code",
|
||||
"OpSGreaterThan": "code",
|
||||
"OpUGreaterThanEqual": "code",
|
||||
"OpSGreaterThanEqual": "code",
|
||||
"OpULessThan": "code",
|
||||
"OpSLessThan": "code",
|
||||
"OpULessThanEqual": "code",
|
||||
"OpSLessThanEqual": "code",
|
||||
"OpFOrdEqual": "code",
|
||||
"OpFUnordEqual": "code",
|
||||
"OpFOrdNotEqual": "code",
|
||||
"OpFUnordNotEqual": "code",
|
||||
"OpFOrdLessThan": "code",
|
||||
"OpFUnordLessThan": "code",
|
||||
"OpFOrdGreaterThan": "code",
|
||||
"OpFUnordGreaterThan": "code",
|
||||
"OpFOrdLessThanEqual": "code",
|
||||
"OpFUnordLessThanEqual": "code",
|
||||
"OpFOrdGreaterThanEqual": "code",
|
||||
"OpFUnordGreaterThanEqual": "code",
|
||||
"OpShiftRightLogical": "code",
|
||||
"OpShiftRightArithmetic": "code",
|
||||
"OpShiftLeftLogical": "code",
|
||||
"OpBitwiseOr": "code",
|
||||
"OpBitwiseXor": "code",
|
||||
"OpBitwiseAnd": "code",
|
||||
"OpNot": "code",
|
||||
"OpBitFieldInsert": "code",
|
||||
"OpBitFieldSExtract": "code",
|
||||
"OpBitFieldUExtract": "code",
|
||||
"OpBitReverse": "code",
|
||||
"OpBitCount": "code",
|
||||
"OpDPdx": "code",
|
||||
"OpDPdy": "code",
|
||||
"OpFwidth": "code",
|
||||
"OpDPdxFine": "code",
|
||||
"OpDPdyFine": "code",
|
||||
"OpFwidthFine": "code",
|
||||
"OpDPdxCoarse": "code",
|
||||
"OpDPdyCoarse": "code",
|
||||
"OpFwidthCoarse": "code",
|
||||
"OpEmitVertex": "code",
|
||||
"OpEndPrimitive": "code",
|
||||
"OpEmitStreamVertex": "code",
|
||||
"OpEndStreamPrimitive": "code",
|
||||
"OpControlBarrier": "code",
|
||||
"OpMemoryBarrier": "code",
|
||||
"OpAtomicLoad": "code",
|
||||
"OpAtomicStore": "code",
|
||||
"OpAtomicExchange": "code",
|
||||
"OpAtomicCompareExchange": "code",
|
||||
"OpAtomicCompareExchangeWeak": "code",
|
||||
"OpAtomicIIncrement": "code",
|
||||
"OpAtomicIDecrement": "code",
|
||||
"OpAtomicIAdd": "code",
|
||||
"OpAtomicISub": "code",
|
||||
"OpAtomicSMin": "code",
|
||||
"OpAtomicUMin": "code",
|
||||
"OpAtomicSMax": "code",
|
||||
"OpAtomicUMax": "code",
|
||||
"OpAtomicAnd": "code",
|
||||
"OpAtomicOr": "code",
|
||||
"OpAtomicXor": "code",
|
||||
"OpPhi": "code",
|
||||
"OpLoopMerge": "code",
|
||||
"OpSelectionMerge": "code",
|
||||
"OpLabel": "code",
|
||||
"OpBranch": "code",
|
||||
"OpBranchConditional": "code",
|
||||
"OpSwitch": "code",
|
||||
"OpKill": "code",
|
||||
"OpReturn": "code",
|
||||
"OpReturnValue": "code",
|
||||
"OpUnreachable": "",
|
||||
"OpLifetimeStart": "",
|
||||
"OpLifetimeStop": "",
|
||||
"OpGroupAsyncCopy": "",
|
||||
"OpGroupWaitEvents": "",
|
||||
"OpGroupAll": "",
|
||||
"OpGroupAny": "",
|
||||
"OpGroupBroadcast": "",
|
||||
"OpGroupIAdd": "",
|
||||
"OpGroupFAdd": "",
|
||||
"OpGroupFMin": "",
|
||||
"OpGroupUMin": "",
|
||||
"OpGroupSMin": "",
|
||||
"OpGroupFMax": "",
|
||||
"OpGroupUMax": "",
|
||||
"OpGroupSMax": "",
|
||||
"OpReadPipe": "",
|
||||
"OpWritePipe": "",
|
||||
"OpReservedReadPipe": "",
|
||||
"OpReservedWritePipe": "",
|
||||
"OpReserveReadPipePackets": "",
|
||||
"OpReserveWritePipePackets": "",
|
||||
"OpCommitReadPipe": "",
|
||||
"OpCommitWritePipe": "",
|
||||
"OpIsValidReserveId": "",
|
||||
"OpGetNumPipePackets": "",
|
||||
"OpGetMaxPipePackets": "",
|
||||
"OpGroupReserveReadPipePackets": "",
|
||||
"OpGroupReserveWritePipePackets": "",
|
||||
"OpGroupCommitReadPipe": "",
|
||||
"OpGroupCommitWritePipe": "",
|
||||
"OpEnqueueMarker": "",
|
||||
"OpEnqueueKernel": "",
|
||||
"OpGetKernelNDrangeSubGroupCount": "",
|
||||
"OpGetKernelNDrangeMaxSubGroupSize": "",
|
||||
"OpGetKernelWorkGroupSize": "",
|
||||
"OpGetKernelPreferredWorkGroupSizeMultiple": "",
|
||||
"OpRetainEvent": "",
|
||||
"OpReleaseEvent": "",
|
||||
"OpCreateUserEvent": "",
|
||||
"OpIsValidEvent": "",
|
||||
"OpSetUserEventStatus": "",
|
||||
"OpCaptureEventProfilingInfo": "",
|
||||
"OpGetDefaultQueue": "",
|
||||
"OpBuildNDRange": "",
|
||||
"OpImageSparseSampleImplicitLod": "",
|
||||
"OpImageSparseSampleExplicitLod": "",
|
||||
"OpImageSparseSampleDrefImplicitLod": "",
|
||||
"OpImageSparseSampleDrefExplicitLod": "",
|
||||
"OpImageSparseSampleProjImplicitLod": "",
|
||||
"OpImageSparseSampleProjExplicitLod": "",
|
||||
"OpImageSparseSampleProjDrefImplicitLod": "",
|
||||
"OpImageSparseSampleProjDrefExplicitLod": "",
|
||||
"OpImageSparseFetch": "",
|
||||
"OpImageSparseGather": "",
|
||||
"OpImageSparseDrefGather": "",
|
||||
"OpImageSparseTexelsResident": "",
|
||||
"OpNoLine": "",
|
||||
"OpAtomicFlagTestAndSet": "",
|
||||
"OpAtomicFlagClear": "",
|
||||
"OpImageSparseRead": "",
|
||||
"OpSubgroupBallotKHR": "",
|
||||
"OpSubgroupFirstInvocationKHR": "",
|
||||
"OpSubgroupAllKHR": "",
|
||||
"OpSubgroupAnyKHR": "",
|
||||
"OpSubgroupAllEqualKHR": "",
|
||||
"OpSubgroupReadInvocationKHR": "",
|
||||
"OpGroupIAddNonUniformAMD": "",
|
||||
"OpGroupFAddNonUniformAMD": "",
|
||||
"OpGroupFMinNonUniformAMD": "",
|
||||
"OpGroupUMinNonUniformAMD": "",
|
||||
"OpGroupSMinNonUniformAMD": "",
|
||||
"OpGroupFMaxNonUniformAMD": "",
|
||||
"OpGroupUMaxNonUniformAMD": "",
|
||||
"OpGroupSMaxNonUniformAMD": "",
|
||||
"OpFragmentMaskFetchAMD": "",
|
||||
"OpFragmentFetchAMD": ""
|
||||
};
|
||||
|
||||
var Operands = {
|
||||
"IdMemorySemantics": { ctype: "guint32", ctype_suffix: "",
|
||||
optional_unset: "0",
|
||||
append_many: "g_array_append_vals ({0}, {1}, {2})",
|
||||
append_one: "g_array_append_val ({0}, {1})" },
|
||||
"IdRef": { ctype: "guint32", ctype_suffix: "",
|
||||
optional_unset: "0",
|
||||
append_many: "g_array_append_vals ({0}, {1}, {2})",
|
||||
append_one: "g_array_append_val ({0}, {1})" },
|
||||
"IdResult": { ctype: "guint32", ctype_suffix: "",
|
||||
optional_unset: "0",
|
||||
declare_local: "guint32 {0}_id = gsk_spv_writer_make_id (writer);",
|
||||
append_one: "g_array_append_val ({0}, {1}_id)" },
|
||||
"IdResultType": { ctype: "GskSlType *", ctype_suffix: "",
|
||||
optional_unset: "NULL",
|
||||
declare_local: "guint32 {0}_id = gsk_spv_writer_get_id_for_type (writer, {0});",
|
||||
append_one: "g_array_append_val ({0}, {1}_id)" },
|
||||
"IdResultPointerType" : { ctype: "GskSlPointerType *", ctype_suffix: "",
|
||||
optional_unset: "NULL",
|
||||
declare_local: "guint32 {0}_id = gsk_spv_writer_get_id_for_pointer_type (writer, {0});",
|
||||
append_one: "g_array_append_val ({0}, {1}_id)" },
|
||||
"IdScope": { ctype: "guint32", ctype_suffix: "",
|
||||
optional_unset: "0",
|
||||
append_many: "g_array_append_vals ({0}, {1}, {2})",
|
||||
append_one: "g_array_append_val ({0}, {1})" },
|
||||
"LiteralContextDependentNumber": { ctype: "guint32", ctype_suffix: "",
|
||||
is_many: true,
|
||||
append_many: "g_array_append_vals ({0}, {1}, {2})" },
|
||||
"LiteralExtInstInteger": { ctype: "guint32", ctype_suffix: "",
|
||||
append_many: "g_array_append_vals ({0}, {1}, {2})",
|
||||
append_one: "g_array_append_val ({0}, {1})" },
|
||||
"LiteralInteger": { ctype: "guint32", ctype_suffix: "",
|
||||
append_many: "g_array_append_vals ({0}, {1}, {2})",
|
||||
append_one: "g_array_append_val ({0}, {1})" },
|
||||
"LiteralString": { ctype: "const char *", ctype_suffix: "",
|
||||
optional_unset: "NULL",
|
||||
append_one: "append_string ({0}, {1})" },
|
||||
"LiteralSpecConstantOpInteger": { ctype: "guint32", ctype_suffix: "",
|
||||
is_many: true,
|
||||
append_many: "g_array_append_vals ({0}, {1}, {2})" },
|
||||
"PairIdRefLiteralInteger": { ctype: "guint32", ctype_suffix: "[2]",
|
||||
append_many: "g_array_append_vals ({0}, {1}, 2 * {2})",
|
||||
append_one: "g_array_append_vals ({0}, {1}, 2)" },
|
||||
"PairIdRefIdRef": { ctype: "guint32", ctype_suffix: "[2]",
|
||||
append_many: "g_array_append_vals ({0}, {1}, 2 * {2})",
|
||||
append_one: "g_array_append_vals ({0}, {1}, 2)" },
|
||||
"PairLiteralIntegerIdRef": { ctype: "guint32", ctype_suffix: "[2]",
|
||||
append_many: "g_array_append_vals ({0}, {1}, 2 * {2})",
|
||||
append_one: "g_array_append_vals ({0}, {1}, 2)" }
|
||||
};
|
||||
|
||||
for (let kind in spirv.operand_kinds)
|
||||
{
|
||||
kind = spirv.operand_kinds[kind];
|
||||
if (kind.category == "BitEnum" ||
|
||||
kind.category == "ValueEnum")
|
||||
{
|
||||
Operands[kind.kind] = { ctype: "GskSpv" + kind.kind, ctype_suffix: "",
|
||||
append_one: "g_array_append_val ({0}, (guint32) { {1} })" };
|
||||
if (kind.category == "BitEnum")
|
||||
Operands[kind.kind].optional_unset = "0";
|
||||
}
|
||||
}
|
||||
|
||||
function fix_operand (ins, o)
|
||||
{
|
||||
if (o.name)
|
||||
{
|
||||
if (o.name == "The name of the opaque type.")
|
||||
o.varname = "name"
|
||||
else
|
||||
o.varname = sanitize_name (o.name);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (o.kind == "IdResultType")
|
||||
o.varname = "result_type"
|
||||
else if (o.kind == "IdResult")
|
||||
o.varname = "result"
|
||||
else if (Operands[o.kind])
|
||||
o.varname = all_lower (o.kind);
|
||||
}
|
||||
if (!o.varname)
|
||||
throw new TypeError (o.name + " of type " + o.kind + " has no variable name");
|
||||
if (o.varname == "default")
|
||||
o.varname += "_";
|
||||
if (o.kind == "IdResult")
|
||||
ins.result = true;
|
||||
|
||||
let operand;
|
||||
if (SpecialTypes[ins.opname] &&
|
||||
SpecialTypes[ins.opname][o.varname])
|
||||
operand = Operands[SpecialTypes[ins.opname][o.varname]];
|
||||
else
|
||||
operand = Operands[o.kind];
|
||||
|
||||
o.ctype = operand.ctype;
|
||||
o.ctype_suffix = operand.ctype_suffix;
|
||||
if (operand.append_one)
|
||||
o.append_one = operand.append_one;
|
||||
if (operand.append_many)
|
||||
o.append_many = operand.append_many;
|
||||
if (operand.declare_local)
|
||||
o.declare_local = operand.declare_local;
|
||||
if (operand.is_many)
|
||||
{
|
||||
if (o.quantifier)
|
||||
throw new SyntaxError ("Can't deal with lists of " + o.kind);
|
||||
else
|
||||
o.quantifier = "*";
|
||||
}
|
||||
if (!o.quantifier)
|
||||
o.quantifier = "";
|
||||
if (o.quantifier == "?")
|
||||
{
|
||||
o.varname = "opt_" + o.varname;
|
||||
if (operand.optional_unset)
|
||||
o.unset = operand.optional_unset;
|
||||
}
|
||||
if (o.quantifier == "*")
|
||||
{
|
||||
if (o.varname[o.varname.length - 1] == "1")
|
||||
o.varname = o.varname.substr(0, o.varname.length - 2);
|
||||
if (o.varname[o.varname.length - 1] != "s")
|
||||
o.varname += "s";
|
||||
}
|
||||
}
|
||||
|
||||
for (let i in spirv.instructions)
|
||||
{
|
||||
let ins = spirv.instructions[i];
|
||||
ins.result = false;
|
||||
ins.enum_value = "GSK_SPV_OP_" + all_upper (ins.opname.substr(2));
|
||||
if (ins.operands)
|
||||
{
|
||||
for (let o in ins.operands)
|
||||
{
|
||||
o = ins.operands[o];
|
||||
fix_operand (ins, o);
|
||||
}
|
||||
}
|
||||
else
|
||||
ins.operands = [];
|
||||
if (Sections[ins.opname])
|
||||
{
|
||||
ins.section = Sections[ins.opname];
|
||||
ins.section_enum = "GSK_SPV_WRITER_SECTION_" + ins.section.toUpperCase();
|
||||
}
|
||||
}
|
||||
|
||||
function header()
|
||||
{
|
||||
print ("/* GTK - The GIMP Toolkit");
|
||||
print (" * ");
|
||||
print (" * Copyright © 2017 Benjamin Otte <otte@gnome.org>");
|
||||
print (" *");
|
||||
print (" * This library is free software; you can redistribute it and/or");
|
||||
print (" * modify it under the terms of the GNU Lesser General Public");
|
||||
print (" * License as published by the Free Software Foundation; either");
|
||||
print (" * version 2 of the License, or (at your option) any later version.");
|
||||
print (" *");
|
||||
print (" * This library is distributed in the hope that it will be useful,");
|
||||
print (" * but WITHOUT ANY WARRANTY; without even the implied warranty of");
|
||||
print (" * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU");
|
||||
print (" * Lesser General Public License for more details.");
|
||||
print (" *");
|
||||
print (" * You should have received a copy of the GNU Lesser General Public");
|
||||
print (" * License along with this library. If not, see <http://www.gnu.org/licenses/>.");
|
||||
print (" */");
|
||||
print ("");
|
||||
print ("/*");
|
||||
print (" * !!! THIS FILE WAS AUTOGENERATED !!!");
|
||||
print (" * ");
|
||||
print (" * This file was created using the command");
|
||||
print (" * gjs spirv.js " + ARGV.join (" "));
|
||||
print (" * Apply any changes to those files and then regenerate using above command.");
|
||||
print (" */");
|
||||
print ();
|
||||
}
|
||||
|
||||
if (ARGV[0] == "enums")
|
||||
{
|
||||
header ();
|
||||
print ("#ifndef __GSK_SPV_ENUMS_H__");
|
||||
print ("#define __GSK_SPV_ENUMS_H__");
|
||||
print ();
|
||||
|
||||
for (let kind in spirv.operand_kinds)
|
||||
{
|
||||
kind = spirv.operand_kinds[kind];
|
||||
if (kind.category == "BitEnum" ||
|
||||
kind.category == "ValueEnum")
|
||||
{
|
||||
print ("typedef enum {");
|
||||
for (let i = 0; i < kind.enumerants.length; i++)
|
||||
{
|
||||
let e = kind.enumerants[i];
|
||||
//print (Object.keys(e));
|
||||
print (" GSK_SPV_" + all_upper(kind.kind) + "_" + all_upper (e.enumerant) + " = " + e.value + (i + 1 < kind.enumerants.length ? "," : ""));
|
||||
}
|
||||
print ("} GskSpv" + kind.kind + ";");
|
||||
print ();
|
||||
}
|
||||
}
|
||||
|
||||
print ("typedef enum {");
|
||||
for (let i =0; i < spirv.instructions.length; i++)
|
||||
{
|
||||
let ins = spirv.instructions[i];
|
||||
print (" " + ins.enum_value + " = " + ins.opcode + (i + 1 < spirv.instructions.length ? "," : ""));
|
||||
}
|
||||
print ("} GskSpvOpcode;");
|
||||
print ();
|
||||
print ("#endif /* __GSK_SPV_ENUMS_H__ */");
|
||||
}
|
||||
else if (ARGV[0] == "functions")
|
||||
{
|
||||
header ();
|
||||
print ("#include <string.h>");
|
||||
print ();
|
||||
print ("static inline void");
|
||||
print ("append_string (GArray *bytes,");
|
||||
print (" const char *str)");
|
||||
print ("{");
|
||||
print (" gsize len = strlen (str);");
|
||||
print (" guint size = bytes->len;");
|
||||
print (" g_array_set_size (bytes, size + len / 4 + 1);");
|
||||
print (" memcpy (&g_array_index (bytes, guint32, size), str, len);");
|
||||
print ("}");
|
||||
print ();
|
||||
for (let i in spirv.instructions)
|
||||
{
|
||||
let ins = spirv.instructions[i];
|
||||
let prefix = "gsk_spv_writer_" + all_lower(ins.opname.substr(2)) + " (";
|
||||
let len = prefix.length;
|
||||
if (ins.result)
|
||||
print ("static inline guint32");
|
||||
else
|
||||
print ("static inline void");
|
||||
if (ins.operands.length > 1 ||
|
||||
ins.operands.length == 1 && !ins.result)
|
||||
{
|
||||
let seen_result = !ins.result;
|
||||
print (prefix + "GskSpvWriter *writer,");
|
||||
if (!ins.section)
|
||||
print (Array(len+1).join(" ") + "GskSpvWriterSection section,");
|
||||
for (let i = 0; i < ins.operands.length; i++)
|
||||
{
|
||||
let o = ins.operands[i];
|
||||
if (o.kind == "IdResult")
|
||||
{
|
||||
seen_result = true;
|
||||
continue;
|
||||
}
|
||||
if (o.quantifier == "*")
|
||||
{
|
||||
print (Array(len+1).join(" ") + o.ctype + " *" + o.varname + o.ctype_suffix + ",")
|
||||
print (Array(len+1).join(" ") + "gsize n_" + o.varname + (i + 2 - seen_result < ins.operands.length ? "," : ")"));
|
||||
}
|
||||
else
|
||||
{
|
||||
print (Array(len+1).join(" ") + o.ctype + " " + o.varname + o.ctype_suffix + (i + 2 - seen_result < ins.operands.length ? "," : ")"));
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (ins.section)
|
||||
print ("gsk_spv_writer_" + all_lower(ins.opname.substr(2)) + " (GskSpvWriter *writer)");
|
||||
else
|
||||
{
|
||||
print ("gsk_spv_writer_" + all_lower(ins.opname.substr(2)) + " (GskSpvWriter *writer,");
|
||||
print (Array(len+1).join(" ") + "GskSpvWriterSection section)");
|
||||
}
|
||||
}
|
||||
print ("{");
|
||||
print (" GArray *bytes = gsk_spv_writer_get_bytes (writer, " + (ins.section_enum ? ins.section_enum : "section" ) + ");");
|
||||
for (let i = 0; i < ins.operands.length; i++)
|
||||
{
|
||||
let o = ins.operands[i];
|
||||
if (o.declare_local)
|
||||
print (" " + o.declare_local.format (o.varname));
|
||||
}
|
||||
print (" guint start_index = bytes->len;");
|
||||
print ("");
|
||||
print (" g_array_append_val (bytes, (guint32) { 0 });");
|
||||
for (let i = 0; i < ins.operands.length; i++)
|
||||
{
|
||||
let o = ins.operands[i];
|
||||
let indent = " ";
|
||||
if (o.unset)
|
||||
{
|
||||
print (indent + "if (" + o.varname + " != " + o.unset + ")");
|
||||
indent += " ";
|
||||
}
|
||||
if (o.quantifier == "*")
|
||||
print (indent + o.append_many.format ("bytes", o.varname, "n_" + o.varname) + ";");
|
||||
else
|
||||
print (indent + o.append_one.format ("bytes", o.varname) + ";");
|
||||
}
|
||||
print (" g_array_index (bytes, guint32, start_index) = (bytes->len - start_index) << 16 | " + ins.enum_value + ";");
|
||||
if (ins.result)
|
||||
{
|
||||
print ("");
|
||||
print (" return result_id;");
|
||||
}
|
||||
print ("}");
|
||||
print ("");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
usage ()
|
||||
}
|
||||
Reference in New Issue
Block a user