Skip to content

Commit fdef502

Browse files
authored
Merge pull request #442 from aws-lumberyard-dev/cgalvan/gitflow_220509_atomsampleviewer_main
Merged `stabilization/2205` to `main`
2 parents 2f9af5c + 6e4be16 commit fdef502

File tree

227 files changed

+7396
-3197
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

227 files changed

+7396
-3197
lines changed

AssetProcessorGamePlatformConfig.setreg

Lines changed: 0 additions & 22 deletions
This file was deleted.

CMakeLists.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,12 @@
88

99
if(NOT PROJECT_NAME)
1010
cmake_minimum_required(VERSION 3.19)
11+
include(cmake/CompilerSettings.cmake)
1112
project(AtomSampleViewer
1213
LANGUAGES C CXX
1314
VERSION 1.0.0.0
1415
)
15-
include(EngineFinder.cmake OPTIONAL)
16+
include(cmake/EngineFinder.cmake OPTIONAL)
1617
find_package(o3de REQUIRED)
1718
o3de_initialize()
1819
else()

Gem/Code/Source/AssetLoadTestComponent.cpp

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,12 @@
1616

1717
#include <Automation/ScriptRunnerBus.h>
1818

19-
#include <AzCore/Debug/EventTrace.h>
2019
#include <AzCore/Serialization/SerializeContext.h>
2120

2221
#include <RHI/BasicRHIComponent.h>
2322

