@@ -658,66 +658,77 @@ utils::GPUMemoryLayout vTensor::estimate_memory_layout() const {
658
658
}
659
659
660
660
const vkapi::BufferBindInfo vTensor::sizes_ubo () {
661
+ const size_t size_per_ubo = context ()->adapter_ptr ()->min_ubo_alignment ();
662
+ const size_t max_ubo_size = kMaxMetadataFieldCount * size_per_ubo;
661
663
if (!uniforms_.buffer ()) {
662
- uniforms_ = ParamsBuffer (storage_.context_ , kMaxUniformBufferSize );
664
+ uniforms_ = ParamsBuffer (storage_.context_ , max_ubo_size, true );
663
665
}
664
666
if (sizes_uniform_offset_ == kUniformOffsetUnset ) {
665
667
VK_CHECK_COND (
666
- (uniforms_size_ + kSizePerUniform ) <= kMaxUniformBufferSize ,
668
+ (uniforms_size_ + size_per_ubo ) <= max_ubo_size ,
667
669
" Uniform data allocation has exceeded Tensor uniform buffer size" );
668
670
sizes_uniform_offset_ = uniforms_size_;
669
- uniforms_size_ += kSizePerUniform ;
671
+ uniforms_size_ += size_per_ubo ;
670
672
uniforms_.update (utils::make_whcn_ivec4 (sizes_), sizes_uniform_offset_);
671
673
}
672
- return vkapi::BufferBindInfo (uniforms_.buffer (), sizes_uniform_offset_);
674
+ return vkapi::BufferBindInfo (
675
+ uniforms_.buffer (), sizes_uniform_offset_, size_per_ubo);
673
676
}
674
677
675
678
const vkapi::BufferBindInfo vTensor::strides_ubo () {
679
+ const size_t size_per_ubo = context ()->adapter_ptr ()->min_ubo_alignment ();
680
+ const size_t max_ubo_size = kMaxMetadataFieldCount * size_per_ubo;
676
681
if (!uniforms_.buffer ()) {
677
- uniforms_ = ParamsBuffer (storage_.context_ , kMaxUniformBufferSize );
682
+ uniforms_ = ParamsBuffer (storage_.context_ , max_ubo_size, true );
678
683
}
679
684
if (unsqueezed_strides_offset_ == kUniformOffsetUnset ) {
680
685
VK_CHECK_COND (
681
- (uniforms_size_ + kSizePerUniform ) <= kMaxUniformBufferSize ,
686
+ (uniforms_size_ + size_per_ubo ) <= max_ubo_size ,
682
687
" Uniform data allocation has exceeded Tensor uniform buffer size" );
683
688
unsqueezed_strides_offset_ = uniforms_size_;
684
- uniforms_size_ += kSizePerUniform ;
689
+ uniforms_size_ += size_per_ubo ;
685
690
uniforms_.update (
686
691
utils::make_whcn_ivec4 (unsqueezed_strides_),
687
692
unsqueezed_strides_offset_);
688
693
}
689
- return vkapi::BufferBindInfo (uniforms_.buffer (), unsqueezed_strides_offset_);
694
+ return vkapi::BufferBindInfo (
695
+ uniforms_.buffer (), unsqueezed_strides_offset_, size_per_ubo);
690
696
}
691
697
692
698
const vkapi::BufferBindInfo vTensor::logical_limits_ubo () {
699
+ const size_t size_per_ubo = context ()->adapter_ptr ()->min_ubo_alignment ();
700
+ const size_t max_ubo_size = kMaxMetadataFieldCount * size_per_ubo;
693
701
if (!uniforms_.buffer ()) {
694
- uniforms_ = ParamsBuffer (storage_.context_ , kMaxUniformBufferSize );
702
+ uniforms_ = ParamsBuffer (storage_.context_ , max_ubo_size, true );
695
703
}
696
704
if (logical_limits_uniform_offset_ == kUniformOffsetUnset ) {
697
705
VK_CHECK_COND (
698
- (uniforms_size_ + kSizePerUniform ) <= kMaxUniformBufferSize ,
706
+ (uniforms_size_ + size_per_ubo ) <= max_ubo_size ,
699
707
" Uniform data allocation has exceeded Tensor uniform buffer size" );
700
708
logical_limits_uniform_offset_ = uniforms_size_;
701
- uniforms_size_ += kSizePerUniform ;
709
+ uniforms_size_ += size_per_ubo ;
702
710
uniforms_.update (logical_limits (), logical_limits_uniform_offset_);
703
711
}
704
712
return vkapi::BufferBindInfo (
705
- uniforms_.buffer (), logical_limits_uniform_offset_);
713
+ uniforms_.buffer (), logical_limits_uniform_offset_, size_per_ubo );
706
714
}
707
715
708
716
const vkapi::BufferBindInfo vTensor::numel_ubo () {
717
+ const size_t size_per_ubo = context ()->adapter_ptr ()->min_ubo_alignment ();
718
+ const size_t max_ubo_size = kMaxMetadataFieldCount * size_per_ubo;
709
719
if (!uniforms_.buffer ()) {
710
- uniforms_ = ParamsBuffer (storage_.context_ , kMaxUniformBufferSize );
720
+ uniforms_ = ParamsBuffer (storage_.context_ , max_ubo_size, true );
711
721
}
712
722
if (numel_uniform_offset_ == kUniformOffsetUnset ) {
713
723
VK_CHECK_COND (
714
- (uniforms_size_ + kSizePerUniform ) <= kMaxUniformBufferSize ,
724
+ (uniforms_size_ + size_per_ubo ) <= max_ubo_size ,
715
725
" Uniform data allocation has exceeded Tensor uniform buffer size" );
716
726
numel_uniform_offset_ = uniforms_size_;
717
- uniforms_size_ += kSizePerUniform ;
727
+ uniforms_size_ += size_per_ubo ;
718
728
uniforms_.update (numel (), numel_uniform_offset_);
719
729
}
720
- return vkapi::BufferBindInfo (uniforms_.buffer (), numel_uniform_offset_);
730
+ return vkapi::BufferBindInfo (
731
+ uniforms_.buffer (), numel_uniform_offset_, size_per_ubo);
721
732
}
722
733
723
734
size_t vTensor::staging_buffer_numel () const {
0 commit comments