- A triangle tracker under the progress bar to track the test
currently in view within the scroll view.
- Text label to indicate the current device under test when a
test is running.
- add filter intent arg
- Add Fox (animation, skinning) and TransmissionRoughnessTest
(transmission) to the test.
- Add applyAnimation to the ValidationRunner
- Make camera zoom in for default test and adjust tolerance
acoordingly
- Fix non-determinism of SSR by
- waiting for more frames
- account for false returned from beginFrame
- Clear frame history on new test entry
- Include Build.HARDWARE information into result
- Make results array more thread-safe
- Remove unused paths
- Adjust tolerance for two tests
* Backend: Centralize fence synchronization and fix potential data races.
Transitioned fence synchronization from per-fence condition variables to a
centralized shared condition variable in DriverBase, enabling future global
error propagation and interruption.
Encapsulated synchronization by hiding the mutex and condition
variable within DriverBase and exposing `waitForFence` and `signalFence`.
Fixed a critical bug in Metal backend where spurious wakeups would reset the
relative timeout duration, potentially leading to much longer waits than
intended. Resolved by using absolute time points (wait_until).
Fixed potential data races in Metal, OpenGL, and WebGPU backends by ensuring
that shared state (status or state pointers) is always accessed under the
protection of the mutex, specifically by capturing it inside the predicate.
Simplified Vulkan and WebGPU fences to be purely passive data holders.
Trade-off: Spurious wakeups are increased due to the shared condition variable,
but are handled correctly by mandatory predicates in all backends.
* Update filament/backend/src/metal/MetalHandles.mm
Co-authored-by: Ben Doherty <bendoherty@google.com>
* Update filament/backend/src/metal/MetalHandles.mm
Co-authored-by: Ben Doherty <bendoherty@google.com>
---------
Co-authored-by: Ben Doherty <bendoherty@google.com>
With the introduction of cache prewarming, handles for vulkan programs
will be managed on a separate thread in the backend along with the main
backend thread. This requires an atomic refcount to ensure accuracy and
prevent race conditions.
- PSDDecoder: Add dimension limits (max 30,000) to prevent integer
overflows during LinearImage allocation.
- Add checks for stream failure during pixel decoding to handle truncated
files safely.
- Follow existing pattern in this file by using std::runtime_error for
these checks, which are caught and handled by resetting the stream and
returning an empty image.
- Add comment that LinearImage allocation cannot overflow with the new
limits.
- MaterialChunk: Return false in getTextShader when shaderSize is 0 to
prevent out-of-bounds write of null terminator.
- Ktx1Bundle: In 3-argument constructor, check if total blobs calculation
overflows uint32_t.
- Instead of aborting with FILAMENT_CHECK_POSTCONDITION, log a warning and
set the object to a safe empty state (dimensions set to 0).
- Implement fixes inspired by PR #9853 to make convertOffsetsToPointers
size-aware and prevent OOB reads and writes.
- Change function signature to return bool instead of void, allowing graceful
error propagation instead of runtime aborts.
- Replace FILAMENT_CHECK_PRECONDITION with explicit checks that log errors
and return false.
- Update ArchiveCache in gltfio and main in tools/uberz to handle failure.
- Add unit tests to verify rejection of invalid offsets.
- Implement PR #9878 to add bounds checking in normalizeSkinningWeights,
preventing heap OOB write by clamping the count to available buffer size.
- Fix 3 similar vulnerabilities in uploadBuffers where accessor->count was
trusted for malloc allocation before cgltf_accessor_unpack_floats.
- Add overflow checks for allocation sizes in uploadBuffers.
- Clamp accessor count based on available buffer bytes in uploadBuffers to
prevent OOB read.
- Implement PR #9842 to fix integer overflows in transcodeImageLevel.
- Fix potential division by zero in transcodeImageLevel if bytesPerPix is 0.
- Fix memory leaks in transcodeImageLevel by freeing allocated buffers on
failure.
- Fix memory leak in Ktx2Reader::load by deleting PixelBufferDescriptor after
use.
- Fix potential division by zero in decodeMeshoptCompression when stride is 0.
- Fix ignored errors in release builds for meshopt decoding by returning bool
and checking the result in ResourceLoader.cpp.
- Fix potential integer underflow in computeBindingSize when count is 0 by
returning 0.
- Update ResourceLoader.cpp to skip buffer upload when computeBindingSize
returns 0, preventing potential OOM or OOB reads.
In the ssao pass, for silhouette pixels,
```
highp vec3 v = p - origin;
```
can be a "long" vector where the length cannot be captured with
mediump on mobile. This means that
```
float vv = dot(v, v);
float vn = dot(v, normal);
```
and other variables can overflow. This caused the silhouettes to
be dark when ssao is turned on a PowerVR gpu.
The fix is use highp for the relevant variables.
Implemented the custom 3D LUT feature in the ColorGrading API, allowing
users to specify a custom LUT for final color mapping.
To test this feature, added a "Custom LUT" option to the color grading
settings in the gltf_viewer sample. This includes several procedurally
generated LUTs for testing purposes:
- Negative
- Grayscale
- Sepia
- Teal and Orange
Updated settings serialization (Settings.cpp) and the viewer UI
(ViewerGui.cpp) to support these options.
FIXES=[362596936]
- Update default_test.json with targeted test variants and documented
tolerance presets.
- Refactor test suite to cover distinct code paths while maintaining
multi-backend compatibility (OpenGL/Vulkan).
- Integrate TestProgressBar and UI summary text for better test progress
visualization.
- Enhance validation managers with dynamic naming, zip extraction/export,
and bundle creation.
- Update validation_app.py terminal UI to support multiple devices,
device switching, and local result serving.