diff options
Diffstat (limited to 'src/gallium/auxiliary/tgsi/tgsi_ureg.c')
-rw-r--r-- | src/gallium/auxiliary/tgsi/tgsi_ureg.c | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/src/gallium/auxiliary/tgsi/tgsi_ureg.c b/src/gallium/auxiliary/tgsi/tgsi_ureg.c index 55d8cf1eeb0..7a8bf5404e3 100644 --- a/src/gallium/auxiliary/tgsi/tgsi_ureg.c +++ b/src/gallium/auxiliary/tgsi/tgsi_ureg.c @@ -914,8 +914,8 @@ void ureg_emit_dst( struct ureg_program *ureg, struct ureg_dst dst ) { - unsigned size = (1 + - (dst.Indirect ? 1 : 0)); + unsigned size = 1 + (dst.Indirect ? 1 : 0) + + (dst.Dimension ? (dst.DimIndirect ? 2 : 1) : 0); union tgsi_any_token *out = get_tokens( ureg, DOMAIN_INSN, size ); unsigned n = 0; @@ -944,6 +944,26 @@ ureg_emit_dst( struct ureg_program *ureg, n++; } + if (dst.Dimension) { + out[0].dst.Dimension = 1; + out[n].dim.Dimension = 0; + out[n].dim.Padding = 0; + if (dst.DimIndirect) { + out[n].dim.Indirect = 1; + out[n].dim.Index = dst.DimensionIndex; + n++; + out[n].value = 0; + out[n].ind.File = dst.DimIndFile; + out[n].ind.Swizzle = dst.DimIndSwizzle; + out[n].ind.Index = dst.DimIndIndex; + out[n].ind.ArrayID = dst.ArrayID; + } else { + out[n].dim.Indirect = 0; + out[n].dim.Index = dst.DimensionIndex; + } + n++; + } + assert(n == size); } |