summaryrefslogtreecommitdiffstats
path: root/src/gallium/auxiliary/tgsi
diff options
context:
space:
mode:
Diffstat (limited to 'src/gallium/auxiliary/tgsi')
-rw-r--r--src/gallium/auxiliary/tgsi/tgsi_scan.c17
-rw-r--r--src/gallium/auxiliary/tgsi/tgsi_scan.h2
2 files changed, 19 insertions, 0 deletions
diff --git a/src/gallium/auxiliary/tgsi/tgsi_scan.c b/src/gallium/auxiliary/tgsi/tgsi_scan.c
index 77fe6b37982..56b422d8e9c 100644
--- a/src/gallium/auxiliary/tgsi/tgsi_scan.c
+++ b/src/gallium/auxiliary/tgsi/tgsi_scan.c
@@ -547,6 +547,23 @@ scan_declaration(struct tgsi_shader_info *info,
info->output_semantic_index[reg] = (ubyte) semIndex;
info->num_outputs = MAX2(info->num_outputs, reg + 1);
+ if (fulldecl->Declaration.UsageMask & TGSI_WRITEMASK_X) {
+ info->output_streams[reg] |= (ubyte)fulldecl->Semantic.StreamX;
+ info->num_stream_output_components[fulldecl->Semantic.StreamX]++;
+ }
+ if (fulldecl->Declaration.UsageMask & TGSI_WRITEMASK_Y) {
+ info->output_streams[reg] |= (ubyte)fulldecl->Semantic.StreamY << 2;
+ info->num_stream_output_components[fulldecl->Semantic.StreamY]++;
+ }
+ if (fulldecl->Declaration.UsageMask & TGSI_WRITEMASK_Z) {
+ info->output_streams[reg] |= (ubyte)fulldecl->Semantic.StreamZ << 4;
+ info->num_stream_output_components[fulldecl->Semantic.StreamZ]++;
+ }
+ if (fulldecl->Declaration.UsageMask & TGSI_WRITEMASK_W) {
+ info->output_streams[reg] |= (ubyte)fulldecl->Semantic.StreamW << 6;
+ info->num_stream_output_components[fulldecl->Semantic.StreamW]++;
+ }
+
switch (semName) {
case TGSI_SEMANTIC_PRIMID:
info->writes_primid = true;
diff --git a/src/gallium/auxiliary/tgsi/tgsi_scan.h b/src/gallium/auxiliary/tgsi/tgsi_scan.h
index e4f40183189..0cce0f6babb 100644
--- a/src/gallium/auxiliary/tgsi/tgsi_scan.h
+++ b/src/gallium/auxiliary/tgsi/tgsi_scan.h
@@ -54,6 +54,7 @@ struct tgsi_shader_info
ubyte input_cylindrical_wrap[PIPE_MAX_SHADER_INPUTS];
ubyte output_semantic_name[PIPE_MAX_SHADER_OUTPUTS]; /**< TGSI_SEMANTIC_x */
ubyte output_semantic_index[PIPE_MAX_SHADER_OUTPUTS];
+ ubyte output_streams[PIPE_MAX_SHADER_OUTPUTS];
ubyte num_system_values;
ubyte system_value_semantic_name[PIPE_MAX_SHADER_INPUTS];
@@ -68,6 +69,7 @@ struct tgsi_shader_info
unsigned samplers_declared; /**< bitmask of declared samplers */
ubyte sampler_targets[PIPE_MAX_SHADER_SAMPLER_VIEWS]; /**< TGSI_TEXTURE_x values */
ubyte sampler_type[PIPE_MAX_SHADER_SAMPLER_VIEWS]; /**< TGSI_RETURN_TYPE_x */
+ ubyte num_stream_output_components[4];
ubyte input_array_first[PIPE_MAX_SHADER_INPUTS];
ubyte input_array_last[PIPE_MAX_SHADER_INPUTS];