summaryrefslogtreecommitdiffstats
path: root/src/video_core
diff options
context:
space:
mode:
Diffstat (limited to 'src/video_core')
-rw-r--r--src/video_core/host1x/ffmpeg/ffmpeg.cpp7
-rw-r--r--src/video_core/renderer_vulkan/vk_rasterizer.cpp14
2 files changed, 16 insertions, 5 deletions
diff --git a/src/video_core/host1x/ffmpeg/ffmpeg.cpp b/src/video_core/host1x/ffmpeg/ffmpeg.cpp
index dcd07e6d2..96686da59 100644
--- a/src/video_core/host1x/ffmpeg/ffmpeg.cpp
+++ b/src/video_core/host1x/ffmpeg/ffmpeg.cpp
@@ -233,7 +233,12 @@ std::unique_ptr<Frame> DecoderContext::ReceiveFrame(bool* out_is_interlaced) {
return false;
}
- *out_is_interlaced = frame->interlaced_frame != 0;
+ *out_is_interlaced =
+#if defined(FF_API_INTERLACED_FRAME) || LIBAVUTIL_VERSION_MAJOR >= 59
+ (frame->flags & AV_FRAME_FLAG_INTERLACED) != 0;
+#else
+ frame->interlaced_frame != 0;
+#endif
return true;
};
diff --git a/src/video_core/renderer_vulkan/vk_rasterizer.cpp b/src/video_core/renderer_vulkan/vk_rasterizer.cpp
index c850e1689..59829c88b 100644
--- a/src/video_core/renderer_vulkan/vk_rasterizer.cpp
+++ b/src/video_core/renderer_vulkan/vk_rasterizer.cpp
@@ -75,14 +75,20 @@ VkViewport GetViewportState(const Device& device, const Maxwell& regs, size_t in
const float width = conv(src.scale_x * 2.0f);
float y = conv(src.translate_y - src.scale_y);
float height = conv(src.scale_y * 2.0f);
- bool y_negate = regs.window_origin.mode != Maxwell::WindowOrigin::Mode::UpperLeft;
- if (!device.IsNvViewportSwizzleSupported()) {
- y_negate = y_negate != (src.swizzle.y == Maxwell::ViewportSwizzle::NegativeY);
+ const bool lower_left = regs.window_origin.mode != Maxwell::WindowOrigin::Mode::UpperLeft;
+ const bool y_negate = !device.IsNvViewportSwizzleSupported() &&
+ src.swizzle.y == Maxwell::ViewportSwizzle::NegativeY;
+
+ if (lower_left) {
+ // Flip by surface clip height
+ y += conv(static_cast<f32>(regs.surface_clip.height));
+ height = -height;
}
if (y_negate) {
- y += conv(static_cast<f32>(regs.surface_clip.height));
+ // Flip by viewport height
+ y += height;
height = -height;
}