diff options
Diffstat (limited to 'Ryujinx.Graphics.Shader/StructuredIr')
| -rw-r--r-- | Ryujinx.Graphics.Shader/StructuredIr/StructuredProgram.cs | 18 | ||||
| -rw-r--r-- | Ryujinx.Graphics.Shader/StructuredIr/StructuredProgramInfo.cs | 20 |
2 files changed, 38 insertions, 0 deletions
diff --git a/Ryujinx.Graphics.Shader/StructuredIr/StructuredProgram.cs b/Ryujinx.Graphics.Shader/StructuredIr/StructuredProgram.cs index 61cc167a..31c71f20 100644 --- a/Ryujinx.Graphics.Shader/StructuredIr/StructuredProgram.cs +++ b/Ryujinx.Graphics.Shader/StructuredIr/StructuredProgram.cs @@ -64,6 +64,24 @@ namespace Ryujinx.Graphics.Shader.StructuredIr context.LeaveFunction(); } + if (config.TransformFeedbackEnabled) + { + for (int tfbIndex = 0; tfbIndex < 4; tfbIndex++) + { + var locations = config.GpuAccessor.QueryTransformFeedbackVaryingLocations(tfbIndex); + var stride = config.GpuAccessor.QueryTransformFeedbackStride(tfbIndex); + + for (int j = 0; j < locations.Length; j++) + { + byte location = locations[j]; + if (location < 0x80) + { + context.Info.TransformFeedbackOutputs[location] = new TransformFeedbackOutput(tfbIndex, j * 4, stride); + } + } + } + } + return context.Info; } diff --git a/Ryujinx.Graphics.Shader/StructuredIr/StructuredProgramInfo.cs b/Ryujinx.Graphics.Shader/StructuredIr/StructuredProgramInfo.cs index aeaa03ec..933f265f 100644 --- a/Ryujinx.Graphics.Shader/StructuredIr/StructuredProgramInfo.cs +++ b/Ryujinx.Graphics.Shader/StructuredIr/StructuredProgramInfo.cs @@ -2,15 +2,35 @@ using System.Collections.Generic; namespace Ryujinx.Graphics.Shader.StructuredIr { + struct TransformFeedbackOutput + { + public readonly bool Valid; + public readonly int Buffer; + public readonly int Offset; + public readonly int Stride; + + public TransformFeedbackOutput(int buffer, int offset, int stride) + { + Valid = true; + Buffer = buffer; + Offset = offset; + Stride = stride; + } + } + class StructuredProgramInfo { public List<StructuredFunction> Functions { get; } public HelperFunctionsMask HelperFunctionsMask { get; set; } + public TransformFeedbackOutput[] TransformFeedbackOutputs { get; } + public StructuredProgramInfo() { Functions = new List<StructuredFunction>(); + + TransformFeedbackOutputs = new TransformFeedbackOutput[0x80]; } } }
\ No newline at end of file |
