Table of Contents

Class MonoGameGlslInterpolantPacking

Namespace
ShadowDusk.GLSL
Assembly
ShadowDusk.GLSL.dll

The interpolant facts the OpenGL rewrite needs from the HLSL source, because DXC's output drops them: DXC emits byte-identical GLSL for a row_major and a column_major matrix interpolant, and for a float1x3 and a float3, while fxc gives each its own register layout.

public sealed record MonoGameGlslInterpolantPacking : IEquatable<MonoGameGlslInterpolantPacking>
Inheritance
MonoGameGlslInterpolantPacking
Implements
Inherited Members

Constructors

MonoGameGlslInterpolantPacking(IReadOnlySet<string>, IReadOnlyDictionary<string, string>)

The interpolant facts the OpenGL rewrite needs from the HLSL source, because DXC's output drops them: DXC emits byte-identical GLSL for a row_major and a column_major matrix interpolant, and for a float1x3 and a float3, while fxc gives each its own register layout.

public MonoGameGlslInterpolantPacking(IReadOnlySet<string> RowMajor, IReadOnlyDictionary<string, string> Refused)

Parameters

RowMajor IReadOnlySet<string>

Semantics (normalized: uppercased, index by value, TEXCOORD0) whose matrix interpolant THIS stage's entry point declares row_major: packed one HLSL row per register, as fxc does.

Refused IReadOnlyDictionary<string, string>

Interpolant semantics of this stage with no faithful layout, each with the reason, refused loudly when an interpolant carries it (a float1xN, which fxc spreads over N registers; two declarations of one semantic with different majorness).

Properties

Declared

Every matrix interpolant semantic this stage's entry point declares (normalized). A matrix interpolant the rewrite meets that is not in it has no known layout and is refused, never packed by a guessed majorness.

public IReadOnlySet<string> Declared { get; init; }

Property Value

IReadOnlySet<string>

Refused

Interpolant semantics of this stage with no faithful layout, each with the reason, refused loudly when an interpolant carries it (a float1xN, which fxc spreads over N registers; two declarations of one semantic with different majorness).

public IReadOnlyDictionary<string, string> Refused { get; init; }

Property Value

IReadOnlyDictionary<string, string>

RefusedVertexInputs

Vertex-input semantics with no faithful attribute layout (a float1xN input, which fxc spreads over N attributes), refused when met.

public IReadOnlyDictionary<string, string> RefusedVertexInputs { get; init; }

Property Value

IReadOnlyDictionary<string, string>

RowMajor

Semantics (normalized: uppercased, index by value, TEXCOORD0) whose matrix interpolant THIS stage's entry point declares row_major: packed one HLSL row per register, as fxc does.

public IReadOnlySet<string> RowMajor { get; init; }

Property Value

IReadOnlySet<string>

Split

Interpolant semantics this stage declares as a degenerate matrix (column_major float1xN / row_major floatNx1), with N: fxc lays it out over N one-component registers (vTexCoord{n}.x … vTexCoord{n+N-1}.x), while DXC hands the rewrite one vecN, which the rewrite splits the same way.

public IReadOnlyDictionary<string, int> Split { get; init; }

Property Value

IReadOnlyDictionary<string, int>

Unmodelled

Signature shapes of the entry point the scan does not model, quoted when an undeclared matrix interpolant is refused.

public IReadOnlyList<string> Unmodelled { get; init; }

Property Value

IReadOnlyList<string>