summaryrefslogtreecommitdiffstats
path: root/src/video_core/renderer_vulkan/fixed_pipeline_state.cpp
diff options
context:
space:
mode:
authorReinUsesLisp <reinuseslisp@airmail.cc>2021-04-14 06:04:59 +0200
committerameerj <52414509+ameerj@users.noreply.github.com>2021-07-23 03:51:27 +0200
commitb126987c59964d81ae3705ad7ad6c0ace8714e19 (patch)
treed6384469b9450431de5679dcd12fa2ce18e9a8dd /src/video_core/renderer_vulkan/fixed_pipeline_state.cpp
parentshader: Implement early Z tests (diff)
downloadyuzu-b126987c59964d81ae3705ad7ad6c0ace8714e19.tar
yuzu-b126987c59964d81ae3705ad7ad6c0ace8714e19.tar.gz
yuzu-b126987c59964d81ae3705ad7ad6c0ace8714e19.tar.bz2
yuzu-b126987c59964d81ae3705ad7ad6c0ace8714e19.tar.lz
yuzu-b126987c59964d81ae3705ad7ad6c0ace8714e19.tar.xz
yuzu-b126987c59964d81ae3705ad7ad6c0ace8714e19.tar.zst
yuzu-b126987c59964d81ae3705ad7ad6c0ace8714e19.zip
Diffstat (limited to 'src/video_core/renderer_vulkan/fixed_pipeline_state.cpp')
-rw-r--r--src/video_core/renderer_vulkan/fixed_pipeline_state.cpp19
1 files changed, 17 insertions, 2 deletions
diff --git a/src/video_core/renderer_vulkan/fixed_pipeline_state.cpp b/src/video_core/renderer_vulkan/fixed_pipeline_state.cpp
index d8f683907..6a3baf837 100644
--- a/src/video_core/renderer_vulkan/fixed_pipeline_state.cpp
+++ b/src/video_core/renderer_vulkan/fixed_pipeline_state.cpp
@@ -52,6 +52,8 @@ void FixedPipelineState::Refresh(Tegra::Engines::Maxwell3D& maxwell3d,
const u32 topology_index = static_cast<u32>(regs.draw.topology.Value());
raw1 = 0;
+ no_extended_dynamic_state.Assign(has_extended_dynamic_state ? 0 : 1);
+ xfb_enabled.Assign(regs.tfb_enabled != 0);
primitive_restart_enable.Assign(regs.primitive_restart.enabled != 0 ? 1 : 0);
depth_bias_enable.Assign(enabled_lut[POLYGON_OFFSET_ENABLE_LUT[topology_index]] != 0 ? 1 : 0);
depth_clamp_disabled.Assign(regs.view_volume_clip_control.depth_clamp_disabled.Value());
@@ -113,10 +115,12 @@ void FixedPipelineState::Refresh(Tegra::Engines::Maxwell3D& maxwell3d,
return static_cast<u16>(viewport.swizzle.raw);
});
}
- if (!has_extended_dynamic_state) {
- no_extended_dynamic_state.Assign(1);
+ if (no_extended_dynamic_state != 0) {
dynamic_state.Refresh(regs);
}
+ if (xfb_enabled != 0) {
+ xfb_state.Refresh(regs);
+ }
}
void FixedPipelineState::BlendingAttachment::Refresh(const Maxwell& regs, size_t index) {
@@ -158,6 +162,17 @@ void FixedPipelineState::BlendingAttachment::Refresh(const Maxwell& regs, size_t
enable.Assign(1);
}
+void FixedPipelineState::TransformFeedbackState::Refresh(const Maxwell& regs) {
+ std::ranges::transform(regs.tfb_layouts, layouts.begin(), [](const auto& layout) {
+ return Layout{
+ .stream = layout.stream,
+ .varying_count = layout.varying_count,
+ .stride = layout.stride,
+ };
+ });
+ varyings = regs.tfb_varying_locs;
+}
+
void FixedPipelineState::DynamicState::Refresh(const Maxwell& regs) {
u32 packed_front_face = PackFrontFace(regs.front_face);
if (regs.screen_y_control.triangle_rast_flip != 0) {