spirv: Handle the SpvDecorationStream decoration
From SPIR-V 1.0 spec, section 3.20, "Decoration": "Stream Apply to an object or a member of a structure type. Indicates the stream number to put an output on." Note the "or", so that means that it is allowed for both a full struct or a membef or a struct (although the wording is not really ideal, and somewhat error-prone, imho). We found this with some Geometry Streams tests for ARB_gl_spirv, where the full gl_PerVertex is assigned Stream 0 (default value on OpenGL for gl_PerVertex). So this commit allows structs to have this Decoration, and sets the stream at the nir variable if needed. Signed-off-by: Neil Roberts <nroberts@igalia.com> Signed-off-by: Alejandro Piñeiro <apinheiro@igalia.com> v2: squash two Decoration Stream patches (Jason) Reviewed-by: Jason Ekstrand <jason@jlekstrand.net> Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com>
This commit is contained in:

committed by
Alejandro Piñeiro

parent
d480623bef
commit
13b8857fcf
@@ -847,7 +847,6 @@ type_decoration_cb(struct vtn_builder *b,
|
|||||||
case SpvDecorationNonWritable:
|
case SpvDecorationNonWritable:
|
||||||
case SpvDecorationNonReadable:
|
case SpvDecorationNonReadable:
|
||||||
case SpvDecorationUniform:
|
case SpvDecorationUniform:
|
||||||
case SpvDecorationStream:
|
|
||||||
case SpvDecorationLocation:
|
case SpvDecorationLocation:
|
||||||
case SpvDecorationComponent:
|
case SpvDecorationComponent:
|
||||||
case SpvDecorationOffset:
|
case SpvDecorationOffset:
|
||||||
@@ -857,6 +856,14 @@ type_decoration_cb(struct vtn_builder *b,
|
|||||||
spirv_decoration_to_string(dec->decoration));
|
spirv_decoration_to_string(dec->decoration));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case SpvDecorationStream:
|
||||||
|
/* We don't need to do anything here, as stream is filled up when
|
||||||
|
* aplying the decoration to a variable, just check that if it is not a
|
||||||
|
* struct member, it should be a struct.
|
||||||
|
*/
|
||||||
|
vtn_assert(type->base_type == vtn_base_type_struct);
|
||||||
|
break;
|
||||||
|
|
||||||
case SpvDecorationRelaxedPrecision:
|
case SpvDecorationRelaxedPrecision:
|
||||||
case SpvDecorationSpecId:
|
case SpvDecorationSpecId:
|
||||||
case SpvDecorationInvariant:
|
case SpvDecorationInvariant:
|
||||||
|
@@ -1298,7 +1298,6 @@ apply_var_decoration(struct vtn_builder *b,
|
|||||||
case SpvDecorationMatrixStride:
|
case SpvDecorationMatrixStride:
|
||||||
case SpvDecorationAliased:
|
case SpvDecorationAliased:
|
||||||
case SpvDecorationUniform:
|
case SpvDecorationUniform:
|
||||||
case SpvDecorationStream:
|
|
||||||
case SpvDecorationLinkageAttributes:
|
case SpvDecorationLinkageAttributes:
|
||||||
break; /* Do nothing with these here */
|
break; /* Do nothing with these here */
|
||||||
|
|
||||||
@@ -1337,6 +1336,10 @@ apply_var_decoration(struct vtn_builder *b,
|
|||||||
var_data->offset = dec->literals[0];
|
var_data->offset = dec->literals[0];
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case SpvDecorationStream:
|
||||||
|
var_data->stream = dec->literals[0];
|
||||||
|
break;
|
||||||
|
|
||||||
case SpvDecorationCPacked:
|
case SpvDecorationCPacked:
|
||||||
case SpvDecorationSaturatedConversion:
|
case SpvDecorationSaturatedConversion:
|
||||||
case SpvDecorationFuncParamAttr:
|
case SpvDecorationFuncParamAttr:
|
||||||
|
Reference in New Issue
Block a user