mirror of
https://github.com/xemu-project/xemu-test.git
synced 2024-11-26 19:30:30 +00:00
Integrate nxdk_pgraph_tests
This commit is contained in:
parent
c827add612
commit
301b797093
4
.github/workflows/build_docker_image.yml
vendored
4
.github/workflows/build_docker_image.yml
vendored
@ -15,6 +15,8 @@ jobs:
|
||||
steps:
|
||||
- name: Clone Tree
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
submodules: recursive
|
||||
|
||||
- name: Extract image metadata (tags, labels)
|
||||
id: meta
|
||||
@ -51,6 +53,8 @@ jobs:
|
||||
|
||||
- name: Clone Tree
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
submodules: recursive
|
||||
|
||||
- name: Build Test Data
|
||||
run: bash ./scripts/build_test_data.sh
|
||||
|
3
.gitmodules
vendored
Normal file
3
.gitmodules
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
[submodule "nxdk_pgraph_tests"]
|
||||
path = test-pgraph/nxdk_pgraph_tests
|
||||
url = https://github.com/abaire/nxdk_pgraph_tests.git
|
35
Dockerfile
35
Dockerfile
@ -9,6 +9,35 @@ RUN mkdir /data/TestXBE
|
||||
RUN /usr/src/nxdk/docker_entry.sh make -C /test-xbe
|
||||
RUN cp /test-xbe/tester.iso /data/TestXBE/
|
||||
|
||||
# The nxdk_pgraph_tests includes its own copy of the nxdk which needs more build
|
||||
# infrastructure than the nxdk-runbase used for other tests.
|
||||
FROM ubuntu:20.04 AS pgraph-buildbase
|
||||
ENV DEBIAN_FRONTEND noninteractive
|
||||
RUN set -xe; \
|
||||
apt-get -qy update \
|
||||
&& apt-get -qy install \
|
||||
bison \
|
||||
clang \
|
||||
cmake \
|
||||
flex \
|
||||
lld \
|
||||
llvm \
|
||||
make
|
||||
|
||||
FROM pgraph-buildbase AS pgraph-data
|
||||
RUN mkdir -p /data/TestNXDKPgraphTests
|
||||
COPY test-pgraph /test-pgraph
|
||||
RUN make -C /test-pgraph/nxdk_pgraph_tests \
|
||||
AUTORUN_IMMEDIATELY=y \
|
||||
ENABLE_SHUTDOWN=y \
|
||||
FALLBACK_OUTPUT_ROOT_PATH="c:" \
|
||||
RUNTIME_CONFIG_PATH="c:/pgraph_tests.cnf" \
|
||||
CC=clang CXX=clang++ \
|
||||
-j$(numproc)
|
||||
RUN cp /test-pgraph/nxdk_pgraph_tests/nxdk_pgraph_tests.iso /data/TestNXDKPgraphTests/
|
||||
RUN cp /test-pgraph/config.cnf /data/TestNXDKPgraphTests/
|
||||
|
||||
|
||||
#
|
||||
# Build base test container image
|
||||
#
|
||||
@ -37,6 +66,7 @@ RUN set -xe; \
|
||||
libsdl2-2.0-0 \
|
||||
libssl1.1 \
|
||||
libstdc++6 \
|
||||
perceptualdiff \
|
||||
zlib1g \
|
||||
;
|
||||
|
||||
@ -53,8 +83,11 @@ EXPOSE 5900
|
||||
RUN mkdir /work
|
||||
WORKDIR /work
|
||||
COPY scripts/docker_entry.sh /docker_entry.sh
|
||||
COPY . /work/xemu-test
|
||||
COPY ./scripts /work/xemu-test/scripts/
|
||||
COPY ./xemutest /work/xemu-test/xemutest/
|
||||
COPY ./setup.py /work/xemu-test
|
||||
COPY --from=data /data /work/xemu-test/xemutest/data
|
||||
COPY --from=pgraph-data /data/TestNXDKPgraphTests /work/xemu-test/xemutest/data/TestNXDKPgraphTests
|
||||
RUN pip install /work/xemu-test
|
||||
ENTRYPOINT ["/docker_entry.sh"]
|
||||
CMD ["/usr/bin/python3", "-m", "xemutest", "/work/private", "/work/results"]
|
||||
|
@ -2,9 +2,8 @@ xemu Automated Testing
|
||||
======================
|
||||
|
||||
Performs a suite of tests against a build of xemu, capturing test results and
|
||||
footage of the runs. Currently that suite consists of 1 test: boot to a custom
|
||||
executable that writes a file to the disk. This is a useful test, but
|
||||
there are many tests left to add, and you can help! Pull requests welcome.
|
||||
footage of the runs. There are many tests left to add, and you can help! Pull requests
|
||||
welcome.
|
||||
|
||||
This is primarily used for automated testing of xemu pull requests. The xemu CI
|
||||
system uses this repository for testing. The goal is to have a large set of
|
||||
|
2
setup.py
2
setup.py
@ -15,7 +15,7 @@ setup(name='xemutest',
|
||||
include_package_data=True,
|
||||
package_data={'xemutest': ['data/**/*']},
|
||||
install_requires=[
|
||||
'pyfatx',
|
||||
'pyfatx >= 0.0.6',
|
||||
'pywinauto; sys_platform == "win32"'
|
||||
],
|
||||
python_requires='>=3.6'
|
||||
|
12
test-pgraph/README.md
Normal file
12
test-pgraph/README.md
Normal file
@ -0,0 +1,12 @@
|
||||
# test-pgraph
|
||||
|
||||
Runs the [nxdk_pgraph_tests](https://github.com/abaire/nxdk_pgraph_tests) suite and
|
||||
validates the generated images against golden expectation files.
|
||||
|
||||
# Configuration
|
||||
|
||||
The subset of `nxdk_pgraph_tests` that will be executed is determined by the
|
||||
`config.cnf` file in this directory. A default version of this file may be generated
|
||||
using the appropriate build flag in the `nxdk_pgraph_tests` project and then copied
|
||||
from the HDD. See the relevant build parameter in the Makefile to trigger config file
|
||||
generation.
|
994
test-pgraph/config.cnf
Normal file
994
test-pgraph/config.cnf
Normal file
@ -0,0 +1,994 @@
|
||||
# pgraph test suite configuration
|
||||
|
||||
Lighting normals
|
||||
# NoNormal
|
||||
# NoNormal-inlinearrays
|
||||
# NoNormal-inlinebuf
|
||||
# NoNormal-inlineelements
|
||||
# Nz_-100
|
||||
# Nz_-100-inlinearrays
|
||||
# Nz_-100-inlinebuf
|
||||
# Nz_-100-inlineelements
|
||||
# Nz_0
|
||||
# Nz_0-inlinearrays
|
||||
# Nz_0-inlinebuf
|
||||
# Nz_0-inlineelements
|
||||
# Nz_100
|
||||
# Nz_100-inlinearrays
|
||||
# Nz_100-inlinebuf
|
||||
# Nz_100-inlineelements
|
||||
# Nz_31
|
||||
# Nz_31-inlinearrays
|
||||
# Nz_31-inlinebuf
|
||||
# Nz_31-inlineelements
|
||||
# Nz_70
|
||||
# Nz_70-inlinearrays
|
||||
# Nz_70-inlinebuf
|
||||
# Nz_70-inlineelements
|
||||
# Nz_97
|
||||
# Nz_97-inlinearrays
|
||||
# Nz_97-inlinebuf
|
||||
# Nz_97-inlineelements
|
||||
|
||||
|
||||
#Attrib carryover
|
||||
# L-d0.0_0.0_1.0_1.0-da
|
||||
# L-d0.2_0.0_0.6_1.0-ie
|
||||
# L-d0.5_0.0_0.0_1.0-ia
|
||||
# L-d0.8_0.0_0.0_1.0-ib
|
||||
# L-n0.0_0.0_1.0_1.0-da
|
||||
# L-n0.2_0.0_0.6_1.0-ie
|
||||
# L-n0.5_0.0_0.0_1.0-ia
|
||||
# L-n0.8_0.0_0.0_1.0-ib
|
||||
# L-s0.0_0.0_1.0_1.0-da
|
||||
# L-s0.2_0.0_0.6_1.0-ie
|
||||
# L-s0.5_0.0_0.0_1.0-ia
|
||||
# L-s0.8_0.0_0.0_1.0-ib
|
||||
# L-t00.0_0.0_1.0_1.0-da
|
||||
# L-t00.2_0.0_0.6_1.0-ie
|
||||
# L-t00.5_0.0_0.0_1.0-ia
|
||||
# L-t00.8_0.0_0.0_1.0-ib
|
||||
# L-t10.0_0.0_1.0_1.0-da
|
||||
# L-t10.2_0.0_0.6_1.0-ie
|
||||
# L-t10.5_0.0_0.0_1.0-ia
|
||||
# L-t10.8_0.0_0.0_1.0-ib
|
||||
# L-t20.0_0.0_1.0_1.0-da
|
||||
# L-t20.2_0.0_0.6_1.0-ie
|
||||
# L-t20.5_0.0_0.0_1.0-ia
|
||||
# L-t20.8_0.0_0.0_1.0-ib
|
||||
# L-t30.0_0.0_1.0_1.0-da
|
||||
# L-t30.2_0.0_0.6_1.0-ie
|
||||
# L-t30.5_0.0_0.0_1.0-ia
|
||||
# L-t30.8_0.0_0.0_1.0-ib
|
||||
# T-d0.0_0.0_1.0_1.0-da
|
||||
# T-d0.2_0.0_0.6_1.0-ie
|
||||
# T-d0.5_0.0_0.0_1.0-ia
|
||||
# T-d0.8_0.0_0.0_1.0-ib
|
||||
# T-n0.0_0.0_1.0_1.0-da
|
||||
# T-n0.2_0.0_0.6_1.0-ie
|
||||
# T-n0.5_0.0_0.0_1.0-ia
|
||||
# T-n0.8_0.0_0.0_1.0-ib
|
||||
# T-s0.0_0.0_1.0_1.0-da
|
||||
# T-s0.2_0.0_0.6_1.0-ie
|
||||
# T-s0.5_0.0_0.0_1.0-ia
|
||||
# T-s0.8_0.0_0.0_1.0-ib
|
||||
# T-t00.0_0.0_1.0_1.0-da
|
||||
# T-t00.2_0.0_0.6_1.0-ie
|
||||
# T-t00.5_0.0_0.0_1.0-ia
|
||||
# T-t00.8_0.0_0.0_1.0-ib
|
||||
# T-t10.0_0.0_1.0_1.0-da
|
||||
# T-t10.2_0.0_0.6_1.0-ie
|
||||
# T-t10.5_0.0_0.0_1.0-ia
|
||||
# T-t10.8_0.0_0.0_1.0-ib
|
||||
# T-t20.0_0.0_1.0_1.0-da
|
||||
# T-t20.2_0.0_0.6_1.0-ie
|
||||
# T-t20.5_0.0_0.0_1.0-ia
|
||||
# T-t20.8_0.0_0.0_1.0-ib
|
||||
# T-t30.0_0.0_1.0_1.0-da
|
||||
# T-t30.2_0.0_0.6_1.0-ie
|
||||
# T-t30.5_0.0_0.0_1.0-ia
|
||||
# T-t30.8_0.0_0.0_1.0-ib
|
||||
|
||||
#Attrib setter
|
||||
# Setters-alpha
|
||||
# Setters-visible
|
||||
|
||||
#Clear
|
||||
# C00000000_Depth_n
|
||||
# C00000000_Depth_y
|
||||
# C00000001_Depth_n
|
||||
# C00000001_Depth_y
|
||||
# C00000100_Depth_n
|
||||
# C00000100_Depth_y
|
||||
# C00010000_Depth_n
|
||||
# C00010000_Depth_y
|
||||
# C01000000_Depth_n
|
||||
# C01000000_Depth_y
|
||||
# C01010101_Depth_n
|
||||
# C01010101_Depth_y
|
||||
|
||||
#Combiner
|
||||
# Flags
|
||||
# Independence
|
||||
# Mux
|
||||
|
||||
#Fog
|
||||
# AFF-exp-planar
|
||||
# AFF-exp2-planar
|
||||
# AFF-exp2_abs-planar
|
||||
# AFF-exp_abs-planar
|
||||
# AFF-linear-planar
|
||||
# AFF-linear_abs-planar
|
||||
|
||||
#Fog vsh
|
||||
# AFF-exp-planar
|
||||
# AFF-exp2-planar
|
||||
# AFF-exp2_abs-planar
|
||||
# AFF-exp_abs-planar
|
||||
# AFF-linear-planar
|
||||
# AFF-linear_abs-planar
|
||||
|
||||
#Fog inf coord
|
||||
# AFF-exp-planar
|
||||
# AFF-exp2-planar
|
||||
# AFF-exp2_abs-planar
|
||||
# AFF-exp_abs-planar
|
||||
# AFF-linear-planar
|
||||
# AFF-linear_abs-planar
|
||||
|
||||
#Fog coord vec4
|
||||
# W-0.00_0.25_0.00_0.00
|
||||
# W-0.30_0.30_0.30_1.00
|
||||
# W-0.50_0.50_0.00_0.00
|
||||
# W-1.00_0.00_0.00_0.50
|
||||
# WX-0.25_0.00_0.00_0.50
|
||||
# WX-0.65_0.00_0.00_0.00
|
||||
# WY-0.00_0.75_0.75_0.25
|
||||
# WY-1.00_0.00_1.00_0.75
|
||||
# WZYX-0.25_0.50_0.75_1.00
|
||||
# WZYX-1.00_0.75_0.50_0.25
|
||||
# X-0.00_0.00_0.00_0.00
|
||||
# X-0.90_0.00_0.00_0.00
|
||||
# XYZW-0.00_0.33_0.66_0.90
|
||||
# XYZW-1.00_0.25_0.75_0.50
|
||||
# Y-0.00_0.00_0.00_0.00
|
||||
# Y-0.00_0.10_0.00_0.00
|
||||
# Y-0.00_0.60_0.00_0.00
|
||||
# Z-0.00_0.00_0.00_0.00
|
||||
# Z-0.00_0.00_0.20_0.00
|
||||
# Z-0.00_0.00_0.80_0.00
|
||||
|
||||
#Front face
|
||||
# FrontFace_0_CF_B
|
||||
# FrontFace_0_CF_F
|
||||
# FrontFace_0_CF_FaB
|
||||
# FrontFace_63_CF_B
|
||||
# FrontFace_63_CF_F
|
||||
# FrontFace_63_CF_FaB
|
||||
# FrontFace_CCW_CF_B
|
||||
# FrontFace_CCW_CF_F
|
||||
# FrontFace_CCW_CF_FaB
|
||||
# FrontFace_CW_CF_B
|
||||
# FrontFace_CW_CF_F
|
||||
# FrontFace_CW_CF_FaB
|
||||
|
||||
#Depth buffer
|
||||
# DepthFmt_z16_Cn_FZn_M00003f
|
||||
# DepthFmt_z16_Cn_FZn_M00043e
|
||||
# DepthFmt_z16_Cn_FZn_M00083d
|
||||
# DepthFmt_z16_Cn_FZn_M000c3c
|
||||
# DepthFmt_z16_Cn_FZn_M00103b
|
||||
# DepthFmt_z16_Cn_FZn_M00143a
|
||||
# DepthFmt_z16_Cn_FZn_M001839
|
||||
# DepthFmt_z16_Cn_FZn_M001c38
|
||||
# DepthFmt_z16_Cn_FZn_M002037
|
||||
# DepthFmt_z16_Cn_FZn_M002436
|
||||
# DepthFmt_z16_Cn_FZn_M002835
|
||||
# DepthFmt_z16_Cn_FZn_M002c34
|
||||
# DepthFmt_z16_Cn_FZn_M003033
|
||||
# DepthFmt_z16_Cn_FZn_M003432
|
||||
# DepthFmt_z16_Cn_FZn_M003831
|
||||
# DepthFmt_z16_Cn_FZn_M003c30
|
||||
# DepthFmt_z16_Cn_FZn_M00402f
|
||||
# DepthFmt_z16_Cn_FZn_M00442e
|
||||
# DepthFmt_z16_Cn_FZn_M00482d
|
||||
# DepthFmt_z16_Cn_FZn_M004c2c
|
||||
# DepthFmt_z16_Cn_FZn_M00502b
|
||||
# DepthFmt_z16_Cn_FZn_M00542a
|
||||
# DepthFmt_z16_Cn_FZn_M005829
|
||||
# DepthFmt_z16_Cn_FZn_M005c28
|
||||
# DepthFmt_z16_Cn_FZn_M006027
|
||||
# DepthFmt_z16_Cn_FZn_M006426
|
||||
# DepthFmt_z16_Cn_FZn_M006825
|
||||
# DepthFmt_z16_Cn_FZn_M006c24
|
||||
# DepthFmt_z16_Cn_FZn_M007023
|
||||
# DepthFmt_z16_Cn_FZn_M007422
|
||||
# DepthFmt_z16_Cn_FZn_M007821
|
||||
# DepthFmt_z16_Cn_FZn_M007c20
|
||||
# DepthFmt_z16_Cn_FZn_M00801f
|
||||
# DepthFmt_z16_Cn_FZn_M00841e
|
||||
# DepthFmt_z16_Cn_FZn_M00881d
|
||||
# DepthFmt_z16_Cn_FZn_M008c1c
|
||||
# DepthFmt_z16_Cn_FZn_M00901b
|
||||
# DepthFmt_z16_Cn_FZn_M00941a
|
||||
# DepthFmt_z16_Cn_FZn_M009819
|
||||
# DepthFmt_z16_Cn_FZn_M009c18
|
||||
# DepthFmt_z16_Cn_FZn_M00a017
|
||||
# DepthFmt_z16_Cn_FZn_M00a416
|
||||
# DepthFmt_z16_Cn_FZn_M00a815
|
||||
# DepthFmt_z16_Cn_FZn_M00ac14
|
||||
# DepthFmt_z16_Cn_FZn_M00b013
|
||||
# DepthFmt_z16_Cn_FZn_M00b412
|
||||
# DepthFmt_z16_Cn_FZn_M00b811
|
||||
# DepthFmt_z16_Cn_FZn_M00bc10
|
||||
# DepthFmt_z16_Cn_FZn_M00c00f
|
||||
# DepthFmt_z16_Cn_FZn_M00c40e
|
||||
# DepthFmt_z16_Cn_FZn_M00c80d
|
||||
# DepthFmt_z16_Cn_FZn_M00cc0c
|
||||
# DepthFmt_z16_Cn_FZn_M00d00b
|
||||
# DepthFmt_z16_Cn_FZn_M00d40a
|
||||
# DepthFmt_z16_Cn_FZn_M00d809
|
||||
# DepthFmt_z16_Cn_FZn_M00dc08
|
||||
# DepthFmt_z16_Cn_FZn_M00e007
|
||||
# DepthFmt_z16_Cn_FZn_M00e406
|
||||
# DepthFmt_z16_Cn_FZn_M00e805
|
||||
# DepthFmt_z16_Cn_FZn_M00ec04
|
||||
# DepthFmt_z16_Cn_FZn_M00f003
|
||||
# DepthFmt_z16_Cn_FZn_M00f402
|
||||
# DepthFmt_z16_Cn_FZn_M00f801
|
||||
# DepthFmt_z16_Cn_FZn_M00fc00
|
||||
# DepthFmt_z16_Cn_FZn_M00ffff
|
||||
# DepthFmt_z16_Cn_FZy_M00003f
|
||||
# DepthFmt_z16_Cn_FZy_M00043e
|
||||
# DepthFmt_z16_Cn_FZy_M00083d
|
||||
# DepthFmt_z16_Cn_FZy_M000c3c
|
||||
# DepthFmt_z16_Cn_FZy_M00103b
|
||||
# DepthFmt_z16_Cn_FZy_M00143a
|
||||
# DepthFmt_z16_Cn_FZy_M001839
|
||||
# DepthFmt_z16_Cn_FZy_M001c38
|
||||
# DepthFmt_z16_Cn_FZy_M002037
|
||||
# DepthFmt_z16_Cn_FZy_M002436
|
||||
# DepthFmt_z16_Cn_FZy_M002835
|
||||
# DepthFmt_z16_Cn_FZy_M002c34
|
||||
# DepthFmt_z16_Cn_FZy_M003033
|
||||
# DepthFmt_z16_Cn_FZy_M003432
|
||||
# DepthFmt_z16_Cn_FZy_M003831
|
||||
# DepthFmt_z16_Cn_FZy_M003c30
|
||||
# DepthFmt_z16_Cn_FZy_M00402f
|
||||
# DepthFmt_z16_Cn_FZy_M00442e
|
||||
# DepthFmt_z16_Cn_FZy_M00482d
|
||||
# DepthFmt_z16_Cn_FZy_M004c2c
|
||||
# DepthFmt_z16_Cn_FZy_M00502b
|
||||
# DepthFmt_z16_Cn_FZy_M00542a
|
||||
# DepthFmt_z16_Cn_FZy_M005829
|
||||
# DepthFmt_z16_Cn_FZy_M005c28
|
||||
# DepthFmt_z16_Cn_FZy_M006027
|
||||
# DepthFmt_z16_Cn_FZy_M006426
|
||||
# DepthFmt_z16_Cn_FZy_M006825
|
||||
# DepthFmt_z16_Cn_FZy_M006c24
|
||||
# DepthFmt_z16_Cn_FZy_M007023
|
||||
# DepthFmt_z16_Cn_FZy_M007422
|
||||
# DepthFmt_z16_Cn_FZy_M007821
|
||||
# DepthFmt_z16_Cn_FZy_M007c20
|
||||
# DepthFmt_z16_Cn_FZy_M00801f
|
||||
# DepthFmt_z16_Cn_FZy_M00841e
|
||||
# DepthFmt_z16_Cn_FZy_M00881d
|
||||
# DepthFmt_z16_Cn_FZy_M008c1c
|
||||
# DepthFmt_z16_Cn_FZy_M00901b
|
||||
# DepthFmt_z16_Cn_FZy_M00941a
|
||||
# DepthFmt_z16_Cn_FZy_M009819
|
||||
# DepthFmt_z16_Cn_FZy_M009c18
|
||||
# DepthFmt_z16_Cn_FZy_M00a017
|
||||
# DepthFmt_z16_Cn_FZy_M00a416
|
||||
# DepthFmt_z16_Cn_FZy_M00a815
|
||||
# DepthFmt_z16_Cn_FZy_M00ac14
|
||||
# DepthFmt_z16_Cn_FZy_M00b013
|
||||
# DepthFmt_z16_Cn_FZy_M00b412
|
||||
# DepthFmt_z16_Cn_FZy_M00b811
|
||||
# DepthFmt_z16_Cn_FZy_M00bc10
|
||||
# DepthFmt_z16_Cn_FZy_M00c00f
|
||||
# DepthFmt_z16_Cn_FZy_M00c40e
|
||||
# DepthFmt_z16_Cn_FZy_M00c80d
|
||||
# DepthFmt_z16_Cn_FZy_M00cc0c
|
||||
# DepthFmt_z16_Cn_FZy_M00d00b
|
||||
# DepthFmt_z16_Cn_FZy_M00d40a
|
||||
# DepthFmt_z16_Cn_FZy_M00d809
|
||||
# DepthFmt_z16_Cn_FZy_M00dc08
|
||||
# DepthFmt_z16_Cn_FZy_M00e007
|
||||
# DepthFmt_z16_Cn_FZy_M00e406
|
||||
# DepthFmt_z16_Cn_FZy_M00e805
|
||||
# DepthFmt_z16_Cn_FZy_M00ec04
|
||||
# DepthFmt_z16_Cn_FZy_M00f003
|
||||
# DepthFmt_z16_Cn_FZy_M00f402
|
||||
# DepthFmt_z16_Cn_FZy_M00f801
|
||||
# DepthFmt_z16_Cn_FZy_M00fc00
|
||||
# DepthFmt_z16_Cn_FZy_M00ffff
|
||||
# DepthFmt_z16_Cy_FZn_M00003f
|
||||
# DepthFmt_z16_Cy_FZn_M00043e
|
||||
# DepthFmt_z16_Cy_FZn_M00083d
|
||||
# DepthFmt_z16_Cy_FZn_M000c3c
|
||||
# DepthFmt_z16_Cy_FZn_M00103b
|
||||
# DepthFmt_z16_Cy_FZn_M00143a
|
||||
# DepthFmt_z16_Cy_FZn_M001839
|
||||
# DepthFmt_z16_Cy_FZn_M001c38
|
||||
# DepthFmt_z16_Cy_FZn_M002037
|
||||
# DepthFmt_z16_Cy_FZn_M002436
|
||||
# DepthFmt_z16_Cy_FZn_M002835
|
||||
# DepthFmt_z16_Cy_FZn_M002c34
|
||||
# DepthFmt_z16_Cy_FZn_M003033
|
||||
# DepthFmt_z16_Cy_FZn_M003432
|
||||
# DepthFmt_z16_Cy_FZn_M003831
|
||||
# DepthFmt_z16_Cy_FZn_M003c30
|
||||
# DepthFmt_z16_Cy_FZn_M00402f
|
||||
# DepthFmt_z16_Cy_FZn_M00442e
|
||||
# DepthFmt_z16_Cy_FZn_M00482d
|
||||
# DepthFmt_z16_Cy_FZn_M004c2c
|
||||
# DepthFmt_z16_Cy_FZn_M00502b
|
||||
# DepthFmt_z16_Cy_FZn_M00542a
|
||||
# DepthFmt_z16_Cy_FZn_M005829
|
||||
# DepthFmt_z16_Cy_FZn_M005c28
|
||||
# DepthFmt_z16_Cy_FZn_M006027
|
||||
# DepthFmt_z16_Cy_FZn_M006426
|
||||
# DepthFmt_z16_Cy_FZn_M006825
|
||||
# DepthFmt_z16_Cy_FZn_M006c24
|
||||
# DepthFmt_z16_Cy_FZn_M007023
|
||||
# DepthFmt_z16_Cy_FZn_M007422
|
||||
# DepthFmt_z16_Cy_FZn_M007821
|
||||
# DepthFmt_z16_Cy_FZn_M007c20
|
||||
# DepthFmt_z16_Cy_FZn_M00801f
|
||||
# DepthFmt_z16_Cy_FZn_M00841e
|
||||
# DepthFmt_z16_Cy_FZn_M00881d
|
||||
# DepthFmt_z16_Cy_FZn_M008c1c
|
||||
# DepthFmt_z16_Cy_FZn_M00901b
|
||||
# DepthFmt_z16_Cy_FZn_M00941a
|
||||
# DepthFmt_z16_Cy_FZn_M009819
|
||||
# DepthFmt_z16_Cy_FZn_M009c18
|
||||
# DepthFmt_z16_Cy_FZn_M00a017
|
||||
# DepthFmt_z16_Cy_FZn_M00a416
|
||||
# DepthFmt_z16_Cy_FZn_M00a815
|
||||
# DepthFmt_z16_Cy_FZn_M00ac14
|
||||
# DepthFmt_z16_Cy_FZn_M00b013
|
||||
# DepthFmt_z16_Cy_FZn_M00b412
|
||||
# DepthFmt_z16_Cy_FZn_M00b811
|
||||
# DepthFmt_z16_Cy_FZn_M00bc10
|
||||
# DepthFmt_z16_Cy_FZn_M00c00f
|
||||
# DepthFmt_z16_Cy_FZn_M00c40e
|
||||
# DepthFmt_z16_Cy_FZn_M00c80d
|
||||
# DepthFmt_z16_Cy_FZn_M00cc0c
|
||||
# DepthFmt_z16_Cy_FZn_M00d00b
|
||||
# DepthFmt_z16_Cy_FZn_M00d40a
|
||||
# DepthFmt_z16_Cy_FZn_M00d809
|
||||
# DepthFmt_z16_Cy_FZn_M00dc08
|
||||
# DepthFmt_z16_Cy_FZn_M00e007
|
||||
# DepthFmt_z16_Cy_FZn_M00e406
|
||||
# DepthFmt_z16_Cy_FZn_M00e805
|
||||
# DepthFmt_z16_Cy_FZn_M00ec04
|
||||
# DepthFmt_z16_Cy_FZn_M00f003
|
||||
# DepthFmt_z16_Cy_FZn_M00f402
|
||||
# DepthFmt_z16_Cy_FZn_M00f801
|
||||
# DepthFmt_z16_Cy_FZn_M00fc00
|
||||
# DepthFmt_z16_Cy_FZn_M00ffff
|
||||
# DepthFmt_z16_Cy_FZy_M00003f
|
||||
# DepthFmt_z16_Cy_FZy_M00043e
|
||||
# DepthFmt_z16_Cy_FZy_M00083d
|
||||
# DepthFmt_z16_Cy_FZy_M000c3c
|
||||
# DepthFmt_z16_Cy_FZy_M00103b
|
||||
# DepthFmt_z16_Cy_FZy_M00143a
|
||||
# DepthFmt_z16_Cy_FZy_M001839
|
||||
# DepthFmt_z16_Cy_FZy_M001c38
|
||||
# DepthFmt_z16_Cy_FZy_M002037
|
||||
# DepthFmt_z16_Cy_FZy_M002436
|
||||
# DepthFmt_z16_Cy_FZy_M002835
|
||||
# DepthFmt_z16_Cy_FZy_M002c34
|
||||
# DepthFmt_z16_Cy_FZy_M003033
|
||||
# DepthFmt_z16_Cy_FZy_M003432
|
||||
# DepthFmt_z16_Cy_FZy_M003831
|
||||
# DepthFmt_z16_Cy_FZy_M003c30
|
||||
# DepthFmt_z16_Cy_FZy_M00402f
|
||||
# DepthFmt_z16_Cy_FZy_M00442e
|
||||
# DepthFmt_z16_Cy_FZy_M00482d
|
||||
# DepthFmt_z16_Cy_FZy_M004c2c
|
||||
# DepthFmt_z16_Cy_FZy_M00502b
|
||||
# DepthFmt_z16_Cy_FZy_M00542a
|
||||
# DepthFmt_z16_Cy_FZy_M005829
|
||||
# DepthFmt_z16_Cy_FZy_M005c28
|
||||
# DepthFmt_z16_Cy_FZy_M006027
|
||||
# DepthFmt_z16_Cy_FZy_M006426
|
||||
# DepthFmt_z16_Cy_FZy_M006825
|
||||
# DepthFmt_z16_Cy_FZy_M006c24
|
||||
# DepthFmt_z16_Cy_FZy_M007023
|
||||
# DepthFmt_z16_Cy_FZy_M007422
|
||||
# DepthFmt_z16_Cy_FZy_M007821
|
||||
# DepthFmt_z16_Cy_FZy_M007c20
|
||||
# DepthFmt_z16_Cy_FZy_M00801f
|
||||
# DepthFmt_z16_Cy_FZy_M00841e
|
||||
# DepthFmt_z16_Cy_FZy_M00881d
|
||||
# DepthFmt_z16_Cy_FZy_M008c1c
|
||||
# DepthFmt_z16_Cy_FZy_M00901b
|
||||
# DepthFmt_z16_Cy_FZy_M00941a
|
||||
# DepthFmt_z16_Cy_FZy_M009819
|
||||
# DepthFmt_z16_Cy_FZy_M009c18
|
||||
# DepthFmt_z16_Cy_FZy_M00a017
|
||||
# DepthFmt_z16_Cy_FZy_M00a416
|
||||
# DepthFmt_z16_Cy_FZy_M00a815
|
||||
# DepthFmt_z16_Cy_FZy_M00ac14
|
||||
# DepthFmt_z16_Cy_FZy_M00b013
|
||||
# DepthFmt_z16_Cy_FZy_M00b412
|
||||
# DepthFmt_z16_Cy_FZy_M00b811
|
||||
# DepthFmt_z16_Cy_FZy_M00bc10
|
||||
# DepthFmt_z16_Cy_FZy_M00c00f
|
||||
# DepthFmt_z16_Cy_FZy_M00c40e
|
||||
# DepthFmt_z16_Cy_FZy_M00c80d
|
||||
# DepthFmt_z16_Cy_FZy_M00cc0c
|
||||
# DepthFmt_z16_Cy_FZy_M00d00b
|
||||
# DepthFmt_z16_Cy_FZy_M00d40a
|
||||
# DepthFmt_z16_Cy_FZy_M00d809
|
||||
# DepthFmt_z16_Cy_FZy_M00dc08
|
||||
# DepthFmt_z16_Cy_FZy_M00e007
|
||||
# DepthFmt_z16_Cy_FZy_M00e406
|
||||
# DepthFmt_z16_Cy_FZy_M00e805
|
||||
# DepthFmt_z16_Cy_FZy_M00ec04
|
||||
# DepthFmt_z16_Cy_FZy_M00f003
|
||||
# DepthFmt_z16_Cy_FZy_M00f402
|
||||
# DepthFmt_z16_Cy_FZy_M00f801
|
||||
# DepthFmt_z16_Cy_FZy_M00fc00
|
||||
# DepthFmt_z16_Cy_FZy_M00ffff
|
||||
# DepthFmt_z24_Cn_FZn_M00003f
|
||||
# DepthFmt_z24_Cn_FZn_M04003e
|
||||
# DepthFmt_z24_Cn_FZn_M08003d
|
||||
# DepthFmt_z24_Cn_FZn_M0c003c
|
||||
# DepthFmt_z24_Cn_FZn_M10003b
|
||||
# DepthFmt_z24_Cn_FZn_M14003a
|
||||
# DepthFmt_z24_Cn_FZn_M180039
|
||||
# DepthFmt_z24_Cn_FZn_M1c0038
|
||||
# DepthFmt_z24_Cn_FZn_M200037
|
||||
# DepthFmt_z24_Cn_FZn_M240036
|
||||
# DepthFmt_z24_Cn_FZn_M280035
|
||||
# DepthFmt_z24_Cn_FZn_M2c0034
|
||||
# DepthFmt_z24_Cn_FZn_M300033
|
||||
# DepthFmt_z24_Cn_FZn_M340032
|
||||
# DepthFmt_z24_Cn_FZn_M380031
|
||||
# DepthFmt_z24_Cn_FZn_M3c0030
|
||||
# DepthFmt_z24_Cn_FZn_M40002f
|
||||
# DepthFmt_z24_Cn_FZn_M44002e
|
||||
# DepthFmt_z24_Cn_FZn_M48002d
|
||||
# DepthFmt_z24_Cn_FZn_M4c002c
|
||||
# DepthFmt_z24_Cn_FZn_M50002b
|
||||
# DepthFmt_z24_Cn_FZn_M54002a
|
||||
# DepthFmt_z24_Cn_FZn_M580029
|
||||
# DepthFmt_z24_Cn_FZn_M5c0028
|
||||
# DepthFmt_z24_Cn_FZn_M600027
|
||||
# DepthFmt_z24_Cn_FZn_M640026
|
||||
# DepthFmt_z24_Cn_FZn_M680025
|
||||
# DepthFmt_z24_Cn_FZn_M6c0024
|
||||
# DepthFmt_z24_Cn_FZn_M700023
|
||||
# DepthFmt_z24_Cn_FZn_M740022
|
||||
# DepthFmt_z24_Cn_FZn_M780021
|
||||
# DepthFmt_z24_Cn_FZn_M7c0020
|
||||
# DepthFmt_z24_Cn_FZn_M80001f
|
||||
# DepthFmt_z24_Cn_FZn_M84001e
|
||||
# DepthFmt_z24_Cn_FZn_M88001d
|
||||
# DepthFmt_z24_Cn_FZn_M8c001c
|
||||
# DepthFmt_z24_Cn_FZn_M90001b
|
||||
# DepthFmt_z24_Cn_FZn_M94001a
|
||||
# DepthFmt_z24_Cn_FZn_M980019
|
||||
# DepthFmt_z24_Cn_FZn_M9c0018
|
||||
# DepthFmt_z24_Cn_FZn_Ma00017
|
||||
# DepthFmt_z24_Cn_FZn_Ma40016
|
||||
# DepthFmt_z24_Cn_FZn_Ma80015
|
||||
# DepthFmt_z24_Cn_FZn_Mac0014
|
||||
# DepthFmt_z24_Cn_FZn_Mb00013
|
||||
# DepthFmt_z24_Cn_FZn_Mb40012
|
||||
# DepthFmt_z24_Cn_FZn_Mb80011
|
||||
# DepthFmt_z24_Cn_FZn_Mbc0010
|
||||
# DepthFmt_z24_Cn_FZn_Mc0000f
|
||||
# DepthFmt_z24_Cn_FZn_Mc4000e
|
||||
# DepthFmt_z24_Cn_FZn_Mc8000d
|
||||
# DepthFmt_z24_Cn_FZn_Mcc000c
|
||||
# DepthFmt_z24_Cn_FZn_Md0000b
|
||||
# DepthFmt_z24_Cn_FZn_Md4000a
|
||||
# DepthFmt_z24_Cn_FZn_Md80009
|
||||
# DepthFmt_z24_Cn_FZn_Mdc0008
|
||||
# DepthFmt_z24_Cn_FZn_Me00007
|
||||
# DepthFmt_z24_Cn_FZn_Me40006
|
||||
# DepthFmt_z24_Cn_FZn_Me80005
|
||||
# DepthFmt_z24_Cn_FZn_Mec0004
|
||||
# DepthFmt_z24_Cn_FZn_Mf00003
|
||||
# DepthFmt_z24_Cn_FZn_Mf40002
|
||||
# DepthFmt_z24_Cn_FZn_Mf80001
|
||||
# DepthFmt_z24_Cn_FZn_Mfc0000
|
||||
# DepthFmt_z24_Cn_FZn_Mffffff
|
||||
# DepthFmt_z24_Cn_FZy_M00003f
|
||||
# DepthFmt_z24_Cn_FZy_M03fc3e
|
||||
# DepthFmt_z24_Cn_FZy_M07f83d
|
||||
# DepthFmt_z24_Cn_FZy_M0bf43c
|
||||
# DepthFmt_z24_Cn_FZy_M0ff03b
|
||||
# DepthFmt_z24_Cn_FZy_M13ec3a
|
||||
# DepthFmt_z24_Cn_FZy_M17e839
|
||||
# DepthFmt_z24_Cn_FZy_M1be438
|
||||
# DepthFmt_z24_Cn_FZy_M1fe037
|
||||
# DepthFmt_z24_Cn_FZy_M23dc36
|
||||
# DepthFmt_z24_Cn_FZy_M27d835
|
||||
# DepthFmt_z24_Cn_FZy_M2bd434
|
||||
# DepthFmt_z24_Cn_FZy_M2fd033
|
||||
# DepthFmt_z24_Cn_FZy_M33cc32
|
||||
# DepthFmt_z24_Cn_FZy_M37c831
|
||||
# DepthFmt_z24_Cn_FZy_M3bc430
|
||||
# DepthFmt_z24_Cn_FZy_M3fc02f
|
||||
# DepthFmt_z24_Cn_FZy_M43bc2e
|
||||
# DepthFmt_z24_Cn_FZy_M47b82d
|
||||
# DepthFmt_z24_Cn_FZy_M4bb42c
|
||||
# DepthFmt_z24_Cn_FZy_M4fb02b
|
||||
# DepthFmt_z24_Cn_FZy_M53ac2a
|
||||
# DepthFmt_z24_Cn_FZy_M57a829
|
||||
# DepthFmt_z24_Cn_FZy_M5ba428
|
||||
# DepthFmt_z24_Cn_FZy_M5fa027
|
||||
# DepthFmt_z24_Cn_FZy_M639c26
|
||||
# DepthFmt_z24_Cn_FZy_M679825
|
||||
# DepthFmt_z24_Cn_FZy_M6b9424
|
||||
# DepthFmt_z24_Cn_FZy_M6f9023
|
||||
# DepthFmt_z24_Cn_FZy_M738c22
|
||||
# DepthFmt_z24_Cn_FZy_M778821
|
||||
# DepthFmt_z24_Cn_FZy_M7b8420
|
||||
# DepthFmt_z24_Cn_FZy_M7f801f
|
||||
# DepthFmt_z24_Cn_FZy_M837c1e
|
||||
# DepthFmt_z24_Cn_FZy_M87781d
|
||||
# DepthFmt_z24_Cn_FZy_M8b741c
|
||||
# DepthFmt_z24_Cn_FZy_M8f701b
|
||||
# DepthFmt_z24_Cn_FZy_M936c1a
|
||||
# DepthFmt_z24_Cn_FZy_M976819
|
||||
# DepthFmt_z24_Cn_FZy_M9b6418
|
||||
# DepthFmt_z24_Cn_FZy_M9f6017
|
||||
# DepthFmt_z24_Cn_FZy_Ma35c16
|
||||
# DepthFmt_z24_Cn_FZy_Ma75815
|
||||
# DepthFmt_z24_Cn_FZy_Mab5414
|
||||
# DepthFmt_z24_Cn_FZy_Maf5013
|
||||
# DepthFmt_z24_Cn_FZy_Mb34c12
|
||||
# DepthFmt_z24_Cn_FZy_Mb74811
|
||||
# DepthFmt_z24_Cn_FZy_Mbb4410
|
||||
# DepthFmt_z24_Cn_FZy_Mbf400f
|
||||
# DepthFmt_z24_Cn_FZy_Mc33c0e
|
||||
# DepthFmt_z24_Cn_FZy_Mc7380d
|
||||
# DepthFmt_z24_Cn_FZy_Mcb340c
|
||||
# DepthFmt_z24_Cn_FZy_Mcf300b
|
||||
# DepthFmt_z24_Cn_FZy_Md32c0a
|
||||
# DepthFmt_z24_Cn_FZy_Md72809
|
||||
# DepthFmt_z24_Cn_FZy_Mdb2408
|
||||
# DepthFmt_z24_Cn_FZy_Mdf2007
|
||||
# DepthFmt_z24_Cn_FZy_Me31c06
|
||||
# DepthFmt_z24_Cn_FZy_Me71805
|
||||
# DepthFmt_z24_Cn_FZy_Meb1404
|
||||
# DepthFmt_z24_Cn_FZy_Mef1003
|
||||
# DepthFmt_z24_Cn_FZy_Mf30c02
|
||||
# DepthFmt_z24_Cn_FZy_Mf70801
|
||||
# DepthFmt_z24_Cn_FZy_Mfb0400
|
||||
# DepthFmt_z24_Cn_FZy_Mfeffff
|
||||
# DepthFmt_z24_Cy_FZn_M00003f
|
||||
# DepthFmt_z24_Cy_FZn_M04003e
|
||||
# DepthFmt_z24_Cy_FZn_M08003d
|
||||
# DepthFmt_z24_Cy_FZn_M0c003c
|
||||
# DepthFmt_z24_Cy_FZn_M10003b
|
||||
# DepthFmt_z24_Cy_FZn_M14003a
|
||||
# DepthFmt_z24_Cy_FZn_M180039
|
||||
# DepthFmt_z24_Cy_FZn_M1c0038
|
||||
# DepthFmt_z24_Cy_FZn_M200037
|
||||
# DepthFmt_z24_Cy_FZn_M240036
|
||||
# DepthFmt_z24_Cy_FZn_M280035
|
||||
# DepthFmt_z24_Cy_FZn_M2c0034
|
||||
# DepthFmt_z24_Cy_FZn_M300033
|
||||
# DepthFmt_z24_Cy_FZn_M340032
|
||||
# DepthFmt_z24_Cy_FZn_M380031
|
||||
# DepthFmt_z24_Cy_FZn_M3c0030
|
||||
# DepthFmt_z24_Cy_FZn_M40002f
|
||||
# DepthFmt_z24_Cy_FZn_M44002e
|
||||
# DepthFmt_z24_Cy_FZn_M48002d
|
||||
# DepthFmt_z24_Cy_FZn_M4c002c
|
||||
# DepthFmt_z24_Cy_FZn_M50002b
|
||||
# DepthFmt_z24_Cy_FZn_M54002a
|
||||
# DepthFmt_z24_Cy_FZn_M580029
|
||||
# DepthFmt_z24_Cy_FZn_M5c0028
|
||||
# DepthFmt_z24_Cy_FZn_M600027
|
||||
# DepthFmt_z24_Cy_FZn_M640026
|
||||
# DepthFmt_z24_Cy_FZn_M680025
|
||||
# DepthFmt_z24_Cy_FZn_M6c0024
|
||||
# DepthFmt_z24_Cy_FZn_M700023
|
||||
# DepthFmt_z24_Cy_FZn_M740022
|
||||
# DepthFmt_z24_Cy_FZn_M780021
|
||||
# DepthFmt_z24_Cy_FZn_M7c0020
|
||||
# DepthFmt_z24_Cy_FZn_M80001f
|
||||
# DepthFmt_z24_Cy_FZn_M84001e
|
||||
# DepthFmt_z24_Cy_FZn_M88001d
|
||||
# DepthFmt_z24_Cy_FZn_M8c001c
|
||||
# DepthFmt_z24_Cy_FZn_M90001b
|
||||
# DepthFmt_z24_Cy_FZn_M94001a
|
||||
# DepthFmt_z24_Cy_FZn_M980019
|
||||
# DepthFmt_z24_Cy_FZn_M9c0018
|
||||
# DepthFmt_z24_Cy_FZn_Ma00017
|
||||
# DepthFmt_z24_Cy_FZn_Ma40016
|
||||
# DepthFmt_z24_Cy_FZn_Ma80015
|
||||
# DepthFmt_z24_Cy_FZn_Mac0014
|
||||
# DepthFmt_z24_Cy_FZn_Mb00013
|
||||
# DepthFmt_z24_Cy_FZn_Mb40012
|
||||
# DepthFmt_z24_Cy_FZn_Mb80011
|
||||
# DepthFmt_z24_Cy_FZn_Mbc0010
|
||||
# DepthFmt_z24_Cy_FZn_Mc0000f
|
||||
# DepthFmt_z24_Cy_FZn_Mc4000e
|
||||
# DepthFmt_z24_Cy_FZn_Mc8000d
|
||||
# DepthFmt_z24_Cy_FZn_Mcc000c
|
||||
# DepthFmt_z24_Cy_FZn_Md0000b
|
||||
# DepthFmt_z24_Cy_FZn_Md4000a
|
||||
# DepthFmt_z24_Cy_FZn_Md80009
|
||||
# DepthFmt_z24_Cy_FZn_Mdc0008
|
||||
# DepthFmt_z24_Cy_FZn_Me00007
|
||||
# DepthFmt_z24_Cy_FZn_Me40006
|
||||
# DepthFmt_z24_Cy_FZn_Me80005
|
||||
# DepthFmt_z24_Cy_FZn_Mec0004
|
||||
# DepthFmt_z24_Cy_FZn_Mf00003
|
||||
# DepthFmt_z24_Cy_FZn_Mf40002
|
||||
# DepthFmt_z24_Cy_FZn_Mf80001
|
||||
# DepthFmt_z24_Cy_FZn_Mfc0000
|
||||
# DepthFmt_z24_Cy_FZn_Mffffff
|
||||
# DepthFmt_z24_Cy_FZy_M00003f
|
||||
# DepthFmt_z24_Cy_FZy_M03fc3e
|
||||
# DepthFmt_z24_Cy_FZy_M07f83d
|
||||
# DepthFmt_z24_Cy_FZy_M0bf43c
|
||||
# DepthFmt_z24_Cy_FZy_M0ff03b
|
||||
# DepthFmt_z24_Cy_FZy_M13ec3a
|
||||
# DepthFmt_z24_Cy_FZy_M17e839
|
||||
# DepthFmt_z24_Cy_FZy_M1be438
|
||||
# DepthFmt_z24_Cy_FZy_M1fe037
|
||||
# DepthFmt_z24_Cy_FZy_M23dc36
|
||||
# DepthFmt_z24_Cy_FZy_M27d835
|
||||
# DepthFmt_z24_Cy_FZy_M2bd434
|
||||
# DepthFmt_z24_Cy_FZy_M2fd033
|
||||
# DepthFmt_z24_Cy_FZy_M33cc32
|
||||
# DepthFmt_z24_Cy_FZy_M37c831
|
||||
# DepthFmt_z24_Cy_FZy_M3bc430
|
||||
# DepthFmt_z24_Cy_FZy_M3fc02f
|
||||
# DepthFmt_z24_Cy_FZy_M43bc2e
|
||||
# DepthFmt_z24_Cy_FZy_M47b82d
|
||||
# DepthFmt_z24_Cy_FZy_M4bb42c
|
||||
# DepthFmt_z24_Cy_FZy_M4fb02b
|
||||
# DepthFmt_z24_Cy_FZy_M53ac2a
|
||||
# DepthFmt_z24_Cy_FZy_M57a829
|
||||
# DepthFmt_z24_Cy_FZy_M5ba428
|
||||
# DepthFmt_z24_Cy_FZy_M5fa027
|
||||
# DepthFmt_z24_Cy_FZy_M639c26
|
||||
# DepthFmt_z24_Cy_FZy_M679825
|
||||
# DepthFmt_z24_Cy_FZy_M6b9424
|
||||
# DepthFmt_z24_Cy_FZy_M6f9023
|
||||
# DepthFmt_z24_Cy_FZy_M738c22
|
||||
# DepthFmt_z24_Cy_FZy_M778821
|
||||
# DepthFmt_z24_Cy_FZy_M7b8420
|
||||
# DepthFmt_z24_Cy_FZy_M7f801f
|
||||
# DepthFmt_z24_Cy_FZy_M837c1e
|
||||
# DepthFmt_z24_Cy_FZy_M87781d
|
||||
# DepthFmt_z24_Cy_FZy_M8b741c
|
||||
# DepthFmt_z24_Cy_FZy_M8f701b
|
||||
# DepthFmt_z24_Cy_FZy_M936c1a
|
||||
# DepthFmt_z24_Cy_FZy_M976819
|
||||
# DepthFmt_z24_Cy_FZy_M9b6418
|
||||
# DepthFmt_z24_Cy_FZy_M9f6017
|
||||
# DepthFmt_z24_Cy_FZy_Ma35c16
|
||||
# DepthFmt_z24_Cy_FZy_Ma75815
|
||||
# DepthFmt_z24_Cy_FZy_Mab5414
|
||||
# DepthFmt_z24_Cy_FZy_Maf5013
|
||||
# DepthFmt_z24_Cy_FZy_Mb34c12
|
||||
# DepthFmt_z24_Cy_FZy_Mb74811
|
||||
# DepthFmt_z24_Cy_FZy_Mbb4410
|
||||
# DepthFmt_z24_Cy_FZy_Mbf400f
|
||||
# DepthFmt_z24_Cy_FZy_Mc33c0e
|
||||
# DepthFmt_z24_Cy_FZy_Mc7380d
|
||||
# DepthFmt_z24_Cy_FZy_Mcb340c
|
||||
# DepthFmt_z24_Cy_FZy_Mcf300b
|
||||
# DepthFmt_z24_Cy_FZy_Md32c0a
|
||||
# DepthFmt_z24_Cy_FZy_Md72809
|
||||
# DepthFmt_z24_Cy_FZy_Mdb2408
|
||||
# DepthFmt_z24_Cy_FZy_Mdf2007
|
||||
# DepthFmt_z24_Cy_FZy_Me31c06
|
||||
# DepthFmt_z24_Cy_FZy_Me71805
|
||||
# DepthFmt_z24_Cy_FZy_Meb1404
|
||||
# DepthFmt_z24_Cy_FZy_Mef1003
|
||||
# DepthFmt_z24_Cy_FZy_Mf30c02
|
||||
# DepthFmt_z24_Cy_FZy_Mf70801
|
||||
# DepthFmt_z24_Cy_FZy_Mfb0400
|
||||
# DepthFmt_z24_Cy_FZy_Mfeffff
|
||||
|
||||
#Image blit
|
||||
# ImgBlt_BLENDAND_XRGB_B00000000
|
||||
# ImgBlt_BLENDAND_XRGB_B007FFFFF
|
||||
# ImgBlt_BLENDAND_XRGB_B00800000
|
||||
# ImgBlt_BLENDAND_XRGB_B00D00000
|
||||
# ImgBlt_BLENDAND_XRGB_B03300000
|
||||
# ImgBlt_BLENDAND_XRGB_B44400000
|
||||
# ImgBlt_BLENDAND_XRGB_B444FFFFF
|
||||
# ImgBlt_BLENDAND_XRGB_B66800000
|
||||
# ImgBlt_BLENDAND_XRGB_B7F800000
|
||||
# ImgBlt_BLENDAND_XRGB_B7FFFFFFF
|
||||
# ImgBlt_BLENDAND_XRGB_B80000000
|
||||
# ImgBlt_BLENDAND_XRGB_B8FFFFFFF
|
||||
# ImgBlt_BLENDAND_ZRGB_B007FFFFF
|
||||
# ImgBlt_BLENDAND_ZRGB_B00800000
|
||||
# ImgBlt_BLENDAND_ZRGB_B00D00000
|
||||
# ImgBlt_BLENDAND_ZRGB_B03300000
|
||||
# ImgBlt_BLENDAND_ZRGB_B44400000
|
||||
# ImgBlt_BLENDAND_ZRGB_B444FFFFF
|
||||
# ImgBlt_BLENDAND_ZRGB_B66800000
|
||||
# ImgBlt_BLENDAND_ZRGB_B7F800000
|
||||
# ImgBlt_SRCCOPY_ARGB_B00000000
|
||||
# ImgBlt_SRCCOPY_XRGB_B00000000
|
||||
# ImgBlt_SRCCOPY_ZRGB_B00000000
|
||||
|
||||
#Material alpha
|
||||
# MatA_SMat_A0
|
||||
# MatA_SMat_A3D4CCCCD
|
||||
# MatA_SMat_A3E800000
|
||||
# MatA_SMat_A3F000000
|
||||
# MatA_SMat_A3F400000
|
||||
# MatA_SMat_A3F800000
|
||||
# MatA_SMat_A40000000
|
||||
# MatA_SMat_ABF800000
|
||||
# MatA_SVDiffuse_A0
|
||||
# MatA_SVDiffuse_A3D4CCCCD
|
||||
# MatA_SVDiffuse_A3E800000
|
||||
# MatA_SVDiffuse_A3F000000
|
||||
# MatA_SVDiffuse_A3F400000
|
||||
# MatA_SVDiffuse_A3F800000
|
||||
# MatA_SVDiffuse_A40000000
|
||||
# MatA_SVDiffuse_ABF800000
|
||||
# MatA_SVSpec_A0
|
||||
# MatA_SVSpec_A3D4CCCCD
|
||||
# MatA_SVSpec_A3E800000
|
||||
# MatA_SVSpec_A3F000000
|
||||
# MatA_SVSpec_A3F400000
|
||||
# MatA_SVSpec_A3F800000
|
||||
# MatA_SVSpec_A40000000
|
||||
# MatA_SVSpec_ABF800000
|
||||
|
||||
#Material color
|
||||
# 001_RG0_11
|
||||
# 011_rBg_11
|
||||
# 011_rG0_B1
|
||||
# 301_rG0_11
|
||||
# 310_rG0_11
|
||||
# 311_rG0_11
|
||||
|
||||
#Material color source
|
||||
# FromMaterial
|
||||
# FromVertexDiffuse
|
||||
# FromVertexSpecular
|
||||
|
||||
#SetVertexData
|
||||
# SET_VERTEX_DATA2F_M
|
||||
# SET_VERTEX_DATA2S-0001
|
||||
# SET_VERTEX_DATA2S-7FFF
|
||||
# SET_VERTEX_DATA4F_M
|
||||
# SET_VERTEX_DATA4S_M-0001
|
||||
# SET_VERTEX_DATA4S_M-7FFF
|
||||
# SET_VERTEX_DATA4UB
|
||||
|
||||
#Texture border
|
||||
# 2D
|
||||
|
||||
#Texgen with texture matrix
|
||||
# Disabled_Arbitrary
|
||||
# Disabled_Double
|
||||
# Disabled_Half
|
||||
# Disabled_Identity
|
||||
# Disabled_RotateX
|
||||
# Disabled_RotateY
|
||||
# Disabled_RotateZ
|
||||
# Disabled_ShiftHMinus
|
||||
# Disabled_ShiftHPlus
|
||||
# Disabled_ShiftVMinus
|
||||
# Disabled_ShiftVPlus
|
||||
# EyeLinear_Arbitrary
|
||||
# EyeLinear_Double
|
||||
# EyeLinear_Half
|
||||
# EyeLinear_Identity
|
||||
# EyeLinear_RotateX
|
||||
# EyeLinear_RotateY
|
||||
# EyeLinear_RotateZ
|
||||
# EyeLinear_ShiftHMinus
|
||||
# EyeLinear_ShiftHPlus
|
||||
# EyeLinear_ShiftVMinus
|
||||
# EyeLinear_ShiftVPlus
|
||||
# NormalMap_Arbitrary
|
||||
# NormalMap_Double
|
||||
# NormalMap_Half
|
||||
# NormalMap_Identity
|
||||
# NormalMap_RotateX
|
||||
# NormalMap_RotateY
|
||||
# NormalMap_RotateZ
|
||||
# NormalMap_ShiftHMinus
|
||||
# NormalMap_ShiftHPlus
|
||||
# NormalMap_ShiftVMinus
|
||||
# NormalMap_ShiftVPlus
|
||||
# ReflectionMap_Arbitrary
|
||||
# ReflectionMap_Double
|
||||
# ReflectionMap_Half
|
||||
# ReflectionMap_Identity
|
||||
# ReflectionMap_RotateX
|
||||
# ReflectionMap_RotateY
|
||||
# ReflectionMap_RotateZ
|
||||
# ReflectionMap_ShiftHMinus
|
||||
# ReflectionMap_ShiftHPlus
|
||||
# ReflectionMap_ShiftVMinus
|
||||
# ReflectionMap_ShiftVPlus
|
||||
|
||||
#Texgen
|
||||
# Disabled
|
||||
# EyeLinear
|
||||
# NormalMap
|
||||
# ReflectionMap
|
||||
|
||||
#Texture format
|
||||
# TexFmt_A1R5G5B5
|
||||
# TexFmt_A1R5G5B5_L
|
||||
# TexFmt_A4R4G4B4
|
||||
# TexFmt_A4R4G4B4_L
|
||||
# TexFmt_A8B8G8R8
|
||||
# TexFmt_A8B8G8R8_L
|
||||
# TexFmt_A8R8G8B8
|
||||
# TexFmt_A8R8G8B8_L
|
||||
# TexFmt_A8Y8
|
||||
# TexFmt_AY8
|
||||
# TexFmt_AY8_L
|
||||
# TexFmt_B8G8R8A8
|
||||
# TexFmt_B8G8R8A8_L
|
||||
# TexFmt_DXT1
|
||||
# TexFmt_G8B8_L
|
||||
# TexFmt_R5G6B5
|
||||
# TexFmt_R5G6B5_L
|
||||
# TexFmt_R8G8B8A8
|
||||
# TexFmt_R8G8B8A8_L
|
||||
# TexFmt_SZ_Index8_p128
|
||||
# TexFmt_SZ_Index8_p256
|
||||
# TexFmt_SZ_Index8_p32
|
||||
# TexFmt_SZ_Index8_p64
|
||||
# TexFmt_UYVY_L
|
||||
# TexFmt_X1R5G5B5
|
||||
# TexFmt_X1R5G5B5_L
|
||||
# TexFmt_X8R8G8B8
|
||||
# TexFmt_X8R8G8B8_L
|
||||
# TexFmt_Y8
|
||||
# TexFmt_Y8_L
|
||||
# TexFmt_YUY2_L
|
||||
|
||||
#Texture Matrix
|
||||
# Arbitrary
|
||||
# Double
|
||||
# Half
|
||||
# Identity
|
||||
# RotateX
|
||||
# RotateY
|
||||
# RotateZ
|
||||
# ShiftHMinus
|
||||
# ShiftHPlus
|
||||
# ShiftVMinus
|
||||
# ShiftVPlus
|
||||
|
||||
#Texture render target
|
||||
# TexFmt_A1R5G5B5
|
||||
# TexFmt_A1R5G5B5_L
|
||||
# TexFmt_A4R4G4B4
|
||||
# TexFmt_A4R4G4B4_L
|
||||
# TexFmt_A8B8G8R8
|
||||
# TexFmt_A8B8G8R8_L
|
||||
# TexFmt_A8R8G8B8
|
||||
# TexFmt_A8R8G8B8_L
|
||||
# TexFmt_A8Y8
|
||||
# TexFmt_AY8
|
||||
# TexFmt_AY8_L
|
||||
# TexFmt_B8G8R8A8
|
||||
# TexFmt_B8G8R8A8_L
|
||||
# TexFmt_DXT1
|
||||
# TexFmt_G8B8_L
|
||||
# TexFmt_R5G6B5
|
||||
# TexFmt_R5G6B5_L
|
||||
# TexFmt_R8G8B8A8
|
||||
# TexFmt_R8G8B8A8_L
|
||||
# TexFmt_SZ_Index8_p128
|
||||
# TexFmt_SZ_Index8_p256
|
||||
# TexFmt_SZ_Index8_p32
|
||||
# TexFmt_SZ_Index8_p64
|
||||
# TexFmt_UYVY_L
|
||||
# TexFmt_X1R5G5B5
|
||||
# TexFmt_X1R5G5B5_L
|
||||
# TexFmt_X8R8G8B8
|
||||
# TexFmt_X8R8G8B8_L
|
||||
# TexFmt_Y8
|
||||
# TexFmt_Y8_L
|
||||
# TexFmt_YUY2_L
|
||||
|
||||
#3D primitive
|
||||
# LineLoop
|
||||
# LineLoop-inlinearrays
|
||||
# LineLoop-inlinebuf
|
||||
# LineLoop-inlineelements
|
||||
# LineStrip
|
||||
# LineStrip-inlinearrays
|
||||
# LineStrip-inlinebuf
|
||||
# LineStrip-inlineelements
|
||||
# Lines
|
||||
# Lines-inlinearrays
|
||||
# Lines-inlinebuf
|
||||
# Lines-inlineelements
|
||||
# Points
|
||||
# Points-inlinearrays
|
||||
# Points-inlinebuf
|
||||
# Points-inlineelements
|
||||
# Polygon
|
||||
# Polygon-inlinearrays
|
||||
# Polygon-inlinebuf
|
||||
# Polygon-inlineelements
|
||||
# QuadStrip
|
||||
# QuadStrip-inlinearrays
|
||||
# QuadStrip-inlinebuf
|
||||
# QuadStrip-inlineelements
|
||||
# Quads
|
||||
# Quads-inlinearrays
|
||||
# Quads-inlinebuf
|
||||
# Quads-inlineelements
|
||||
# TriFan
|
||||
# TriFan-inlinearrays
|
||||
# TriFan-inlinebuf
|
||||
# TriFan-inlineelements
|
||||
# TriStrip
|
||||
# TriStrip-inlinearrays
|
||||
# TriStrip-inlinebuf
|
||||
# TriStrip-inlineelements
|
||||
# Triangles
|
||||
# Triangles-inlinearrays
|
||||
# Triangles-inlinebuf
|
||||
# Triangles-inlineelements
|
||||
|
||||
#2D Lines
|
||||
# 2DLine-R5G5B5-C000003E0-400_200-400_400
|
||||
# 2DLine-R5G6B5-C000007E0-400_200-400_400
|
||||
# 2DLine-R8G8B8-C00000000-400_200-400_400
|
||||
# 2DLine-R8G8B8-C0000FF00-400_200-400_400
|
||||
# 2DLine-R8G8B8-C0000FF00-444_222-444_444
|
||||
# 2DLine-R8G8B8-C00FF0000-400_200-400_400
|
||||
# 2DLine-R8G8B8-C00FFFFFF-0_0-639_479
|
||||
# 2DLine-R8G8B8-C00FFFFFF-222_222-222_222
|
||||
# 2DLine-R8G8B8-C00FFFFFF-400_0-400_479
|
||||
# 2DLine-R8G8B8-C00FFFFFF-400_300-400_301
|
||||
# 2DLine-R8G8B8-C00FFFFFF-400_300-401_300
|
||||
# 2DLine-R8G8B8-C00FFFFFF-639_479-0_0
|
||||
# 2DLine-R8G8B8-CFFFFFFFF-100_100-100_400
|
||||
|
||||
#Vertex shader rounding tests
|
||||
# Geometry_0.000000
|
||||
# Geometry_0.001000
|
||||
# Geometry_0.500000
|
||||
# Geometry_0.562400
|
||||
# Geometry_0.562500
|
||||
# Geometry_0.562600
|
||||
# Geometry_0.999000
|
||||
# RenderTarget
|
||||
|
||||
#Volume texture
|
||||
# A1R5G5B5
|
||||
# A4R4G4B4
|
||||
# A8B8G8R8
|
||||
# A8R8G8B8
|
||||
# A8Y8
|
||||
# AY8
|
||||
# B8G8R8A8
|
||||
# DXT1
|
||||
# R5G6B5
|
||||
# R8G8B8A8
|
||||
# SZ_Index8
|
||||
# X1R5G5B5
|
||||
# X8R8G8B8
|
||||
# Y8
|
||||
|
||||
#W param
|
||||
# w_gaps
|
||||
# w_neg_strip
|
||||
# w_pos_strip
|
||||
|
||||
#Zero stride
|
||||
# DrawArrays
|
||||
# InlineElements
|
1
test-pgraph/nxdk_pgraph_tests
Submodule
1
test-pgraph/nxdk_pgraph_tests
Submodule
@ -0,0 +1 @@
|
||||
Subproject commit 0bfd392c216807dd2ce2b7129c90f1bcb990d34a
|
@ -19,6 +19,7 @@ def main():
|
||||
ap.add_argument('--xemu', help='Path to the xemu binary')
|
||||
ap.add_argument('--ffmpeg', help='Path to the ffmpeg binary or DISABLE')
|
||||
ap.add_argument('--no-fullscreen', action='store_true', help='Force xemu to run in a window')
|
||||
ap.add_argument('--perceptualdiff', help='Path to the perceptualdiff binary or DISABLE')
|
||||
args = ap.parse_args()
|
||||
|
||||
tests = []
|
||||
@ -49,6 +50,7 @@ def main():
|
||||
os.path.abspath(os.path.expanduser(args.private)),
|
||||
args.xemu,
|
||||
args.ffmpeg,
|
||||
args.perceptualdiff,
|
||||
args.no_fullscreen)
|
||||
|
||||
for i, (test_name, test_cls) in enumerate(tests):
|
||||
|
@ -8,8 +8,9 @@ import signal
|
||||
import time
|
||||
import platform
|
||||
import sys
|
||||
from typing import Optional
|
||||
from typing import Optional, Tuple
|
||||
|
||||
import pyfatx
|
||||
from pyfatx import Fatx
|
||||
|
||||
|
||||
@ -27,6 +28,7 @@ class TestEnvironment:
|
||||
private_path: str,
|
||||
xemu_path: Optional[str],
|
||||
ffmpeg_path: Optional[str],
|
||||
perceptualdiff_path: Optional[str],
|
||||
disable_fullscreen: bool = False):
|
||||
self.private_path = private_path
|
||||
|
||||
@ -40,12 +42,17 @@ class TestEnvironment:
|
||||
self.xemu_path = xemu_path
|
||||
|
||||
self.ffmpeg_path = ffmpeg_path
|
||||
self.perceptualdiff_path = perceptualdiff_path
|
||||
self.disable_fullscreen = disable_fullscreen
|
||||
|
||||
@property
|
||||
def video_capture_enabled(self) -> bool:
|
||||
return self.ffmpeg_path != "DISABLE"
|
||||
|
||||
@property
|
||||
def perceptualdiff_enabled(self) -> bool:
|
||||
return self.perceptualdiff_path != "DISABLE"
|
||||
|
||||
|
||||
class TestBase:
|
||||
"""
|
||||
@ -58,7 +65,13 @@ class TestBase:
|
||||
Tester runs in current working directory and will generate some working files.
|
||||
"""
|
||||
|
||||
def __init__(self, test_env: TestEnvironment, results_path: str, iso_path: str):
|
||||
def __init__(
|
||||
self,
|
||||
test_env: TestEnvironment,
|
||||
xbox_results_path: str,
|
||||
results_out_path: str,
|
||||
iso_path: str,
|
||||
timeout: int = 60):
|
||||
cur_dir = os.getcwd()
|
||||
|
||||
self.flash_path = os.path.join(test_env.private_path, 'bios.bin')
|
||||
@ -66,10 +79,10 @@ class TestBase:
|
||||
self.hdd_path = os.path.join(cur_dir, 'test.img')
|
||||
self.mount_path = os.path.join(cur_dir, 'xemu-hdd-mount')
|
||||
self.iso_path = iso_path
|
||||
self.results_in_path = os.path.join(self.mount_path, 'results')
|
||||
self.results_out_path = results_path
|
||||
self.results_in_path = os.path.join(self.mount_path, xbox_results_path)
|
||||
self.results_out_path = results_out_path
|
||||
self.video_capture_path = os.path.join(self.results_out_path, 'capture.mp4')
|
||||
self.timeout = 60
|
||||
self.timeout = timeout
|
||||
self.test_env = test_env
|
||||
self.ffmpeg = None
|
||||
|
||||
@ -80,11 +93,13 @@ class TestBase:
|
||||
self.record_w: int = 0
|
||||
self.record_h: int = 0
|
||||
|
||||
def prepare_roms(self):
|
||||
shutil.rmtree(results_out_path, True)
|
||||
|
||||
def _prepare_roms(self):
|
||||
log.info('Preparing ROM images')
|
||||
# Nothing to do here yet
|
||||
|
||||
def prepare_hdd(self):
|
||||
def _prepare_hdd(self):
|
||||
log.info('Preparing HDD image')
|
||||
disk_size = 8*1024*1024*1024
|
||||
if os.path.exists(self.hdd_path):
|
||||
@ -94,7 +109,9 @@ class TestBase:
|
||||
else:
|
||||
Fatx.create(self.hdd_path, disk_size)
|
||||
|
||||
def prepare_config(self):
|
||||
self.setup_hdd_files(Fatx(self.hdd_path))
|
||||
|
||||
def _prepare_config(self):
|
||||
config = ( '[system]\n'
|
||||
f'flash_path = {self.flash_path}\n'
|
||||
f'bootrom_path = {self.mcpx_path}\n'
|
||||
@ -107,7 +124,7 @@ class TestBase:
|
||||
with open('xemu.ini', 'w') as f:
|
||||
f.write(config)
|
||||
|
||||
def launch_video_capture(self):
|
||||
def _launch_video_capture(self):
|
||||
if not self.test_env.video_capture_enabled:
|
||||
return
|
||||
ffmpeg_path = self.test_env.ffmpeg_path
|
||||
@ -132,13 +149,13 @@ class TestBase:
|
||||
log.info('Launching FFMPEG (capturing to %s) with %s', self.video_capture_path, repr(c))
|
||||
self.ffmpeg = subprocess.Popen(c, stdin=subprocess.PIPE)
|
||||
|
||||
def terminate_video_capture(self):
|
||||
def _terminate_video_capture(self):
|
||||
if not self.test_env.video_capture_enabled or self.ffmpeg is None:
|
||||
return
|
||||
log.info('Shutting down FFMPEG')
|
||||
self.ffmpeg.communicate(b'q\n', timeout=5)
|
||||
|
||||
def launch_xemu(self):
|
||||
def _launch_xemu(self):
|
||||
|
||||
if platform.system() == 'Windows':
|
||||
c = [self.test_env.xemu_path, '-config_path', './xemu.ini', '-dvd_path', self.iso_path]
|
||||
@ -180,7 +197,7 @@ class TestBase:
|
||||
log.exception('Failed to connect to xemu window')
|
||||
self.app = None
|
||||
|
||||
self.launch_video_capture()
|
||||
self._launch_video_capture()
|
||||
|
||||
while True:
|
||||
status = xemu.poll()
|
||||
@ -195,9 +212,9 @@ class TestBase:
|
||||
break
|
||||
time.sleep(1)
|
||||
|
||||
self.terminate_video_capture()
|
||||
self._terminate_video_capture()
|
||||
|
||||
def mount_hdd(self):
|
||||
def _mount_hdd(self):
|
||||
log.info('Mounting HDD image')
|
||||
if os.path.exists(self.mount_path):
|
||||
shutil.rmtree(self.mount_path)
|
||||
@ -206,14 +223,39 @@ class TestBase:
|
||||
# FIXME: Don't need to run here
|
||||
subprocess.run([sys.executable, '-m', 'pyfatx', '-x', self.hdd_path], check=True, cwd=self.mount_path)
|
||||
|
||||
def copy_results(self):
|
||||
def _copy_results(self):
|
||||
log.info('Copying test results...')
|
||||
shutil.copytree(self.results_in_path, self.results_out_path, dirs_exist_ok=True)
|
||||
|
||||
def unmount_hdd(self):
|
||||
def _unmount_hdd(self):
|
||||
log.info('Unmounting HDD image')
|
||||
# Nothing to do
|
||||
|
||||
def compare_images(self, expected_path: str, actual_path: str, diff_result_path: Optional[str] = None) -> Tuple[bool, str]:
|
||||
"""Perform a perceptual diff of the given images."""
|
||||
if not self.test_env.perceptualdiff_enabled:
|
||||
return True, ''
|
||||
|
||||
perceptualdiff_path = self.test_env.perceptualdiff_path
|
||||
if not perceptualdiff_path:
|
||||
if platform.system() == 'Windows':
|
||||
perceptualdiff_path = 'perceptualdiff.exe'
|
||||
else:
|
||||
perceptualdiff_path = 'perceptualdiff'
|
||||
|
||||
c = [perceptualdiff_path, expected_path, actual_path, '--verbose']
|
||||
if diff_result_path:
|
||||
c.extend(['--output', diff_result_path])
|
||||
result = subprocess.run(c, capture_output=True)
|
||||
return result.returncode == 0, result.stderr.decode('utf-8')
|
||||
|
||||
def setup_hdd_files(self, fs: Fatx):
|
||||
"""Configure any files on the hard disk that are needed for the test.
|
||||
|
||||
This method may be implemented by the subclass.
|
||||
"""
|
||||
del fs
|
||||
|
||||
def analyze_results(self):
|
||||
"""Validate any files retrieved from the HDD.
|
||||
|
||||
@ -221,13 +263,23 @@ class TestBase:
|
||||
"""
|
||||
pass
|
||||
|
||||
def teardown_hdd_files(self, fs: Fatx):
|
||||
"""Clean up any files on the hard disk that should not outlive the test.
|
||||
|
||||
This method may be implemented by the subclass.
|
||||
"""
|
||||
del fs
|
||||
|
||||
def run(self):
|
||||
os.makedirs(self.results_out_path, exist_ok=True)
|
||||
self.prepare_roms()
|
||||
self.prepare_hdd()
|
||||
self.prepare_config()
|
||||
self.launch_xemu()
|
||||
self.mount_hdd()
|
||||
self.copy_results()
|
||||
self.unmount_hdd()
|
||||
self.analyze_results()
|
||||
self._prepare_roms()
|
||||
self._prepare_hdd()
|
||||
self._prepare_config()
|
||||
self._launch_xemu()
|
||||
self._mount_hdd()
|
||||
self._copy_results()
|
||||
self._unmount_hdd()
|
||||
try:
|
||||
self.analyze_results()
|
||||
finally:
|
||||
self.teardown_hdd_files(Fatx(self.hdd_path))
|
||||
|
69
xemutest/test_nxdk_pgraph_tests.py
Normal file
69
xemutest/test_nxdk_pgraph_tests.py
Normal file
@ -0,0 +1,69 @@
|
||||
"""Test harness for nxdk_pgraph_tests."""
|
||||
|
||||
import logging
|
||||
import os
|
||||
|
||||
from pyfatx import Fatx
|
||||
import test_base
|
||||
|
||||
log = logging.getLogger(__file__)
|
||||
|
||||
class TestNXDKPgraphTests(test_base.TestBase):
|
||||
"""Runs the nxdk_pgraph_tests suite and validates output."""
|
||||
|
||||
def __init__(self, test_env: test_base.TestEnvironment, results_path: str, test_data_path: str):
|
||||
self.config_file_path = os.path.join(test_data_path, 'config.cnf')
|
||||
if not self.config_file_path:
|
||||
raise FileNotFoundError(
|
||||
'Test data was not installed with the package. You need to copy '
|
||||
f'config.cnf to {test_data_path}.')
|
||||
|
||||
iso_path = os.path.join(test_data_path, 'nxdk_pgraph_tests.iso')
|
||||
if not os.path.isfile(iso_path):
|
||||
raise FileNotFoundError('Test data was not installed with the package. You need to build it and copy '
|
||||
f'to {test_data_path}.')
|
||||
|
||||
self.golden_results_path = os.path.join(test_data_path, "golden_results")
|
||||
|
||||
timeout_seconds = 5 * 60
|
||||
super().__init__(test_env, 'nxdk_pgraph_tests', results_path, iso_path, timeout_seconds)
|
||||
|
||||
def setup_hdd_files(self, fs: Fatx):
|
||||
with open(self.config_file_path, 'r') as config_file:
|
||||
config_data = config_file.read()
|
||||
fs.write('/pgraph_tests.cnf', config_data.encode('ascii'))
|
||||
|
||||
def analyze_results(self):
|
||||
diff_dir = '_diffs'
|
||||
diff_results_dir = os.path.join(self.results_out_path, diff_dir)
|
||||
os.makedirs(diff_results_dir, exist_ok=True)
|
||||
|
||||
failed_comparisons = {}
|
||||
|
||||
for root, dirnames, files in os.walk(self.results_out_path):
|
||||
root = os.path.relpath(root, self.results_out_path)
|
||||
if diff_dir in dirnames:
|
||||
dirnames.remove(diff_dir)
|
||||
|
||||
for file in files:
|
||||
file_path = os.path.join(root, file)
|
||||
expected_path = os.path.abspath(os.path.join(self.golden_results_path, file_path))
|
||||
actual_path = os.path.abspath(file_path)
|
||||
diff_path = os.path.join(diff_results_dir, file_path)
|
||||
|
||||
if not os.path.isfile(expected_path):
|
||||
log.warning(f"Missing golden image {expected_path}")
|
||||
continue
|
||||
|
||||
match, message = self.compare_images(expected_path, actual_path, diff_path)
|
||||
if not match:
|
||||
failed_comparisons[file_path] = message
|
||||
|
||||
if failed_comparisons:
|
||||
raise Exception(f"Failed comparisons: {failed_comparisons}")
|
||||
|
||||
def teardown_hdd_files(self, fs: Fatx):
|
||||
try:
|
||||
fs.unlink('/pgraph_tests.cnf')
|
||||
except AssertionError:
|
||||
pass
|
@ -1,7 +1,6 @@
|
||||
"""Test harness for test-xbe."""
|
||||
|
||||
import os
|
||||
from typing import Optional
|
||||
|
||||
import test_base
|
||||
|
||||
@ -14,7 +13,7 @@ class TestXBE(test_base.TestBase):
|
||||
raise FileNotFoundError('Test data was not installed with the package. You need to build it and copy '
|
||||
f'to {test_data_path}.')
|
||||
|
||||
super().__init__(test_env, results_path, iso_path)
|
||||
super().__init__(test_env, 'results', results_path, iso_path)
|
||||
|
||||
def analyze_results(self):
|
||||
with open(os.path.join(self.results_out_path, 'results.txt')) as f:
|
||||
|
Loading…
Reference in New Issue
Block a user