From 52ceff4beee7cdc7d47eb9292a35e9f610a80bdc Mon Sep 17 00:00:00 2001 From: "YONGH\\yongh" Date: Wed, 25 Oct 2017 17:59:45 -0400 Subject: add new test mode: COMPARE_RENDER_COMPUTE, which runs a input vertex/fragment shader pair, but instead of comparing the resulting framebuffer, it expects the test shader to write results into a UAV, and compares the pixel shader UAV output to the reference output. --- tests/compute/textureSamplingTest.slang | 103 ++++++++++++++++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 tests/compute/textureSamplingTest.slang (limited to 'tests/compute/textureSamplingTest.slang') diff --git a/tests/compute/textureSamplingTest.slang b/tests/compute/textureSamplingTest.slang new file mode 100644 index 000000000..c715ec89e --- /dev/null +++ b/tests/compute/textureSamplingTest.slang @@ -0,0 +1,103 @@ +//TEST(smoke,compute):COMPARE_RENDER_COMPUTE: +//TEST_INPUT: Texture1D(size=4, content = one) : dxbinding(0),glbinding(0) +//TEST_INPUT: Texture2D(size=4, content = one) : dxbinding(1),glbinding(1) +//TEST_INPUT: Texture3D(size=4, content = one) : dxbinding(2),glbinding(2) +//TEST_INPUT: TextureCube(size=4, content = one) : dxbinding(3),glbinding(3) +//TEST_INPUT: Texture1D(size=4, content = one, arrayLength=2) : dxbinding(4),glbinding(4) +//TEST_INPUT: Texture2D(size=4, content = one, arrayLength=2) : dxbinding(5),glbinding(5) +//TEST_INPUT: TextureCube(size=4, content = one, arrayLength=2) : dxbinding(6),glbinding(6) +//TEST_INPUT: Sampler : dxbinding(0),glbinding(0,1,2,3,4,5,6) +//TEST_INPUT: ubuffer(data=[0], stride=4):dxbinding(1),glbinding(0),out + + +Texture1D t1D; +Texture2D t2D; +Texture3D t3D; +TextureCube tCube; +Texture1DArray t1dArray; +Texture2DArray t2dArray; +TextureCubeArray tCubeArray; +SamplerState samplerState; +RWStructuredBuffer outputBuffer; + +cbuffer Uniforms +{ + float4x4 modelViewProjection; +} + +struct AssembledVertex +{ + float3 position; + float3 color; + float2 uv; +}; + +struct CoarseVertex +{ + float3 color; + float2 uv; +}; + +struct Fragment +{ + float4 color; +}; + + +// Vertex Shader + +struct VertexStageInput +{ + AssembledVertex assembledVertex : A; +}; + +struct VertexStageOutput +{ + CoarseVertex coarseVertex : CoarseVertex; + float4 sv_position : SV_Position; +}; + +VertexStageOutput vertexMain(VertexStageInput input) +{ + VertexStageOutput output; + + float3 position = input.assembledVertex.position; + float3 color = input.assembledVertex.color; + + output.coarseVertex.color = color; + output.sv_position = mul(modelViewProjection, float4(position, 1.0)); + output.coarseVertex.uv = input.assembledVertex.uv; + return output; +} + +// Fragment Shader + +struct FragmentStageInput +{ + CoarseVertex coarseVertex : CoarseVertex; +}; + +struct FragmentStageOutput +{ + Fragment fragment : SV_Target; +}; + +FragmentStageOutput fragmentMain(FragmentStageInput input) +{ + FragmentStageOutput output; + + float3 color = input.coarseVertex.color; + float2 uv = input.coarseVertex.uv; + output.fragment.color = float4(color, 1.0); + + float4 val = 0.0; + val += t1D.Sample(samplerState, uv.x); + val += t2D.Sample(samplerState, uv); + val += t3D.Sample (samplerState, float3(uv, 0.5)); + val += t1dArray.Sample(samplerState, float2(uv.x, 0.0)); + val += t2dArray.Sample(samplerState, float3(uv, 0.0)); + val += tCubeArray.Sample(samplerState, float4(uv, 0.5, 0.0)); + val += tCube.Sample(samplerState, float3(uv, 0.5)); + outputBuffer[0] = val.x; + return output; +} \ No newline at end of file -- cgit v1.2.3 From cb8369849a198ea330a0b82f805d6b4a00ebc50b Mon Sep 17 00:00:00 2001 From: "YONGH\\yongh" Date: Wed, 25 Oct 2017 20:13:45 -0400 Subject: test --- tests/compute/textureSamplingTest.slang | 2 +- tools/slang-test/main.cpp | 53 +++++++++++++++++++-------------- 2 files changed, 31 insertions(+), 24 deletions(-) (limited to 'tests/compute/textureSamplingTest.slang') diff --git a/tests/compute/textureSamplingTest.slang b/tests/compute/textureSamplingTest.slang index c715ec89e..1aa267b89 100644 --- a/tests/compute/textureSamplingTest.slang +++ b/tests/compute/textureSamplingTest.slang @@ -1,4 +1,4 @@ -//TEST(smoke,compute):COMPARE_RENDER_COMPUTE: +//TEST(compute):COMPARE_RENDER_COMPUTE: //TEST_INPUT: Texture1D(size=4, content = one) : dxbinding(0),glbinding(0) //TEST_INPUT: Texture2D(size=4, content = one) : dxbinding(1),glbinding(1) //TEST_INPUT: Texture3D(size=4, content = one) : dxbinding(2),glbinding(2) diff --git a/tools/slang-test/main.cpp b/tools/slang-test/main.cpp index de75fa68c..1b0fa4235 100644 --- a/tools/slang-test/main.cpp +++ b/tools/slang-test/main.cpp @@ -1116,7 +1116,7 @@ TestResult runGLSLComparisonTest(TestInput& input) return kTestResult_Pass; } -TestResult doComputeComparisonTestRunImpl(TestInput& input, const char * langOption, String referenceOutput) +TestResult runComputeComparisonImpl(TestInput& input, const char * langOption, String referenceOutput) { // TODO: delete any existing files at the output path(s) to avoid stale outputs leading to a false pass auto filePath999 = input.filePath; @@ -1138,32 +1138,36 @@ TestResult doComputeComparisonTestRunImpl(TestInput& input, const char * langOpt if (spawnAndWait(outputStem, spawner) != kOSError_None) { + fprintf(stderr, "error spawning render-test\n"); return kTestResult_Fail; } auto actualOutput = getOutput(spawner); - auto expectedOutput = getExpectedOutput(outputStem); - if(actualOutput != expectedOutput) - { - String actualOutputPath = outputStem + ".actual"; - Slang::File::WriteAllText(actualOutputPath, actualOutput); - - maybeDumpOutput(expectedOutput, actualOutput); - - return kTestResult_Fail; - } - // check against reference output - if (!File::Exists(outputStem + ".actual.txt")) + if (!File::Exists(outputStem + ".actual.txt")) + { + fprintf(stderr, "render-test not producing expected outputs.\n"); + fprintf(stderr, "render-test output:\n%s\n", actualOutput.Buffer()); return kTestResult_Fail; - if (!File::Exists(referenceOutput)) + } + if (!File::Exists(referenceOutput)) + { + fprintf(stderr, "referenceOutput %s not found.\n", referenceOutput.Buffer()); return kTestResult_Fail; - - auto actualProgramOutput = Split(File::ReadAllText(outputStem + ".actual.txt"), '\n'); + } + auto actualOutputContent = File::ReadAllText(outputStem + ".actual.txt"); + auto actualProgramOutput = Split(actualOutputContent, '\n'); auto referenceProgramOutput = Split(File::ReadAllText(referenceOutput), '\n'); - if (actualProgramOutput.Count() < referenceProgramOutput.Count()) + auto printOutput = [&]() + { + fprintf(stderr, "output mismatch! actual output: {\n%s\n}, \n%s\n", actualOutputContent.Buffer(), actualOutput.Buffer()); + }; + if (actualProgramOutput.Count() < referenceProgramOutput.Count()) + { + printOutput(); return kTestResult_Fail; + } for (int i = 0; i < (int)referenceProgramOutput.Count(); i++) { auto reference = referenceProgramOutput[i]; @@ -1174,7 +1178,10 @@ TestResult doComputeComparisonTestRunImpl(TestInput& input, const char * langOpt auto val = StringToFloat(reference); auto uval = String((unsigned int)FloatAsInt(val), 16).ToUpper(); if (actual != uval) + { + printOutput(); return kTestResult_Fail; + } else return kTestResult_Pass; } @@ -1182,14 +1189,14 @@ TestResult doComputeComparisonTestRunImpl(TestInput& input, const char * langOpt return kTestResult_Pass; } -TestResult doSlangComputeComparisonTest(TestInput& input) +TestResult runSlangComputeComparisonTest(TestInput& input) { - return doComputeComparisonTestRunImpl(input, "-slang -compute", input.outputStem + ".expected.txt"); + return runComputeComparisonImpl(input, "-slang -compute", input.outputStem + ".expected.txt"); } -TestResult doSlangRenderComputeComparisonTest(TestInput& input) +TestResult runSlangRenderComputeComparisonTest(TestInput& input) { - return doComputeComparisonTestRunImpl(input, "-slang -gcompute", input.outputStem + ".expected.txt"); + return runComputeComparisonImpl(input, "-slang -gcompute", input.outputStem + ".expected.txt"); } TestResult doRenderComparisonTestRun(TestInput& input, char const* langOption, char const* outputKind, String* outOutput) @@ -1390,8 +1397,8 @@ TestResult runTest( { "COMPARE_HLSL_RENDER", &runHLSLRenderComparisonTest }, { "COMPARE_HLSL_CROSS_COMPILE_RENDER", &runHLSLCrossCompileRenderComparisonTest}, { "COMPARE_HLSL_GLSL_RENDER", &runHLSLAndGLSLComparisonTest }, - { "COMPARE_COMPUTE", &doSlangComputeComparisonTest}, - { "COMPARE_RENDER_COMPUTE", &doSlangRenderComputeComparisonTest }, + { "COMPARE_COMPUTE", runSlangComputeComparisonTest}, + { "COMPARE_RENDER_COMPUTE", &runSlangRenderComputeComparisonTest }, #else { "COMPARE_HLSL", &skipTest }, -- cgit v1.2.3 From 052645e313b66d92873a0fde112bd8587b2070ac Mon Sep 17 00:00:00 2001 From: "YONGH\\yongh" Date: Wed, 25 Oct 2017 21:03:52 -0400 Subject: test --- tests/compute/textureSamplingTest.slang | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'tests/compute/textureSamplingTest.slang') diff --git a/tests/compute/textureSamplingTest.slang b/tests/compute/textureSamplingTest.slang index 1aa267b89..6dcc6b439 100644 --- a/tests/compute/textureSamplingTest.slang +++ b/tests/compute/textureSamplingTest.slang @@ -98,6 +98,6 @@ FragmentStageOutput fragmentMain(FragmentStageInput input) val += t2dArray.Sample(samplerState, float3(uv, 0.0)); val += tCubeArray.Sample(samplerState, float4(uv, 0.5, 0.0)); val += tCube.Sample(samplerState, float3(uv, 0.5)); - outputBuffer[0] = val.x; + outputBuffer[0] = 7.0;//val.x; return output; } \ No newline at end of file -- cgit v1.2.3 From ab1009c21efb25e535ad0de043e4353f3711711f Mon Sep 17 00:00:00 2001 From: "YONGH\\yongh" Date: Wed, 25 Oct 2017 21:08:29 -0400 Subject: test --- tests/compute/textureSamplingTest.slang | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'tests/compute/textureSamplingTest.slang') diff --git a/tests/compute/textureSamplingTest.slang b/tests/compute/textureSamplingTest.slang index 6dcc6b439..76eebdf03 100644 --- a/tests/compute/textureSamplingTest.slang +++ b/tests/compute/textureSamplingTest.slang @@ -93,11 +93,11 @@ FragmentStageOutput fragmentMain(FragmentStageInput input) float4 val = 0.0; val += t1D.Sample(samplerState, uv.x); val += t2D.Sample(samplerState, uv); - val += t3D.Sample (samplerState, float3(uv, 0.5)); - val += t1dArray.Sample(samplerState, float2(uv.x, 0.0)); - val += t2dArray.Sample(samplerState, float3(uv, 0.0)); - val += tCubeArray.Sample(samplerState, float4(uv, 0.5, 0.0)); - val += tCube.Sample(samplerState, float3(uv, 0.5)); - outputBuffer[0] = 7.0;//val.x; + //val += t3D.Sample (samplerState, float3(uv, 0.5)); + //val += t1dArray.Sample(samplerState, float2(uv.x, 0.0)); + //val += t2dArray.Sample(samplerState, float3(uv, 0.0)); + //val += tCubeArray.Sample(samplerState, float4(uv, 0.5, 0.0)); + //val += tCube.Sample(samplerState, float3(uv, 0.5)); + outputBuffer[0] = 5.0 + val.x; return output; } \ No newline at end of file -- cgit v1.2.3 From 9a120fc43ff31f93ac09075d9b7dd42af27ee350 Mon Sep 17 00:00:00 2001 From: "YONGH\\yongh" Date: Wed, 25 Oct 2017 21:32:28 -0400 Subject: test --- tests/compute/textureSamplingTest.slang | 4 ++-- tools/render-test/render-d3d11.cpp | 20 +++++++++----------- 2 files changed, 11 insertions(+), 13 deletions(-) (limited to 'tests/compute/textureSamplingTest.slang') diff --git a/tests/compute/textureSamplingTest.slang b/tests/compute/textureSamplingTest.slang index 76eebdf03..1661e6e3c 100644 --- a/tests/compute/textureSamplingTest.slang +++ b/tests/compute/textureSamplingTest.slang @@ -92,12 +92,12 @@ FragmentStageOutput fragmentMain(FragmentStageInput input) float4 val = 0.0; val += t1D.Sample(samplerState, uv.x); - val += t2D.Sample(samplerState, uv); + //val += t2D.Sample(samplerState, uv); //val += t3D.Sample (samplerState, float3(uv, 0.5)); //val += t1dArray.Sample(samplerState, float2(uv.x, 0.0)); //val += t2dArray.Sample(samplerState, float3(uv, 0.0)); //val += tCubeArray.Sample(samplerState, float4(uv, 0.5, 0.0)); //val += tCube.Sample(samplerState, float3(uv, 0.5)); - outputBuffer[0] = 5.0 + val.x; + outputBuffer[0] = 6.0 + val.x; return output; } \ No newline at end of file diff --git a/tools/render-test/render-d3d11.cpp b/tools/render-test/render-d3d11.cpp index 3f0a8cc53..faa85556e 100644 --- a/tools/render-test/render-d3d11.cpp +++ b/tools/render-test/render-d3d11.cpp @@ -875,10 +875,10 @@ public: if (inputDesc.dimension == 1) { D3D11_TEXTURE1D_DESC desc = { 0 }; - desc.BindFlags = D3D11_BIND_SHADER_RESOURCE | D3D11_BIND_RENDER_TARGET | D3D11_BIND_UNORDERED_ACCESS; - desc.CPUAccessFlags = D3D11_CPU_ACCESS_READ | D3D11_CPU_ACCESS_WRITE; + desc.BindFlags = D3D11_BIND_SHADER_RESOURCE; + desc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE; desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; - desc.MiscFlags = D3D11_RESOURCE_MISC_GENERATE_MIPS; + desc.MiscFlags = 0; desc.MipLevels = texData.mipLevels; desc.ArraySize = texData.arraySize; desc.Width = texData.textureSize; @@ -904,10 +904,10 @@ public: { D3D11_SHADER_RESOURCE_VIEW_DESC viewDesc; D3D11_TEXTURE2D_DESC desc = { 0 }; - desc.BindFlags = D3D11_BIND_SHADER_RESOURCE | D3D11_BIND_RENDER_TARGET | D3D11_BIND_UNORDERED_ACCESS; - desc.CPUAccessFlags = D3D11_CPU_ACCESS_READ | D3D11_CPU_ACCESS_WRITE; + desc.BindFlags = D3D11_BIND_SHADER_RESOURCE; + desc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE; desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; - desc.MiscFlags = D3D11_RESOURCE_MISC_GENERATE_MIPS; + desc.MiscFlags = 0; desc.MipLevels = texData.mipLevels; desc.ArraySize = texData.arraySize; if (inputDesc.isCube) @@ -947,10 +947,10 @@ public: { D3D11_SHADER_RESOURCE_VIEW_DESC viewDesc; D3D11_TEXTURE3D_DESC desc = { 0 }; - desc.BindFlags = D3D11_BIND_SHADER_RESOURCE | D3D11_BIND_RENDER_TARGET | D3D11_BIND_UNORDERED_ACCESS; - desc.CPUAccessFlags = D3D11_CPU_ACCESS_READ | D3D11_CPU_ACCESS_WRITE; + desc.BindFlags = D3D11_BIND_SHADER_RESOURCE; + desc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE; desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; - desc.MiscFlags = D3D11_RESOURCE_MISC_GENERATE_MIPS; + desc.MiscFlags = 0; desc.MipLevels = 1; viewDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE3D; desc.Width = texData.textureSize; @@ -959,8 +959,6 @@ public: desc.Usage = D3D11_USAGE_DEFAULT; ID3D11Texture3D * texture; dxDevice->CreateTexture3D(&desc, subRes.Buffer(), &texture); - if (inputDesc.arrayLength != 0) - viewDesc.ViewDimension = (D3D11_SRV_DIMENSION)(int)(viewDesc.ViewDimension + 1); viewDesc.Texture3D.MipLevels = 1; viewDesc.Texture3D.MostDetailedMip = 0; viewDesc.Format = desc.Format; -- cgit v1.2.3 From 1981c920f3eb40e303af264aa256147cba74e6ab Mon Sep 17 00:00:00 2001 From: "YONGH\\yongh" Date: Wed, 25 Oct 2017 22:23:02 -0400 Subject: render-test code cleanup --- tests/compute/textureSamplingTest.slang | 14 +++++++------- tools/render-test/render-d3d11.cpp | 3 --- 2 files changed, 7 insertions(+), 10 deletions(-) (limited to 'tests/compute/textureSamplingTest.slang') diff --git a/tests/compute/textureSamplingTest.slang b/tests/compute/textureSamplingTest.slang index 1661e6e3c..1aa267b89 100644 --- a/tests/compute/textureSamplingTest.slang +++ b/tests/compute/textureSamplingTest.slang @@ -92,12 +92,12 @@ FragmentStageOutput fragmentMain(FragmentStageInput input) float4 val = 0.0; val += t1D.Sample(samplerState, uv.x); - //val += t2D.Sample(samplerState, uv); - //val += t3D.Sample (samplerState, float3(uv, 0.5)); - //val += t1dArray.Sample(samplerState, float2(uv.x, 0.0)); - //val += t2dArray.Sample(samplerState, float3(uv, 0.0)); - //val += tCubeArray.Sample(samplerState, float4(uv, 0.5, 0.0)); - //val += tCube.Sample(samplerState, float3(uv, 0.5)); - outputBuffer[0] = 6.0 + val.x; + val += t2D.Sample(samplerState, uv); + val += t3D.Sample (samplerState, float3(uv, 0.5)); + val += t1dArray.Sample(samplerState, float2(uv.x, 0.0)); + val += t2dArray.Sample(samplerState, float3(uv, 0.0)); + val += tCubeArray.Sample(samplerState, float4(uv, 0.5, 0.0)); + val += tCube.Sample(samplerState, float3(uv, 0.5)); + outputBuffer[0] = val.x; return output; } \ No newline at end of file diff --git a/tools/render-test/render-d3d11.cpp b/tools/render-test/render-d3d11.cpp index 3bb9d3e4e..ee34445d0 100644 --- a/tools/render-test/render-d3d11.cpp +++ b/tools/render-test/render-d3d11.cpp @@ -393,8 +393,6 @@ public: dxRenderTargetTextures.Add(texture); } - // We immediately bind the back-buffer render target view, and we aren't - // going to switch. We don't bother with a depth buffer. dxImmediateContext->OMSetRenderTargets( dxRenderTargetViews.Count(), dxRenderTargetViews.Buffer(), @@ -1095,7 +1093,6 @@ public: } id++; } - fprintf(f, "test result. \n"); fclose(f); } }; -- cgit v1.2.3