diff --git a/includes/acl/core/track_writer.h b/includes/acl/core/track_writer.h index 467d630b..ec4b64c3 100644 --- a/includes/acl/core/track_writer.h +++ b/includes/acl/core/track_writer.h @@ -99,6 +99,16 @@ namespace acl ////////////////////////////////////////////////////////////////////////// // Scalar track writing + ////////////////////////////////////////////////////////////////////////// + // These allow host runtimes to control which tracks they are interested in. + // This information allows the codecs to avoid unpacking values that are not needed. + // Must be non-static member functions! + constexpr bool skip_track_float1(uint32_t /*track_index*/) const { return false; } + constexpr bool skip_track_float2(uint32_t /*track_index*/) const { return false; } + constexpr bool skip_track_float3(uint32_t /*track_index*/) const { return false; } + constexpr bool skip_track_float4(uint32_t /*track_index*/) const { return false; } + constexpr bool skip_track_vector4(uint32_t /*track_index*/) const { return false; } + ////////////////////////////////////////////////////////////////////////// // Called by the decoder to write out a value for a specified track index. void RTM_SIMD_CALL write_float1(uint32_t track_index, rtm::scalarf_arg0 value) diff --git a/includes/acl/decompression/impl/decompression.scalar.h b/includes/acl/decompression/impl/decompression.scalar.h index 09526c6e..712838ea 100644 --- a/includes/acl/decompression/impl/decompression.scalar.h +++ b/includes/acl/decompression/impl/decompression.scalar.h @@ -315,7 +315,8 @@ namespace acl track_bit_offset1 += num_sample_bits; } - writer.write_float1(track_index, value); + if (!writer.skip_track_float1(track_index)) + writer.write_float1(track_index, value); } else if (track_type == track_type8::float2f && decompression_settings_type::is_track_type_supported(track_type8::float2f)) { @@ -353,7 +354,8 @@ namespace acl track_bit_offset1 += num_sample_bits; } - writer.write_float2(track_index, value); + if (!writer.skip_track_float2(track_index)) + writer.write_float2(track_index, value); } else if (track_type == track_type8::float3f && decompression_settings_type::is_track_type_supported(track_type8::float3f)) { @@ -391,7 +393,8 @@ namespace acl track_bit_offset1 += num_sample_bits; } - writer.write_float3(track_index, value); + if (!writer.skip_track_float3(track_index)) + writer.write_float3(track_index, value); } else if (track_type == track_type8::float4f && decompression_settings_type::is_track_type_supported(track_type8::float4f)) { @@ -429,7 +432,8 @@ namespace acl track_bit_offset1 += num_sample_bits; } - writer.write_float4(track_index, value); + if (!writer.skip_track_float4(track_index)) + writer.write_float4(track_index, value); } else if (track_type == track_type8::vector4f && decompression_settings_type::is_track_type_supported(track_type8::vector4f)) { @@ -467,7 +471,8 @@ namespace acl track_bit_offset1 += num_sample_bits; } - writer.write_vector4(track_index, value); + if (!writer.skip_track_vector4(track_index)) + writer.write_vector4(track_index, value); } }