| 12 | using namespace Tr2RenderContextEnum; |
| 13 | |
| 14 | TEST_F( Compute, CanReadCSResult ) |
| 15 | { |
| 16 | ENSURE_GPU_OR_SKIP |
| 17 | uint8_t vsBytecode[] = { |
| 18 | #include INCLUDE_SHADER_CODE( OutputVector.cs ) |
| 19 | }; |
| 20 | |
| 21 | auto signature = Tr2ShaderSignatureAL() |
| 22 | .Add( Tr2ShaderRegisterAL::UAV_BUFFER, 0 ) |
| 23 | .Add( Tr2ShaderThreadGroupSizeAL( 1, 1, 1 ) ); |
| 24 | Tr2ShaderAL cs; |
| 25 | ASSERT_HRESULT_SUCCEEDED( cs.Create( COMPUTE_SHADER, vsBytecode, signature, "", *renderContext ) ); |
| 26 | |
| 27 | Tr2ShaderAL shaders[] = { cs }; |
| 28 | Tr2ShaderProgramAL sp; |
| 29 | ASSERT_HRESULT_SUCCEEDED( sp.Create( shaders, 1, *renderContext ) ); |
| 30 | |
| 31 | Tr2BufferAL output; |
| 32 | ASSERT_HRESULT_SUCCEEDED( output.Create( PIXEL_FORMAT_R32G32B32A32_FLOAT, 1, Tr2GpuUsage::UNORDERED_ACCESS, Tr2CpuUsage::READ, nullptr, *renderContext ) ); |
| 33 | |
| 34 | Tr2ResourceSetDescriptionAL desc( sp ); |
| 35 | desc.SetUav( Tr2RenderContextEnum::COMPUTE_SHADER, 0, output ); |
| 36 | Tr2ResourceSetAL resourceSet; |
| 37 | ASSERT_HRESULT_SUCCEEDED( resourceSet.Create( desc, sp, *renderContext ) ); |
| 38 | |
| 39 | ASSERT_HRESULT_SUCCEEDED( renderContext->SetResourceSet( resourceSet ) ); |
| 40 | ASSERT_HRESULT_SUCCEEDED( renderContext->SetShaderProgram( sp ) ); |
| 41 | |
| 42 | ASSERT_HRESULT_SUCCEEDED( renderContext->RunComputeShader( 1, 1, 1 ) ); |
| 43 | |
| 44 | ASSERT_HRESULT_SUCCEEDED( renderContext->SetResourceSet( Tr2ResourceSetAL() ) ); |
| 45 | |
| 46 | const float* data; |
| 47 | ASSERT_HRESULT_SUCCEEDED( output.MapForReading( data, *renderContext ) ); |
| 48 | |
| 49 | EXPECT_EQ( 1.0f, data[0] ); |
| 50 | EXPECT_EQ( 2.0f, data[1] ); |
| 51 | EXPECT_EQ( 3.0f, data[2] ); |
| 52 | EXPECT_EQ( 4.0f, data[3] ); |
| 53 | output.UnmapForReading( *renderContext ); |
| 54 | } |
| 55 | |
| 56 | |
| 57 | TEST_F( Compute, DISABLED_CanAddInCS ) |
nothing calls this directly
no test coverage detected