23+
AZ_DECLARE_BUDGET(AtomSampleViewer);
24+
2425
namespace AtomSampleViewer
2526
{
2627
using namespace AZ;
@@ -57,9 +58,7 @@ namespace AtomSampleViewer
5758
{
5859
"materials/defaultpbr.azmaterial",
5960
"materials/presets/pbr/metal_aluminum_polished.azmaterial",
60-
"shaders/staticmesh_colorr.azmaterial",
61-
"shaders/staticmesh_colorg.azmaterial",
62-
"shaders/staticmesh_colorb.azmaterial"
61+
"materials/basic_grey.azmaterial"
6362
};
6463
m_materialBrowser.SetDefaultPinnedAssets(defaultMaterialAllowlist);
6564

@@ -241,7 +240,7 @@ namespace AtomSampleViewer
241240

242241
void AssetLoadTestComponent::OnTick([[maybe_unused]] float deltaTime, [[maybe_unused]] AZ::ScriptTimePoint scriptTime)
243242
{
244-
AZ_TRACE_METHOD();
243+
AZ_PROFILE_FUNCTION(AtomSampleViewer);
245244

246245
const float timeSeconds = static_cast<float>(scriptTime.GetSeconds());
247246

Gem/Code/Source/AtomSampleViewerModule.cpp

Lines changed: 5 additions & 129 deletions
Original file line numberDiff line numberDiff line change
@@ -9,73 +9,11 @@
99
#include <AzCore/Module/Module.h>
1010
#include <AzCore/Memory/SystemAllocator.h>
1111

12-
#include <AreaLightExampleComponent.h>
13-
#include <AssetLoadTestComponent.h>
14-
#include <AuxGeomExampleComponent.h>
1512
#include <AtomSampleViewerSystemComponent.h>
16-
#include <BakedShaderVariantExampleComponent.h>
17-
#include <SponzaBenchmarkComponent.h>
18-
#include <BloomExampleComponent.h>
19-
#include <CheckerboardExampleComponent.h>
20-
#include <CullingAndLodExampleComponent.h>
21-
#include <MultiRenderPipelineExampleComponent.h>
22-
#include <MultiSceneExampleComponent.h>
23-
#include <MultiViewSingleSceneAuxGeomExampleComponent.h>
24-
#include <DepthOfFieldExampleComponent.h>
25-
#include <DecalExampleComponent.h>
26-
#include <DynamicDrawExampleComponent.h>
27-
#include <DynamicMaterialTestComponent.h>
28-
#include <MaterialHotReloadTestComponent.h>
29-
#include <ExposureExampleComponent.h>
30-
#include <LightCullingExampleComponent.h>
31-
#include <MeshExampleComponent.h>
32-
#include <MSAA_RPI_ExampleComponent.h>
33-
#include <ParallaxMappingExampleComponent.h>
3413
#include <SampleComponentManager.h>
35-
#include <SceneReloadSoakTestComponent.h>
36-
#include <ShadingExampleComponent.h>
37-
#include <ShadowExampleComponent.h>
38-
#include <ShadowedSponzaExampleComponent.h>
39-
#include <SkinnedMeshExampleComponent.h>
40-
#include <SsaoExampleComponent.h>
41-
#include <StreamingImageExampleComponent.h>
42-
#include <RootConstantsExampleComponent.h>
43-
#include <TonemappingExampleComponent.h>
44-
#include <TransparencyExampleComponent.h>
45-
#include <DiffuseGIExampleComponent.h>
46-
#include <SSRExampleComponent.h>
47-
#include <ShaderReloadTestComponent.h>
4814

49-
#include <RHI/AlphaToCoverageExampleComponent.h>
50-
#include <RHI/AsyncComputeExampleComponent.h>
51-
#include <RHI/BindlessPrototypeExampleComponent.h>
52-
#include <RHI/ComputeExampleComponent.h>
53-
#include <RHI/CopyQueueComponent.h>
54-
#include <RHI/IndirectRenderingExampleComponent.h>
55-
#include <RHI/InputAssemblyExampleComponent.h>
56-
#include <RHI/SubpassExampleComponent.h>
57-
#include <RHI/DualSourceBlendingComponent.h>
58-
#include <RHI/MRTExampleComponent.h>
59-
#include <RHI/MSAAExampleComponent.h>
60-
#include <RHI/MultiThreadComponent.h>
61-
#include <RHI/MultiViewportSwapchainComponent.h>
62-
#include <RHI/StencilExampleComponent.h>
63-
#include <RHI/MultipleViewsComponent.h>
64-
#include <RHI/QueryExampleComponent.h>
65-
#include <RHI/SwapchainExampleComponent.h>
66-
#include <RHI/SphericalHarmonicsExampleComponent.h>
67-
#include <RHI/Texture3dExampleComponent.h>
68-
#include <RHI/TextureArrayExampleComponent.h>
69-
#include <RHI/TextureExampleComponent.h>
70-
#include <RHI/TextureMapExampleComponent.h>
71-
#include <RHI/TriangleExampleComponent.h>
72-
#include <RHI/TrianglesConstantBufferExampleComponent.h>
73-
#include <RHI/RayTracingExampleComponent.h>
74-
#include <RHI/MatrixAlignmentTestExampleComponent.h>
7515
#include <AzFramework/Scene/SceneSystemComponent.h>
7616

77-
#include <Atom/Feature/SkinnedMesh/SkinnedMeshInputBuffers.h>
78-
7917
namespace AtomSampleViewer
8018
{
8119
class Module final
@@ -92,73 +30,11 @@ namespace AtomSampleViewer
9230
SampleComponentManager::CreateDescriptor(),
9331
});
9432

95-
// RHI Samples
96-
m_descriptors.insert(m_descriptors.end(), {
97-
AlphaToCoverageExampleComponent::CreateDescriptor(),
98-
AsyncComputeExampleComponent::CreateDescriptor(),
99-
BindlessPrototypeExampleComponent::CreateDescriptor(),
100-
ComputeExampleComponent::CreateDescriptor(),
101-
CopyQueueComponent::CreateDescriptor(),
102-
DualSourceBlendingComponent::CreateDescriptor(),
103-
IndirectRenderingExampleComponent::CreateDescriptor(),
104-
InputAssemblyExampleComponent::CreateDescriptor(),
105-
SubpassExampleComponent::CreateDescriptor(),
106-
MRTExampleComponent::CreateDescriptor(),
107-
MSAAExampleComponent::CreateDescriptor(),
108-
MultiThreadComponent::CreateDescriptor(),
109-
MultipleViewsComponent::CreateDescriptor(),
110-
MultiViewportSwapchainComponent::CreateDescriptor(),
111-
QueryExampleComponent::CreateDescriptor(),
112-
StencilExampleComponent::CreateDescriptor(),
113-
SwapchainExampleComponent::CreateDescriptor(),
114-
SphericalHarmonicsExampleComponent::CreateDescriptor(),
115-
Texture3dExampleComponent::CreateDescriptor(),
116-
TextureArrayExampleComponent::CreateDescriptor(),
117-
TextureExampleComponent::CreateDescriptor(),
118-
TextureMapExampleComponent::CreateDescriptor(),
119-
TriangleExampleComponent::CreateDescriptor(),
120-
TrianglesConstantBufferExampleComponent::CreateDescriptor(),
121-
RayTracingExampleComponent::CreateDescriptor(),
122-
MatrixAlignmentTestExampleComponent::CreateDescriptor()
123-
});
124-
125-
// RPI Samples
126-
m_descriptors.insert(m_descriptors.end(), {
127-
AreaLightExampleComponent::CreateDescriptor(),
128-
AssetLoadTestComponent::CreateDescriptor(),
129-
BakedShaderVariantExampleComponent::CreateDescriptor(),
130-
SponzaBenchmarkComponent::CreateDescriptor(),
131-
BloomExampleComponent::CreateDescriptor(),
132-
CheckerboardExampleComponent::CreateDescriptor(),
133-
CullingAndLodExampleComponent::CreateDescriptor(),
134-
MultiRenderPipelineExampleComponent::CreateDescriptor(),
135-
MultiSceneExampleComponent::CreateDescriptor(),
136-
MultiViewSingleSceneAuxGeomExampleComponent::CreateDescriptor(),
137-
DecalExampleComponent::CreateDescriptor(),
138-
DepthOfFieldExampleComponent::CreateDescriptor(),
139-
DynamicMaterialTestComponent::CreateDescriptor(),
140-
MaterialHotReloadTestComponent::CreateDescriptor(),
141-
ExposureExampleComponent::CreateDescriptor(),
142-
MeshExampleComponent::CreateDescriptor(),
143-
DynamicDrawExampleComponent::CreateDescriptor(),
144-
SceneReloadSoakTestComponent::CreateDescriptor(),
145-
ShadingExampleComponent::CreateDescriptor(),
146-
ShadowExampleComponent::CreateDescriptor(),
147-
ShadowedSponzaExampleComponent::CreateDescriptor(),
148-
SkinnedMeshExampleComponent::CreateDescriptor(),
149-
SsaoExampleComponent::CreateDescriptor(),
150-
LightCullingExampleComponent::CreateDescriptor(),
151-
StreamingImageExampleComponent::CreateDescriptor(),
152-
AuxGeomExampleComponent::CreateDescriptor(),
153-
MSAA_RPI_ExampleComponent::CreateDescriptor(),
154-
RootConstantsExampleComponent::CreateDescriptor(),
155-
TonemappingExampleComponent::CreateDescriptor(),
156-
TransparencyExampleComponent::CreateDescriptor(),
157-
ParallaxMappingExampleComponent::CreateDescriptor(),
158-
DiffuseGIExampleComponent::CreateDescriptor(),
159-
SSRExampleComponent::CreateDescriptor(),
160-
ShaderReloadTestComponent::CreateDescriptor(),
161-
});
33+
AZStd::vector<SampleEntry> samples = SampleComponentManager::GetSamples();
34+
for (const SampleEntry& sample : samples)
35+
{
36+
m_descriptors.emplace_back(sample.m_componentDescriptor);
37+
}
16238
}
16339

