Skip to content

Commit

Permalink
Allow shader input indices from defined constants
Browse files Browse the repository at this point in the history
  • Loading branch information
Sergio0694 committed Nov 21, 2024
1 parent 44bfa8d commit 4e0864b
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 19 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -62,8 +62,8 @@ public override void Initialize(AnalysisContext context)
return;
}
// This analyzer should only kick in when the target parameter is an 'int', and the argument is not constant
if (operation.Value is ILiteralOperation { ConstantValue.HasValue: true } or IUnaryOperation { ConstantValue.HasValue: true, Operand: ILiteralOperation })
// This analyzer should also only kick in when the argument is not constant
if (operation.Value.ConstantValue.HasValue)
{
return;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1273,16 +1273,16 @@ partial class DiagnosticDescriptors
/// <summary>
/// Gets a <see cref="DiagnosticDescriptor"/> for a D2D intrinsic call with a source input index that is not a constant.
/// <para>
/// Format: <c>"The argument for parameter '{0}' in the call to the D2D intrinsic '{1}' must be a constant value with a literal expression (for instance, 'D2D.GetInput(0)' is valid, whereas 'D2D.GetInput(x)' or 'D2D.GetInput(ConstantIndex)' are not)"</c>.
/// Format: <c>"The argument for parameter '{0}' in the call to the D2D intrinsic '{1}' must be a constant value (for instance, 'D2D.GetInput(0)' is valid, whereas 'D2D.GetInput(x)' is not)"</c>.
/// </para>
/// </summary>
public static readonly DiagnosticDescriptor NonConstantSourceInputIndexForD2DIntrinsic = new(
id: "CMPSD2D0085",
title: "Non constant input index for D2D intrinsic",
messageFormat: "The argument for parameter '{0}' in the call to the D2D intrinsic '{1}' must be a constant value with a literal expression (for instance, 'D2D.GetInput(0)' is valid, whereas 'D2D.GetInput(x)' or 'D2D.GetInput(ConstantIndex)' are not)",
messageFormat: "The argument for parameter '{0}' in the call to the D2D intrinsic '{1}' must be a constant value (for instance, 'D2D.GetInput(0)' is valid, whereas 'D2D.GetInput(x)' is not)",
category: "ComputeSharp.D2D1.Shaders",
defaultSeverity: DiagnosticSeverity.Error,
isEnabledByDefault: true,
description: "Arguments for parameters indicating the source shader input index in calls to D2D intrinsics must be constant values with a literal expression (for instance, 'D2D.GetInput(0)' is valid, whereas 'D2D.GetInput(x)' or 'D2D.GetInput(ConstantIndex)' are not).",
description: "Arguments for parameters indicating the source shader input index in calls to D2D intrinsics must be constant values (for instance, 'D2D.GetInput(0)' is valid, whereas 'D2D.GetInput(x)' is not).",
helpLinkUri: "https://github.com/Sergio0694/ComputeSharp");
}
Original file line number Diff line number Diff line change
Expand Up @@ -1444,7 +1444,7 @@ public float4 Execute()
}

[TestMethod]
public async Task NonConstantSourceInputIndexForD2DIntrinsic_NonConstantExpression_Warns()
public async Task NonConstantSourceInputIndexForD2DIntrinsic_NonLiteralConstant_DoesNotWarn()
{
const string source = """
using ComputeSharp.D2D1;
Expand All @@ -1453,13 +1453,15 @@ public async Task NonConstantSourceInputIndexForD2DIntrinsic_NonConstantExpressi
[D2DInputCount(1)]
internal readonly partial struct MyType(int x) : ID2D1PixelShader
{
public const int SourceIndex = 0;

public float4 Execute()
{
D2D.GetInput({|CMPSD2D0085:x|});
D2D.GetInputCoordinate({|CMPSD2D0085:x|});
D2D.SampleInput({|CMPSD2D0085:x|}, 0);
D2D.SampleInputAtOffset({|CMPSD2D0085:x|}, 0);
D2D.SampleInputAtPosition({|CMPSD2D0085:x|}, 0);
D2D.GetInput(SourceIndex);
D2D.GetInputCoordinate(SourceIndex);
D2D.SampleInput(SourceIndex, 0);
D2D.SampleInputAtOffset(SourceIndex, 0);
D2D.SampleInputAtPosition(SourceIndex, 0);

return 0;
}
Expand All @@ -1470,7 +1472,7 @@ public float4 Execute()
}

[TestMethod]
public async Task NonConstantSourceInputIndexForD2DIntrinsic_NonLiteralConstant_Warns()
public async Task NonConstantSourceInputIndexForD2DIntrinsic_NonConstantExpression_Warns()
{
const string source = """
using ComputeSharp.D2D1;
Expand All @@ -1479,15 +1481,13 @@ public async Task NonConstantSourceInputIndexForD2DIntrinsic_NonLiteralConstant_
[D2DInputCount(1)]
internal readonly partial struct MyType(int x) : ID2D1PixelShader
{
public const int SourceIndex = 0;

public float4 Execute()
{
D2D.GetInput({|CMPSD2D0085:SourceIndex|});
D2D.GetInputCoordinate({|CMPSD2D0085:SourceIndex|});
D2D.SampleInput({|CMPSD2D0085:SourceIndex|}, 0);
D2D.SampleInputAtOffset({|CMPSD2D0085:SourceIndex|}, 0);
D2D.SampleInputAtPosition({|CMPSD2D0085:SourceIndex|}, 0);
D2D.GetInput({|CMPSD2D0085:x|});
D2D.GetInputCoordinate({|CMPSD2D0085:x|});
D2D.SampleInput({|CMPSD2D0085:x|}, 0);
D2D.SampleInputAtOffset({|CMPSD2D0085:x|}, 0);
D2D.SampleInputAtPosition({|CMPSD2D0085:x|}, 0);

return 0;
}
Expand Down

0 comments on commit 4e0864b

Please sign in to comment.