Skip to content

Commit

Permalink
rt(d3d11): take viewport by reference to avoid AddRef/Release
Browse files Browse the repository at this point in the history
  • Loading branch information
chyyran committed Sep 28, 2024
1 parent 28931ae commit 7b7fd99
Show file tree
Hide file tree
Showing 6 changed files with 24 additions and 8 deletions.
4 changes: 2 additions & 2 deletions librashader-capi/src/runtime/d3d11/filter_chain.rs
Original file line number Diff line number Diff line change
Expand Up @@ -241,14 +241,14 @@ extern_fn! {
};

let viewport = if viewport.is_null() {
Viewport::new_render_target_sized_origin(ManuallyDrop::into_inner(out.clone()), mvp)
Viewport::new_render_target_sized_origin(out.deref(), mvp)
.map_err(|e| LibrashaderError::D3D11FilterError(FilterChainError::Direct3DError(e)))?
} else {
let viewport = unsafe { viewport.read() };
Viewport {
x: viewport.x,
y: viewport.y,
output: ManuallyDrop::into_inner(out.clone()),
output: out.deref(),
size: Size {
height: viewport.height,
width: viewport.width
Expand Down
2 changes: 1 addition & 1 deletion librashader-cli/src/render/d3d11.rs
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ impl RenderTest for Direct3D11 {
if let Some(setter) = param_setter {
setter(filter_chain.parameters());
}
let viewport = Viewport::new_render_target_sized_origin(rtv, None)?;
let viewport = Viewport::new_render_target_sized_origin(&rtv, None)?;
let options = frame_options.map(|options| FrameOptions {
clear_history: options.clear_history,
frame_direction: options.frame_direction,
Expand Down
20 changes: 18 additions & 2 deletions librashader-common/src/d3d11.rs
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ impl From<FilterMode> for Direct3D11::D3D11_FILTER {
}
}

impl GetSize<u32> for Direct3D11::ID3D11RenderTargetView {
impl GetSize<u32> for &Direct3D11::ID3D11RenderTargetView {
type Error = windows::core::Error;

fn size(&self) -> Result<Size<u32>, Self::Error> {
Expand Down Expand Up @@ -55,7 +55,15 @@ impl GetSize<u32> for Direct3D11::ID3D11RenderTargetView {
}
}

impl GetSize<u32> for Direct3D11::ID3D11ShaderResourceView {
impl GetSize<u32> for Direct3D11::ID3D11RenderTargetView {
type Error = windows::core::Error;

fn size(&self) -> Result<Size<u32>, Self::Error> {
<&Self as GetSize<u32>>::size(&self)
}
}

impl GetSize<u32> for &Direct3D11::ID3D11ShaderResourceView {
type Error = windows::core::Error;

fn size(&self) -> Result<Size<u32>, Self::Error> {
Expand Down Expand Up @@ -85,3 +93,11 @@ impl GetSize<u32> for Direct3D11::ID3D11ShaderResourceView {
})
}
}

impl GetSize<u32> for Direct3D11::ID3D11ShaderResourceView {
type Error = windows::core::Error;

fn size(&self) -> Result<Size<u32>, Self::Error> {
<&Self as GetSize<u32>>::size(&self)
}
}
2 changes: 1 addition & 1 deletion librashader-runtime-d3d11/src/filter_chain.rs
Original file line number Diff line number Diff line change
Expand Up @@ -401,7 +401,7 @@ impl FilterChainD3D11 {
&mut self,
ctx: Option<&ID3D11DeviceContext>,
input: &ID3D11ShaderResourceView,
viewport: &Viewport<ID3D11RenderTargetView>,
viewport: &Viewport<&ID3D11RenderTargetView>,
frame_count: usize,
options: Option<&FrameOptionsD3D11>,
) -> error::Result<()> {
Expand Down
2 changes: 1 addition & 1 deletion librashader-runtime-d3d11/src/filter_pass.rs
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,7 @@ impl FilterPass {
parent: &FilterCommon,
frame_count: u32,
options: &FrameOptionsD3D11,
viewport: &Viewport<ID3D11RenderTargetView>,
viewport: &Viewport<&ID3D11RenderTargetView>,
original: &InputTexture,
source: &InputTexture,
output: RenderTarget<ID3D11RenderTargetView>,
Expand Down
2 changes: 1 addition & 1 deletion librashader-runtime-d3d11/tests/hello_triangle/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -569,7 +569,7 @@ pub mod d3d11_hello_triangle {
let srv = input_srv.unwrap();

// eprintln!("w: {} h: {}", backbuffer_desc.Width, backbuffer_desc.Height);
let output = resources.backbuffer_rtv.as_ref().unwrap().clone();
let output = resources.backbuffer_rtv.as_ref().unwrap();
let size: Size<u32> = output.size().unwrap();
self.filter
.frame(
Expand Down

0 comments on commit 7b7fd99

Please sign in to comment.