16440
~Module() override = default;

Gem/Code/Source/AtomSampleViewerSystemComponent.cpp

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,12 @@
1717
#include <AzCore/Asset/AssetManager.h>
1818
#include <AzCore/Serialization/SerializeContext.h>
1919
#include <AzCore/Component/Entity.h>
20+
#include <AzCore/IO/Path/Path.h>
2021
#include <AzCore/IO/SystemFile.h>
2122

2223
#include <AzFramework/Input/Buses/Requests/InputSystemCursorRequestBus.h>
2324
#include <AzFramework/Input/Devices/Mouse/InputDeviceMouse.h>
25+
#include <AzFramework/IO/LocalFileIO.h>
2426

2527
#include <Atom/Bootstrap/DefaultWindowBus.h>
2628

@@ -36,6 +38,8 @@
3638
#include <Utils/ImGuiSaveFilePath.h>
3739
#include <Utils/Utils.h>
3840

41+
AZ_DEFINE_BUDGET(AtomSampleViewer);
42+
3943
namespace AtomSampleViewer
4044
{
4145
void AtomSampleViewerSystemComponent::Reflect(AZ::ReflectContext* context)
@@ -55,6 +59,10 @@ namespace AtomSampleViewer
5559
StacksShaderInputFunctor::Reflect(context);
5660

5761
ImageComparisonConfig::Reflect(context);
62+
63+
// Abstract base components is used by multiple components and needs to be reflected in a single location.
64+
CommonSampleComponentBase::Reflect(context);
65+
EntityLatticeTestComponent::Reflect(context);
5866
}
5967

6068
void AtomSampleViewerSystemComponent::PerfMetrics::Reflect(AZ::ReflectContext* context)
@@ -68,9 +76,6 @@ namespace AtomSampleViewer
6876
->Field("SecondsToRender", &PerfMetrics::m_timeToFirstRenderSeconds)
6977
;
7078
}
71-
72-
// Abstract base component is used by multiple components and needs to be reflected in a single location.
73-
EntityLatticeTestComponent::Reflect(context);
7479
}
7580

7681

@@ -224,6 +229,8 @@ namespace AtomSampleViewer
224229

