rt: apply filter settings before drawing frame

This commit is contained in:
chyyran 2023-01-30 19:30:23 -05:00
parent da2fb7adca
commit 18e1f758cd
3 changed files with 19 additions and 6 deletions

View file

@ -505,6 +505,8 @@ impl FilterChainD3D11 {
let (pass, last) = passes.split_at_mut(passes_len - 1); let (pass, last) = passes.split_at_mut(passes_len - 1);
for (index, pass) in pass.iter_mut().enumerate() { for (index, pass) in pass.iter_mut().enumerate() {
source.filter = pass.config.filter;
source.wrap_mode = pass.config.wrap_mode;
let target = &self.output_framebuffers[index]; let target = &self.output_framebuffers[index];
let size = target.size; let size = target.size;
pass.draw( pass.draw(
@ -537,6 +539,7 @@ impl FilterChainD3D11 {
assert_eq!(last.len(), 1); assert_eq!(last.len(), 1);
if let Some(pass) = last.iter_mut().next() { if let Some(pass) = last.iter_mut().next() {
source.filter = pass.config.filter; source.filter = pass.config.filter;
source.wrap_mode = pass.config.wrap_mode;
pass.draw( pass.draw(
passes_len - 1, passes_len - 1,
&self.common, &self.common,

View file

@ -472,6 +472,10 @@ impl<T: GLInterface> FilterChainImpl<T> {
for (index, pass) in pass.iter_mut().enumerate() { for (index, pass) in pass.iter_mut().enumerate() {
let target = &self.output_framebuffers[index]; let target = &self.output_framebuffers[index];
source.filter = pass.config.filter;
source.mip_filter = pass.config.filter;
source.wrap_mode = pass.config.wrap_mode;
pass.draw( pass.draw(
index, index,
&self.common, &self.common,
@ -497,6 +501,7 @@ impl<T: GLInterface> FilterChainImpl<T> {
if let Some(pass) = last.iter_mut().next() { if let Some(pass) = last.iter_mut().next() {
source.filter = pass.config.filter; source.filter = pass.config.filter;
source.mip_filter = pass.config.filter; source.mip_filter = pass.config.filter;
source.wrap_mode = pass.config.wrap_mode;
pass.draw( pass.draw(
passes_len - 1, passes_len - 1,

View file

@ -641,7 +641,7 @@ impl FilterChainVulkan {
mip_filter: filter, mip_filter: filter,
}; };
let mut source = &original; let mut source = original.clone();
// swap output and feedback **before** recording command buffers // swap output and feedback **before** recording command buffers
std::mem::swap( std::mem::swap(
@ -712,6 +712,10 @@ impl FilterChainVulkan {
for (index, pass) in pass.iter_mut().enumerate() { for (index, pass) in pass.iter_mut().enumerate() {
let target = &self.output_framebuffers[index]; let target = &self.output_framebuffers[index];
source.filter_mode = pass.config.filter;
source.wrap_mode = pass.config.wrap_mode;
source.mip_filter = pass.config.filter;
let out = RenderTarget { let out = RenderTarget {
x: 0.0, x: 0.0,
y: 0.0, y: 0.0,
@ -731,7 +735,7 @@ impl FilterChainVulkan {
frame_direction, frame_direction,
viewport, viewport,
&original, &original,
source, &source,
&out, &out,
)?; )?;
@ -741,7 +745,7 @@ impl FilterChainVulkan {
out.output.end_pass(cmd); out.output.end_pass(cmd);
} }
source = self.common.output_inputs[index].as_ref().unwrap(); source = self.common.output_inputs[index].clone().unwrap();
intermediates.dispose_outputs(out.output); intermediates.dispose_outputs(out.output);
intermediates.dispose_framebuffers(residual_fb); intermediates.dispose_framebuffers(residual_fb);
} }
@ -749,8 +753,9 @@ impl FilterChainVulkan {
// try to hint the optimizer // try to hint the optimizer
assert_eq!(last.len(), 1); assert_eq!(last.len(), 1);
if let Some(pass) = last.iter_mut().next() { if let Some(pass) = last.iter_mut().next() {
// source.filter_mode = pass.config.filter; source.filter_mode = pass.config.filter;
// source.mip_filter = pass.config.filter; source.wrap_mode = pass.config.wrap_mode;
source.mip_filter = pass.config.filter;
let out = RenderTarget { let out = RenderTarget {
x: viewport.x, x: viewport.x,
@ -767,7 +772,7 @@ impl FilterChainVulkan {
0, 0,
viewport, viewport,
&original, &original,
source, &source,
&out, &out,
)?; )?;