diff --git a/test/Graphics/DdxCoarse.test b/test/Graphics/DdxCoarse.test new file mode 100644 index 000000000..0deadc9a9 --- /dev/null +++ b/test/Graphics/DdxCoarse.test @@ -0,0 +1,95 @@ +#--- vertex.hlsl +struct PSInput +{ + float4 position : SV_POSITION; +}; + +PSInput main(float4 position : POSITION) +{ + PSInput result; + + result.position = position; + + return result; +} + + +#--- pixel.hlsl + +// Offset into the image of our circle +#define offset 128.0 +// Radius of our circle +#define radius 32.0 +// Blur intensity +#define intensity 5.0 + +struct PSInput +{ + float4 position : SV_POSITION; +}; + +float4 main(PSInput input) : SV_TARGET +{ + float4 c1 = float4(1.0, 1.0, 1.0, 1.0); + float4 c2 = float4(0.0, 0.0, 0.0, 1.0); + + float2 coord = input.position.xy - offset; + + float dist = length(coord) - radius; + float ddx = abs(ddx_coarse(dist)); + float effect = clamp(dist / ddx / intensity, 0.0, 1.0); + + float result = lerp(c1, c2, effect); + + return float4(result, result, result, 1.0); +} +#--- pipeline.yaml +--- +Shaders: + - Stage: Vertex + Entry: main + - Stage: Pixel + Entry: main +Buffers: + - Name: VertexData + Format: Float32 + Stride: 12 # 16 bytes per vertex + Data: [ -1.0, -1.0, 0.0, + -1.0, 1.0, 0.0, + 1.0, 1.0, 0.0, + 1.0, 1.0, 0.0, + 1.0, -1.0, 0.0, + -1.0, -1.0, 0.0 ] + - Name: Output + Format: Float32 + Channels: 4 + FillSize: 1048576 # 256x256 @ 16 bytes per pixel + OutputProps: + Height: 256 + Width: 256 + Depth: 16 +Bindings: + VertexBuffer: VertexData + VertexAttributes: + - Format: Float32 + Channels: 3 + Offset: 0 + Name: POSITION + RenderTarget: Output +DescriptorSets: [] +... +#--- rules.yaml +--- +- Type: PixelPercent + Val: 0.2 # No more than 0.2% of pixels may be visibly different. +... +#--- end + +# UNSUPPORTED: Clang +# REQUIRES: goldenimage + +# RUN: split-file %s %t +# RUN: %dxc_target -T vs_6_0 -Fo %t-vertex.o %t/vertex.hlsl +# RUN: %dxc_target -T ps_6_0 -Fo %t-pixel.o %t/pixel.hlsl +# RUN: %offloader %t/pipeline.yaml %t-vertex.o %t-pixel.o -r Output -o %t/Output.png +# RUN: imgdiff %t/Output.png %goldenimage_dir/hlsl/Graphics/DdxCoarse.png -rules %t/rules.yaml diff --git a/test/Graphics/DdyCoarse.test b/test/Graphics/DdyCoarse.test new file mode 100644 index 000000000..314a6262c --- /dev/null +++ b/test/Graphics/DdyCoarse.test @@ -0,0 +1,95 @@ +#--- vertex.hlsl +struct PSInput +{ + float4 position : SV_POSITION; +}; + +PSInput main(float4 position : POSITION) +{ + PSInput result; + + result.position = position; + + return result; +} + + +#--- pixel.hlsl + +// Offset into the image of our circle +#define offset 128.0 +// Radius of our circle +#define radius 32.0 +// Blur intensity +#define intensity 5.0 + +struct PSInput +{ + float4 position : SV_POSITION; +}; + +float4 main(PSInput input) : SV_TARGET +{ + float4 c1 = float4(1.0, 1.0, 1.0, 1.0); + float4 c2 = float4(0.0, 0.0, 0.0, 1.0); + + float2 coord = input.position.xy - offset; + + float dist = length(coord) - radius; + float ddy = abs(ddy_coarse(dist)); + float effect = clamp(dist / ddy / intensity, 0.0, 1.0); + + float result = lerp(c1, c2, effect); + + return float4(result, result, result, 1.0); +} +#--- pipeline.yaml +--- +Shaders: + - Stage: Vertex + Entry: main + - Stage: Pixel + Entry: main +Buffers: + - Name: VertexData + Format: Float32 + Stride: 12 # 16 bytes per vertex + Data: [ -1.0, -1.0, 0.0, + -1.0, 1.0, 0.0, + 1.0, 1.0, 0.0, + 1.0, 1.0, 0.0, + 1.0, -1.0, 0.0, + -1.0, -1.0, 0.0 ] + - Name: Output + Format: Float32 + Channels: 4 + FillSize: 1048576 # 256x256 @ 16 bytes per pixel + OutputProps: + Height: 256 + Width: 256 + Depth: 16 +Bindings: + VertexBuffer: VertexData + VertexAttributes: + - Format: Float32 + Channels: 3 + Offset: 0 + Name: POSITION + RenderTarget: Output +DescriptorSets: [] +... +#--- rules.yaml +--- +- Type: PixelPercent + Val: 0.2 # No more than 0.2% of pixels may be visibly different. +... +#--- end + +# UNSUPPORTED: Clang +# REQUIRES: goldenimage + +# RUN: split-file %s %t +# RUN: %dxc_target -T vs_6_0 -Fo %t-vertex.o %t/vertex.hlsl +# RUN: %dxc_target -T ps_6_0 -Fo %t-pixel.o %t/pixel.hlsl +# RUN: %offloader %t/pipeline.yaml %t-vertex.o %t-pixel.o -r Output -o %t/Output.png +# RUN: imgdiff %t/Output.png %goldenimage_dir/hlsl/Graphics/DdyCoarse.png -rules %t/rules.yaml