225230
void AtomSampleViewerSystemComponent::LogPerfMetrics() const
226231
{
227-
AZ::Utils::SaveObjectToFile("metrics.xml", AZ::DataStream::ST_XML, &m_perfMetrics);
232+
AZ::IO::FixedMaxPath resolvedPath;
233+
AZ::IO::LocalFileIO::GetInstance()->ResolvePath(resolvedPath, "@user@/PerformanceMetrics.xml");
234+
AZ::Utils::SaveObjectToFile(resolvedPath.String(), AZ::DataStream::ST_XML, &m_perfMetrics);
228235
}
229236
} // namespace AtomSampleViewer
Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
/*
2+
* Copyright (c) Contributors to the Open 3D Engine Project.
3+
* For complete copyright and license terms please see the LICENSE at the root of this distribution.
4+
*
5+
* SPDX-License-Identifier: Apache-2.0 OR MIT
6+
*
7+
*/
8+
9+
#include <Automation/ScriptReporter.h>
10+
#include <AzCore/std/containers/vector.h>
11+
#include <AzCore/std/containers/map.h>
12+
#include <AzCore/Preprocessor/Enum.h>
13+
14+
namespace AtomSampleViewer
15+
{
16+
struct PrecommitWizardSettings
17+
{
18+
static const int DefaultInspectionSelection = -1;
19+
enum class Stage
20+
{
21+
Intro,
22+
RunFullsuiteTest,
23+
ReportFullsuiteSummary,
24+
ManualInspection,
25+
ReportFinalSummary
26+
};
27+
28+
struct ImageDifferenceLevel
29+
{
30+
enum Levels
31+
{
32+
NoDifference = 0,
33+
LowDifference = 1,
34+
ModerateDifference = 2,
35+
HighDifference = 3,
36+
37+
NumDifferenceLevels = 4
38+
};
39+
};
40+
static constexpr const char* ManualInspectionDifferenceLevels[] = {
41+
"No Difference",
42+
"Low Difference",
43+
"Moderate Difference",
44+
"High Difference"
45+
};
46+
static constexpr const char* ManualInspectionOptions[] = {
47+
"I don't see any difference",
48+
"I see a benign difference",
49+
"I see a difference that's *probably* benign",
50+
"This looks like a problem"
51+
};
52+
53+
// This function does the following:
54+
// 1. Collect passing screenshot tests and sorts them by decreasing diff score.
55+
// 2. Collect failed screenshot tests and sorts them by decreasing diff score.
56+
void ProcessScriptReports(const AZStd::vector<ScriptReporter::ScriptReport>& scriptReports)
57+
{
58+
m_reportsOrderedByThresholdToInspect.clear();
59+
m_failedReports.clear();
60+
61+
for (size_t i = 0; i < scriptReports.size(); ++i)
62+
{
63+
const AZStd::vector<ScriptReporter::ScreenshotTestInfo>& screenshotTestInfos = scriptReports[i].m_screenshotTests;
64+
for (size_t j = 0; j < screenshotTestInfos.size(); ++j)
65+
{
66+
// Collect and sort reports that passed by threshold. This will be used to detect false negatives
67+
// e.g. a test is reported to pass by being below the threshold when in fact it's simply because the threshold is too
68+
// high
69+
if (screenshotTestInfos[j].m_officialComparisonResult.m_resultCode == ScriptReporter::ImageComparisonResult::ResultCode::Pass)
70+
{
71+
m_reportsOrderedByThresholdToInspect.insert(AZStd::pair<float, ScriptReporter::ReportIndex>(
72+
screenshotTestInfos[j].m_officialComparisonResult.m_finalDiffScore,
73+
ScriptReporter::ReportIndex{ i, j }));
74+
}
75+
else
76+
{
77+
m_failedReports.insert(AZStd::pair<float, ScriptReporter::ReportIndex>(
78+
screenshotTestInfos[j].m_officialComparisonResult.m_finalDiffScore,
79+
ScriptReporter::ReportIndex{ i, j }));
80+
}
81+
}
82+
}
83+
84+
m_reportIterator = m_reportsOrderedByThresholdToInspect.begin();
85+
}
86+
87+
int m_inspectionSelection = DefaultInspectionSelection;
88+
Stage m_stage = Stage::Intro;
89+
AZStd::string m_exportedPngPath;
90+
AZStd::multimap<float, ScriptReporter::ReportIndex, AZStd::greater<float>> m_reportsOrderedByThresholdToInspect;
91+
AZStd::multimap<float, ScriptReporter::ReportIndex, AZStd::greater<float>> m_failedReports;
92+
AZStd::multimap<float, ScriptReporter::ReportIndex, AZStd::greater<float>>::iterator m_reportIterator;
93+
AZStd::unordered_map<ScriptReporter::ReportIndex, ImageDifferenceLevel::Levels> m_reportIndexDifferenceLevelMap;
94+
};
95+
} // namespace AtomSampleViewer

0 commit comments

Comments
 (0)