@ -69,8 +69,7 @@ NvResult nvhost_nvdec_common::Submit(const std::vector<u8>& input, std::vector<u
std : : vector < Reloc > relocs ( params . relocation_count ) ;
std : : vector < Reloc > relocs ( params . relocation_count ) ;
std : : vector < u32 > reloc_shifts ( params . relocation_count ) ;
std : : vector < u32 > reloc_shifts ( params . relocation_count ) ;
std : : vector < SyncptIncr > syncpt_increments ( params . syncpoint_count ) ;
std : : vector < SyncptIncr > syncpt_increments ( params . syncpoint_count ) ;
std : : vector < SyncptIncr > wait_checks ( params . syncpoint_count ) ;
std : : vector < u32 > fence_thresholds ( params . fence_count ) ;
std : : vector < Fence > fences ( params . fence_count ) ;
// Slice input into their respective buffers
// Slice input into their respective buffers
std : : size_t offset = sizeof ( IoctlSubmit ) ;
std : : size_t offset = sizeof ( IoctlSubmit ) ;
@ -78,15 +77,13 @@ NvResult nvhost_nvdec_common::Submit(const std::vector<u8>& input, std::vector<u
offset + = SliceVectors ( input , relocs , params . relocation_count , offset ) ;
offset + = SliceVectors ( input , relocs , params . relocation_count , offset ) ;
offset + = SliceVectors ( input , reloc_shifts , params . relocation_count , offset ) ;
offset + = SliceVectors ( input , reloc_shifts , params . relocation_count , offset ) ;
offset + = SliceVectors ( input , syncpt_increments , params . syncpoint_count , offset ) ;
offset + = SliceVectors ( input , syncpt_increments , params . syncpoint_count , offset ) ;
offset + = SliceVectors ( input , wait_checks , params . syncpoint_count , offset ) ;
offset + = SliceVectors ( input , fence_thresholds , params . fence_count , offset ) ;
offset + = SliceVectors ( input , fences , params . fence_count , offset ) ;
auto & gpu = system . GPU ( ) ;
auto & gpu = system . GPU ( ) ;
if ( gpu . UseNvdec ( ) ) {
if ( gpu . UseNvdec ( ) ) {
for ( std : : size_t i = 0 ; i < syncpt_increments . size ( ) ; i + + ) {
for ( std : : size_t i = 0 ; i < syncpt_increments . size ( ) ; i + + ) {
const SyncptIncr & syncpt_incr = syncpt_increments [ i ] ;
const SyncptIncr & syncpt_incr = syncpt_increments [ i ] ;
fences [ i ] . id = syncpt_incr . id ;
fence_thresholds [ i ] =
fences [ i ] . value =
syncpoint_manager . IncreaseSyncpoint ( syncpt_incr . id , syncpt_incr . increments ) ;
syncpoint_manager . IncreaseSyncpoint ( syncpt_incr . id , syncpt_incr . increments ) ;
}
}
}
}
@ -98,11 +95,6 @@ NvResult nvhost_nvdec_common::Submit(const std::vector<u8>& input, std::vector<u
cmdlist . size ( ) * sizeof ( u32 ) ) ;
cmdlist . size ( ) * sizeof ( u32 ) ) ;
gpu . PushCommandBuffer ( cmdlist ) ;
gpu . PushCommandBuffer ( cmdlist ) ;
}
}
if ( gpu . UseNvdec ( ) ) {
fences [ 0 ] . value = syncpoint_manager . IncreaseSyncpoint ( fences [ 0 ] . id , 1 ) ;
Tegra : : ChCommandHeaderList cmdlist { { ( 4 < < 28 ) | fences [ 0 ] . id } } ;
gpu . PushCommandBuffer ( cmdlist ) ;
}
std : : memcpy ( output . data ( ) , & params , sizeof ( IoctlSubmit ) ) ;
std : : memcpy ( output . data ( ) , & params , sizeof ( IoctlSubmit ) ) ;
// Some games expect command_buffers to be written back
// Some games expect command_buffers to be written back
offset = sizeof ( IoctlSubmit ) ;
offset = sizeof ( IoctlSubmit ) ;
@ -110,8 +102,7 @@ NvResult nvhost_nvdec_common::Submit(const std::vector<u8>& input, std::vector<u
offset + = WriteVectors ( output , relocs , offset ) ;
offset + = WriteVectors ( output , relocs , offset ) ;
offset + = WriteVectors ( output , reloc_shifts , offset ) ;
offset + = WriteVectors ( output , reloc_shifts , offset ) ;
offset + = WriteVectors ( output , syncpt_increments , offset ) ;
offset + = WriteVectors ( output , syncpt_increments , offset ) ;
offset + = WriteVectors ( output , wait_checks , offset ) ;
offset + = WriteVectors ( output , fence_thresholds , offset ) ;
offset + = WriteVectors ( output , fences , offset ) ;
return NvResult : : Success ;
return NvResult : : Success ;
}
}