Skip to content

Commit 4299e05

Browse files
authored
Merge pull request #121 from MethanePowered/develop
Methane Kit v0.7.2: add initial compute pipeline support and RHI unit tests
2 parents 499d420 + 0afb15f commit 4299e05

File tree

285 files changed

+9042
-1345
lines changed

Some content is hidden

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

285 files changed

+9042
-1345
lines changed

.codecov.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@ coverage:
1515
informational: true
1616
only_pulls: true
1717

18+
ignore:
19+
- "Tests"
20+
- "Apps"
21+
1822
component_management:
1923
individual_components:
2024
- component_id: common-primitives

.github/workflows/ci-build.yml

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,9 @@ on:
3131
env:
3232
product_ver_major: 0
3333
product_ver_minor: 7
34-
product_ver_patch: 1
34+
product_ver_patch: 2
3535
product_ver_build: ${{ github.run_number }}
36-
tracy_release_version: "0.9"
36+
tracy_release_version: "0.9.1"
3737
# TSC Invariant check is disabled to allow running Catch test executables only for tests list query by CTest
3838
TRACY_NO_INVARIANT_CHECK: 1
3939

@@ -215,13 +215,20 @@ jobs:
215215
working-directory: ${{ env.INSTALL_DIR }}/Tests
216216
shell: bash
217217
run: |
218+
set +e
218219
result_ext='_result.xml'
220+
result_error_level=0
219221
echo Running all unit-tests in directory $PWD
220222
for test_exe in *Test
221223
do
222224
./$test_exe -r junit -o "$test_exe$result_ext"
223-
echo - $test_exe - completed with $? exit code
225+
last_error_level=$?
226+
echo - $test_exe - completed with $last_error_level exit code
227+
if [ $last_error_level != 0 ]; then
228+
result_error_level=$last_error_level
229+
fi
224230
done
231+
exit $result_error_level
225232
226233
- name: Run Unit-Tests on Windows
227234
if: ${{ matrix.run_tests && matrix.os_name == 'Windows' }}
@@ -230,11 +237,15 @@ jobs:
230237
run: |
231238
setlocal enabledelayedexpansion
232239
echo Running unit-tests in directory "%cd%"
240+
set /A result_error_level=0
233241
for /r "." %%a in (*Test.exe) do (
234242
"%%~fa" -r junit -o "%%~fa_result.xml"
235243
echo - %%~na - completed with !errorlevel! exit status
244+
if not !errorlevel!==0 (
245+
set /A result_error_level=!errorlevel!
246+
)
236247
)
237-
exit 0
248+
exit !result_error_level!
238249
239250
- name: Upload Test Results Artifact
240251
uses: actions/upload-artifact@v3
@@ -243,11 +254,12 @@ jobs:
243254
name: MethaneKit_${{ matrix.name }}_TestResults_${{ env.product_ver_major }}.${{ env.product_ver_minor }}.${{ env.product_ver_patch }}.${{ env.product_ver_build }}
244255
path: ${{ env.INSTALL_DIR }}/Tests/*_result.xml
245256

246-
- name: Upload Build Log and Test Tesults to Testspace server
257+
- name: Upload Test Results and Build Log to Testspace server
247258
if: ${{ matrix.run_tests && (success() || failure()) }}
248259
run: testspace "[ ${{ matrix.name }} ]${{ env.INSTALL_DIR }}/Tests/*_result.xml" "[ ${{ matrix.name }} ]${{ env.BUILD_LOG_FILE }}"
249260

250261
- name: Add README and BUILD files
262+
if: ${{ success() || failure() }}
251263
shell: bash
252264
run: |
253265
cp README.md $INSTALL_DIR/README.md
@@ -259,26 +271,28 @@ jobs:
259271
echo - Builder agent ${{ matrix.os }} system information: >> $INSTALL_DIR/Build-Info.txt
260272
261273
- name: Add Windows System Information to BUILD file
262-
if: ${{ matrix.os_name == 'Windows' }}
274+
if: ${{ matrix.os_name == 'Windows' && (success() || failure()) }}
263275
run: systeminfo >> Build\Output\${{ matrix.config_preset }}\Install\Build-Info.txt
264276

265277
- name: Add Unix System Information to BUILD file
266-
if: ${{ matrix.os_name != 'Windows' }}
278+
if: ${{ matrix.os_name != 'Windows' && (success() || failure()) }}
267279
run: uname -a >>$INSTALL_DIR/Build-Info.txt
268280

269281
- name: Download Tracy release
270-
if: ${{ matrix.add_tracy_app }}
282+
if: ${{ matrix.add_tracy_app && (success() || failure()) }}
271283
shell: bash
272284
run: |
273285
curl -sSLo Tracy.7z https://github.com/MethanePowered/Tracy/releases/download/v${{ env.tracy_release_version }}/Tracy-${{ matrix.os_name }}-v${{ env.tracy_release_version }}.7z
274286
7z x Tracy.7z -o$INSTALL_DIR/Apps
275287
276288
- name: Archive Build Artifacts
289+
if: ${{ success() || failure() }}
277290
shell: bash
278291
working-directory: ${{ env.INSTALL_DIR }}
279292
run: 7z a -t7z -mx=9 MethaneKit_${{ matrix.name }}.7z *
280293

281294
- name: Upload Archived Build Artifacts
295+
if: ${{ success() || failure() }}
282296
uses: actions/upload-artifact@v3
283297
with:
284298
name: MethaneKit_${{ matrix.name }}_${{ env.product_ver_major }}.${{ env.product_ver_minor }}.${{ env.product_ver_patch }}.${{ env.product_ver_build }}

.github/workflows/ci-sonar-scan.yml

Lines changed: 50 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ on:
3636
env:
3737
product_ver_major: 0
3838
product_ver_minor: 7
39-
product_ver_patch: 1
39+
product_ver_patch: 2
4040
product_ver_build: ${{ github.run_number }}
4141
sonar_server_url: "https://sonarcloud.io"
4242
sonar_organization: methane-powered
@@ -159,13 +159,15 @@ jobs:
159159
throw 'OpenCppCoverage/OpenCppCoverage.exe executable was not found in unpacked content!'
160160
}
161161
162-
- name: Run all unit-tests from install directory with code coverage using OpenCppCoverage on Windows
162+
- name: Run all unit-tests with OpenCppCoverage code coverage on Windows
163163
if: ${{ matrix.os_name == 'windows' }}
164164
shell: cmd
165165
working-directory: 'Build\Output\${{ matrix.config_preset }}\Install\Tests'
166166
run: |
167+
chcp 65001 #set code page to utf-8
167168
setlocal enabledelayedexpansion
168169
set open_cpp_coverage_exe=OpenCppCoverage\OpenCppCoverage.exe
170+
set test_results=
169171
if not exist "%open_cpp_coverage_exe%" (
170172
echo File path "%open_cpp_coverage_exe%" does not exist!
171173
exit 101
@@ -181,43 +183,73 @@ jobs:
181183
if not !errorlevel!==0 (
182184
set /A result_error_level=!errorlevel!
183185
)
186+
if .!test_results!==. (
187+
set test_results=Build/Output/${{ matrix.config_preset }}/Install/Tests/Results/%%~na.xml
188+
) else (
189+
set test_results=!test_results!,Build/Output/${{ matrix.config_preset }}/Install/Tests/Results/%%~na.xml
190+
)
184191
)
192+
echo Test Result Files: %test_results%
193+
echo test_results=%test_results%>> %GITHUB_ENV%
185194
exit !result_error_level!
186195
187-
- name: Run unit-tests from install directory on Linux
196+
- name: Run all unit-tests with GCov code coverage on Linux
188197
if: ${{ matrix.os_name == 'linux' }}
189198
working-directory: 'Build/Output/${{ matrix.config_preset }}/Install/Tests'
190199
run: |
200+
set +e
191201
result_ext='.xml'
202+
test_results=''
203+
result_error_level=0
192204
echo Running unit-tests in directory $PWD
193205
mkdir Results
194206
for test_exe in *Test
195207
do
196208
./$test_exe -r sonarqube -o "Results/$test_exe$result_ext"
197-
echo - $test_exe - completed with $? exit status
209+
last_error_level=$?
210+
echo - $test_exe - completed with $last_error_level exit status
211+
if [ $last_error_level != 0 ]; then
212+
result_error_level=$last_error_level
213+
fi
214+
if [ -f "$PWD/Results/$test_exe$result_ext" ]; then
215+
test_results+="$PWD/Results/$test_exe$result_ext,"
216+
fi
198217
done
218+
echo "Test Result Files: $test_results"
219+
echo "test_results=$test_results" >> $GITHUB_ENV
220+
exit $result_error_level
199221
200222
- name: Collect tests code coverage using ctest and gcov/lcov on Linux
201-
if: ${{ matrix.os_name == 'linux' }}
223+
if: ${{ matrix.os_name == 'linux' && (success() || failure()) }}
202224
run: |
203225
set -o pipefail
204226
cmake --build --preset ${{ matrix.build_preset }} --target MethaneTestCoverage 2>&1 | tee $COVERAGE_LOG_FILE
205227
206-
- name: Run all unit-tests from install directory with LCov code coverage on MacOS
228+
- name: Run all unit-tests with LCov code coverage on MacOS
207229
if: ${{ matrix.os_name == 'macosx' }}
208230
working-directory: 'Build/Output/${{ matrix.config_preset }}/Install/Tests'
209231
run: |
232+
set +e
233+
result_error_level=0
210234
result_ext='.xml'
211235
prof_data_ext='.profdata'
212236
prof_raw_ext='.profraw'
213237
lcov_ext='.lcov'
238+
test_results=''
214239
echo Running unit-tests and Converting LLVM code coverage data to lcov text format in directory $PWD
215240
mkdir Results
216241
mkdir Coverage
217242
for test_exe in *Test
218243
do
219244
./$test_exe -r sonarqube -o "Results/$test_exe$result_ext"
220-
echo - $test_exe - completed with $? exit status
245+
last_error_level=$?
246+
echo - $test_exe - completed with $last_error_level exit status
247+
if [ $last_error_level != 0 ]; then
248+
result_error_level=$last_error_level
249+
fi
250+
if [ -f "$PWD/Results/$test_exe$result_ext" ]; then
251+
test_results+="$PWD/Results/$test_exe$result_ext,"
252+
fi
221253
if [ ! -f default.profraw ]; then
222254
continue
223255
fi
@@ -226,10 +258,14 @@ jobs:
226258
xcrun llvm-cov export -format lcov -instr-profile="$test_exe$prof_data_ext" -arch=x86_64 ./$test_exe > "./Coverage/$test_exe$lcov_ext"
227259
echo - Converted code coverage from "$test_exe$prof_raw_ext" to lcov text format "./Coverage/$test_exe$lcov_ext", $? exit status
228260
done
261+
echo "Test Result Files: $test_results"
262+
echo "test_results=$test_results" >> $GITHUB_ENV
229263
echo List of generated coverage files in directory $PWD/Coverage
230264
ls -la ./Coverage
265+
exit $result_error_level
231266
232267
- name: Generate Code Coverage Reports
268+
if: ${{ success() || failure() }}
233269
uses: danielpalme/ReportGenerator-GitHub-Action@5.1.13
234270
with:
235271
reports: ${{ matrix.tests_coverage_reports }}
@@ -239,23 +275,26 @@ jobs:
239275
tag: '${{ env.product_ver_major }}.${{ env.product_ver_minor }}.${{ env.product_ver_patch }}.${{ env.product_ver_build }}'
240276

241277
- name: Upload Code Coverage Cobertura Report
278+
if: ${{ success() || failure() }}
242279
uses: actions/upload-artifact@v3
243280
with:
244281
name: MethaneKit_${{ matrix.name }}_CoverageResults
245282
path: Build/Output/${{ matrix.config_preset }}/Install/Tests/Coverage/Report/Cobertura.xml
246283

247284
- name: Upload Build Log and Code Coverage to Testspace server
248-
if: ${{ always() }}
285+
if: ${{ success() || failure() }}
249286
run: testspace "[ ${{ matrix.name }} ]Build/Output/${{ matrix.config_preset }}/Install/Tests/Coverage/Report/Cobertura.xml" "[ ${{ matrix.name }} ]${{ env.BUILD_LOG_FILE }}"
250287

251288
- name: Upload Code Coverage to CodeCov server
289+
if: ${{ success() || failure() }}
252290
uses: codecov/codecov-action@v3
253291
with:
254292
files: Build/Output/${{ matrix.config_preset }}/Install/Tests/Coverage/Report/Cobertura.xml
255293
flags: unittests,${{ matrix.os_name }}
256294
name: ${{ matrix.name }}
257295

258296
- name: Run Sonar Scanner
297+
if: ${{ success() || failure() }}
259298
shell: bash
260299
env:
261300
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@@ -273,7 +312,7 @@ jobs:
273312
SONAR_SCAN_CMD="$SONAR_SCAN_CMD --define sonar.projectKey=${{ matrix.sonar_project_key }}"
274313
SONAR_SCAN_CMD="$SONAR_SCAN_CMD --define sonar.projectVersion=${{ env.product_ver_major }}.${{ env.product_ver_minor }}.${{ env.product_ver_patch }}.${{ env.product_ver_build }}"
275314
SONAR_SCAN_CMD="$SONAR_SCAN_CMD --define sonar.cfamily.compile-commands=Build/Output/${{ matrix.config_preset }}/Build/compile_commands.json"
276-
SONAR_SCAN_CMD="$SONAR_SCAN_CMD --define sonar.testExecutionReportPaths=$TESTS_DIR/Results/MethaneDataTypesTest.xml,$TESTS_DIR/Results/MethaneDataEventsTest.xml,$TESTS_DIR/Results/MethaneDataRangeSetTest.xml,$TESTS_DIR/Results/MethanePlatformInputTest.xml,$TESTS_DIR/Results/MethaneGraphicsTypesTest.xml,$TESTS_DIR/Results/MethaneGraphicsCameraTest.xml,$TESTS_DIR/Results/MethaneUserInterfaceTypesTest.xml"
315+
SONAR_SCAN_CMD="$SONAR_SCAN_CMD --define sonar.testExecutionReportPaths=${{ env.test_results }}"
277316
SONAR_SCAN_CMD="$SONAR_SCAN_CMD --define sonar.coverageReportPaths=$TESTS_DIR/Coverage/Report/SonarQube.xml"
278317
SONAR_SCAN_CMD="$SONAR_SCAN_CMD --define sonar.scm.revision=${{ github.sha }}"
279318
if [ "${{ github.event_name }}" == "pull_request" ]; then
@@ -293,13 +332,13 @@ jobs:
293332
done
294333
295334
- name: Archive Scan Artifacts
296-
if: ${{ always() }}
335+
if: ${{ success() || failure() }}
297336
shell: bash
298337
working-directory: Build/Output/${{ matrix.config_preset }}/Install
299338
run: 7z a -t7z -mx=9 MethaneKit_${{ matrix.name }}.7z *
300339

301340
- name: Upload Archived Scan Artifacts
302-
if: ${{ always() }}
341+
if: ${{ success() || failure() }}
303342
uses: actions/upload-artifact@v3
304343
with:
305344
name: MethaneKit_${{ matrix.name }}_${{ env.product_ver_major }}.${{ env.product_ver_minor }}.${{ env.product_ver_patch }}.${{ env.product_ver_build }}

.github/workflows/ci-tests-report.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ jobs:
3939

4040
- name: Add PR Comment with Test Results
4141
uses: marocchino/sticky-pull-request-comment@v2
42-
if: ${{ github.event.workflow_run.event == 'pull_request' && steps.test-reporter.outputs.conclusion == 'success' }}
42+
if: ${{ github.event.workflow_run.event == 'pull_request' && steps.test-reporter.outputs.conclusion == 'success' && (success() || failure()) }}
4343
with:
4444
number: ${{ github.event.workflow_run.pull_requests[0].number }}
4545
header: ${{ matrix.name }} Test Results
@@ -53,7 +53,7 @@ jobs:
5353
- :stopwatch: ${{ steps.test-reporter.outputs.time }} ms. run duration
5454
5555
- name: Add Commit Comment with Test Results
56-
if: ${{ github.event.workflow_run.event == 'push' && steps.test-reporter.outputs.conclusion == 'success' }}
56+
if: ${{ github.event.workflow_run.event == 'push' && steps.test-reporter.outputs.conclusion == 'success' && (success() || failure()) }}
5757
uses: peter-evans/commit-comment@v2
5858
with:
5959
sha: ${{ github.event.workflow_run.head_sha }}

.idea/runConfigurations/08_ConsoleCompute.xml

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/runConfigurations/Graphics_RHI_Test.xml

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Apps/02-HelloCube/HelloCubeApp.cpp

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -79,9 +79,10 @@ class HelloCubeApp final // NOSONAR - destructor required
7979
Camera m_camera;
8080

8181
#ifdef UNIFORMS_BUFFER_ENABLED
82-
hlslpp::Uniforms m_shader_uniforms { };
83-
const Rhi::SubResources m_shader_uniforms_subresources{
84-
{ reinterpret_cast<Data::ConstRawPtr>(&m_shader_uniforms), sizeof(hlslpp::Uniforms) } // NOSONAR
82+
hlslpp::Uniforms m_shader_uniforms { };
83+
const Rhi::SubResource m_shader_uniforms_subresource{
84+
reinterpret_cast<Data::ConstRawPtr>(&m_shader_uniforms), // NOSONAR
85+
sizeof(hlslpp::Uniforms)
8586
};
8687
Rhi::BufferSet m_vertex_buffer_set;
8788
#else
@@ -179,19 +180,19 @@ class HelloCubeApp final // NOSONAR - destructor required
179180
// Create index buffer for cube mesh
180181
m_index_buffer = GetRenderContext().CreateBuffer(Rhi::BufferSettings::ForIndexBuffer(m_cube_mesh.GetIndexDataSize(), GetIndexFormat(m_cube_mesh.GetIndex(0))));
181182
m_index_buffer.SetName("Cube Index Buffer");
182-
m_index_buffer.SetData(
183-
{ { reinterpret_cast<Data::ConstRawPtr>(m_cube_mesh.GetIndices().data()), m_cube_mesh.GetIndexDataSize() } }, // NOSONAR
184-
m_render_cmd_queue
185-
);
183+
m_index_buffer.SetData(m_render_cmd_queue, {
184+
reinterpret_cast<Data::ConstRawPtr>(m_cube_mesh.GetIndices().data()), // NOSONAR
185+
m_cube_mesh.GetIndexDataSize()
186+
});
186187

187188
#ifdef UNIFORMS_BUFFER_ENABLED
188189
// Create constant vertex buffer
189190
Rhi::Buffer vertex_buffer = GetRenderContext().CreateBuffer(Rhi::BufferSettings::ForVertexBuffer(m_cube_mesh.GetVertexDataSize(), m_cube_mesh.GetVertexSize()));
190191
vertex_buffer.SetName("Cube Vertex Buffer");
191-
vertex_buffer.SetData(
192-
{ { reinterpret_cast<Data::ConstRawPtr>(m_cube_mesh.GetVertices().data()), m_cube_mesh.GetVertexDataSize() } }, // NOSONAR
193-
m_render_cmd_queue
194-
);
192+
vertex_buffer.SetData(m_render_cmd_queue, {
193+
reinterpret_cast<Data::ConstRawPtr>(m_cube_mesh.GetVertices().data()), // NOSONAR
194+
m_cube_mesh.GetVertexDataSize()
195+
});
195196
m_vertex_buffer_set = Rhi::BufferSet(Rhi::BufferType::Vertex, { vertex_buffer });
196197

197198
const auto uniforms_data_size = static_cast<Data::Size>(sizeof(m_shader_uniforms));
@@ -268,13 +269,13 @@ class HelloCubeApp final // NOSONAR - destructor required
268269

269270
#ifdef UNIFORMS_BUFFER_ENABLED
270271
// Update uniforms buffer on GPU and apply model-view-projection transformation in vertex shader on GPU
271-
frame.uniforms_buffer.SetData(m_shader_uniforms_subresources, m_render_cmd_queue);
272+
frame.uniforms_buffer.SetData(m_render_cmd_queue, m_shader_uniforms_subresource);
272273
#else
273274
// Update vertex buffer with vertices in camera's projection view
274-
frame.vertex_buffer_set[0].SetData(
275-
{ { reinterpret_cast<Data::ConstRawPtr>(m_proj_vertices.data()), m_cube_mesh.GetVertexDataSize() } }, // NOSONAR
276-
m_render_cmd_queue
277-
);
275+
frame.vertex_buffer_set[0].SetData(m_render_cmd_queue, {
276+
reinterpret_cast<Data::ConstRawPtr>(m_proj_vertices.data()), // NOSONAR
277+
m_cube_mesh.GetVertexDataSize()
278+
});
278279
#endif
279280

280281
// Issue commands for cube rendering

0 commit comments

Comments
 (0)