summaryrefslogtreecommitdiff
path: root/src/video_core/host1x/codecs
diff options
context:
space:
mode:
authorGravatar liamwhite2024-01-22 10:55:39 -0500
committerGravatar GitHub2024-01-22 10:55:39 -0500
commit8bd10473d60503c7acddc399604a51b9c9947541 (patch)
treef713f84942681321fca27ba028e31d6c74a09013 /src/video_core/host1x/codecs
parentMerge pull request #12747 from t895/homescreen-widget (diff)
parentdevice_memory_manager: use unique_lock for update (diff)
downloadyuzu-8bd10473d60503c7acddc399604a51b9c9947541.tar.gz
yuzu-8bd10473d60503c7acddc399604a51b9c9947541.tar.xz
yuzu-8bd10473d60503c7acddc399604a51b9c9947541.zip
Merge pull request #12579 from FernandoS27/smmu
Core: Implement Device Mapping & GPU SMMU
Diffstat (limited to 'src/video_core/host1x/codecs')
-rw-r--r--src/video_core/host1x/codecs/h264.cpp9
-rw-r--r--src/video_core/host1x/codecs/vp8.cpp4
-rw-r--r--src/video_core/host1x/codecs/vp9.cpp9
3 files changed, 10 insertions, 12 deletions
diff --git a/src/video_core/host1x/codecs/h264.cpp b/src/video_core/host1x/codecs/h264.cpp
index 309a7f1d5..994591c8d 100644
--- a/src/video_core/host1x/codecs/h264.cpp
+++ b/src/video_core/host1x/codecs/h264.cpp
@@ -32,13 +32,12 @@ H264::~H264() = default;
32std::span<const u8> H264::ComposeFrame(const Host1x::NvdecCommon::NvdecRegisters& state, 32std::span<const u8> H264::ComposeFrame(const Host1x::NvdecCommon::NvdecRegisters& state,
33 size_t* out_configuration_size, bool is_first_frame) { 33 size_t* out_configuration_size, bool is_first_frame) {
34 H264DecoderContext context; 34 H264DecoderContext context;
35 host1x.MemoryManager().ReadBlock(state.picture_info_offset, &context, 35 host1x.GMMU().ReadBlock(state.picture_info_offset, &context, sizeof(H264DecoderContext));
36 sizeof(H264DecoderContext));
37 36
38 const s64 frame_number = context.h264_parameter_set.frame_number.Value(); 37 const s64 frame_number = context.h264_parameter_set.frame_number.Value();
39 if (!is_first_frame && frame_number != 0) { 38 if (!is_first_frame && frame_number != 0) {
40 frame.resize_destructive(context.stream_len); 39 frame.resize_destructive(context.stream_len);
41 host1x.MemoryManager().ReadBlock(state.frame_bitstream_offset, frame.data(), frame.size()); 40 host1x.GMMU().ReadBlock(state.frame_bitstream_offset, frame.data(), frame.size());
42 *out_configuration_size = 0; 41 *out_configuration_size = 0;
43 return frame; 42 return frame;
44 } 43 }
@@ -159,8 +158,8 @@ std::span<const u8> H264::ComposeFrame(const Host1x::NvdecCommon::NvdecRegisters
159 std::memcpy(frame.data(), encoded_header.data(), encoded_header.size()); 158 std::memcpy(frame.data(), encoded_header.data(), encoded_header.size());
160 159
161 *out_configuration_size = encoded_header.size(); 160 *out_configuration_size = encoded_header.size();
162 host1x.MemoryManager().ReadBlock(state.frame_bitstream_offset, 161 host1x.GMMU().ReadBlock(state.frame_bitstream_offset, frame.data() + encoded_header.size(),
163 frame.data() + encoded_header.size(), context.stream_len); 162 context.stream_len);
164 163
165 return frame; 164 return frame;
166} 165}
diff --git a/src/video_core/host1x/codecs/vp8.cpp b/src/video_core/host1x/codecs/vp8.cpp
index ee6392ff9..be97e3b00 100644
--- a/src/video_core/host1x/codecs/vp8.cpp
+++ b/src/video_core/host1x/codecs/vp8.cpp
@@ -14,7 +14,7 @@ VP8::~VP8() = default;
14 14
15std::span<const u8> VP8::ComposeFrame(const Host1x::NvdecCommon::NvdecRegisters& state) { 15std::span<const u8> VP8::ComposeFrame(const Host1x::NvdecCommon::NvdecRegisters& state) {
16 VP8PictureInfo info; 16 VP8PictureInfo info;
17 host1x.MemoryManager().ReadBlock(state.picture_info_offset, &info, sizeof(VP8PictureInfo)); 17 host1x.GMMU().ReadBlock(state.picture_info_offset, &info, sizeof(VP8PictureInfo));
18 18
19 const bool is_key_frame = info.key_frame == 1u; 19 const bool is_key_frame = info.key_frame == 1u;
20 const auto bitstream_size = static_cast<size_t>(info.vld_buffer_size); 20 const auto bitstream_size = static_cast<size_t>(info.vld_buffer_size);
@@ -45,7 +45,7 @@ std::span<const u8> VP8::ComposeFrame(const Host1x::NvdecCommon::NvdecRegisters&
45 frame[9] = static_cast<u8>(((info.frame_height >> 8) & 0x3f)); 45 frame[9] = static_cast<u8>(((info.frame_height >> 8) & 0x3f));
46 } 46 }
47 const u64 bitstream_offset = state.frame_bitstream_offset; 47 const u64 bitstream_offset = state.frame_bitstream_offset;
48 host1x.MemoryManager().ReadBlock(bitstream_offset, frame.data() + header_size, bitstream_size); 48 host1x.GMMU().ReadBlock(bitstream_offset, frame.data() + header_size, bitstream_size);
49 49
50 return frame; 50 return frame;
51} 51}
diff --git a/src/video_core/host1x/codecs/vp9.cpp b/src/video_core/host1x/codecs/vp9.cpp
index 306c3d0e8..65d6fb2d5 100644
--- a/src/video_core/host1x/codecs/vp9.cpp
+++ b/src/video_core/host1x/codecs/vp9.cpp
@@ -358,7 +358,7 @@ void VP9::WriteMvProbabilityUpdate(VpxRangeEncoder& writer, u8 new_prob, u8 old_
358 358
359Vp9PictureInfo VP9::GetVp9PictureInfo(const Host1x::NvdecCommon::NvdecRegisters& state) { 359Vp9PictureInfo VP9::GetVp9PictureInfo(const Host1x::NvdecCommon::NvdecRegisters& state) {
360 PictureInfo picture_info; 360 PictureInfo picture_info;
361 host1x.MemoryManager().ReadBlock(state.picture_info_offset, &picture_info, sizeof(PictureInfo)); 361 host1x.GMMU().ReadBlock(state.picture_info_offset, &picture_info, sizeof(PictureInfo));
362 Vp9PictureInfo vp9_info = picture_info.Convert(); 362 Vp9PictureInfo vp9_info = picture_info.Convert();
363 363
364 InsertEntropy(state.vp9_entropy_probs_offset, vp9_info.entropy); 364 InsertEntropy(state.vp9_entropy_probs_offset, vp9_info.entropy);
@@ -373,7 +373,7 @@ Vp9PictureInfo VP9::GetVp9PictureInfo(const Host1x::NvdecCommon::NvdecRegisters&
373 373
374void VP9::InsertEntropy(u64 offset, Vp9EntropyProbs& dst) { 374void VP9::InsertEntropy(u64 offset, Vp9EntropyProbs& dst) {
375 EntropyProbs entropy; 375 EntropyProbs entropy;
376 host1x.MemoryManager().ReadBlock(offset, &entropy, sizeof(EntropyProbs)); 376 host1x.GMMU().ReadBlock(offset, &entropy, sizeof(EntropyProbs));
377 entropy.Convert(dst); 377 entropy.Convert(dst);
378} 378}
379 379
@@ -383,9 +383,8 @@ Vp9FrameContainer VP9::GetCurrentFrame(const Host1x::NvdecCommon::NvdecRegisters
383 // gpu.SyncGuestHost(); epic, why? 383 // gpu.SyncGuestHost(); epic, why?
384 current_frame.info = GetVp9PictureInfo(state); 384 current_frame.info = GetVp9PictureInfo(state);
385 current_frame.bit_stream.resize(current_frame.info.bitstream_size); 385 current_frame.bit_stream.resize(current_frame.info.bitstream_size);
386 host1x.MemoryManager().ReadBlock(state.frame_bitstream_offset, 386 host1x.GMMU().ReadBlock(state.frame_bitstream_offset, current_frame.bit_stream.data(),
387 current_frame.bit_stream.data(), 387 current_frame.info.bitstream_size);
388 current_frame.info.bitstream_size);
389 } 388 }
390 if (!next_frame.bit_stream.empty()) { 389 if (!next_frame.bit_stream.empty()) {
391 Vp9FrameContainer temp{ 390 Vp9FrameContainer temp{