rt(d3d9): take viewport by reference to avoid AddRef/Release
This commit is contained in:
parent
7b7fd99b92
commit
7d483f2e08
|
@ -160,14 +160,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::D3D9FilterError(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
|
||||
|
|
|
@ -92,7 +92,7 @@ impl RenderTest for Direct3D9 {
|
|||
current_subframe: options.current_subframe,
|
||||
});
|
||||
|
||||
let viewport = Viewport::new_render_target_sized_origin(surface.clone(), None)?;
|
||||
let viewport = Viewport::new_render_target_sized_origin(&surface, None)?;
|
||||
|
||||
for frame in 0..=frame_count {
|
||||
filter_chain.frame(&self.texture, &viewport, frame, options.as_ref())?;
|
||||
|
|
|
@ -64,7 +64,7 @@ impl From<FilterMode> for Direct3D9::D3DTEXTUREFILTER {
|
|||
}
|
||||
}
|
||||
|
||||
impl GetSize<u32> for Direct3D9::IDirect3DSurface9 {
|
||||
impl GetSize<u32> for &Direct3D9::IDirect3DSurface9 {
|
||||
type Error = windows::core::Error;
|
||||
|
||||
fn size(&self) -> Result<Size<u32>, Self::Error> {
|
||||
|
@ -80,7 +80,14 @@ impl GetSize<u32> for Direct3D9::IDirect3DSurface9 {
|
|||
}
|
||||
}
|
||||
|
||||
impl GetSize<u32> for Direct3D9::IDirect3DTexture9 {
|
||||
impl GetSize<u32> for Direct3D9::IDirect3DSurface9 {
|
||||
type Error = windows::core::Error;
|
||||
fn size(&self) -> Result<Size<u32>, Self::Error> {
|
||||
<&Self as GetSize<u32>>::size(&self)
|
||||
}
|
||||
}
|
||||
|
||||
impl GetSize<u32> for &Direct3D9::IDirect3DTexture9 {
|
||||
type Error = windows::core::Error;
|
||||
|
||||
fn size(&self) -> Result<Size<u32>, Self::Error> {
|
||||
|
@ -96,6 +103,13 @@ impl GetSize<u32> for Direct3D9::IDirect3DTexture9 {
|
|||
}
|
||||
}
|
||||
|
||||
impl GetSize<u32> for Direct3D9::IDirect3DTexture9 {
|
||||
type Error = windows::core::Error;
|
||||
fn size(&self) -> Result<Size<u32>, Self::Error> {
|
||||
<&Self as GetSize<u32>>::size(&self)
|
||||
}
|
||||
}
|
||||
|
||||
// impl FilterMode {
|
||||
// /// Get the mipmap filtering mode for the given combination.
|
||||
// pub fn d3d9_mip(&self, mip: FilterMode) -> Direct3D9::D3DTEXTUREFILTER {
|
||||
|
|
|
@ -289,7 +289,7 @@ impl FilterChainD3D9 {
|
|||
pub unsafe fn frame(
|
||||
&mut self,
|
||||
input: &IDirect3DTexture9,
|
||||
viewport: &Viewport<IDirect3DSurface9>,
|
||||
viewport: &Viewport<&IDirect3DSurface9>,
|
||||
frame_count: usize,
|
||||
options: Option<&FrameOptionsD3D9>,
|
||||
) -> error::Result<()> {
|
||||
|
|
|
@ -144,7 +144,7 @@ impl FilterPass {
|
|||
parent: &FilterCommon,
|
||||
frame_count: u32,
|
||||
options: &FrameOptionsD3D9,
|
||||
viewport: &Viewport<IDirect3DSurface9>,
|
||||
viewport: &Viewport<&IDirect3DSurface9>,
|
||||
original: &D3D9InputTexture,
|
||||
source: &D3D9InputTexture,
|
||||
output: RenderTarget<IDirect3DSurface9>,
|
||||
|
|
|
@ -431,13 +431,13 @@ pub mod d3d9_hello_triangle {
|
|||
resources
|
||||
.filter
|
||||
.frame(
|
||||
resources.texture.clone(),
|
||||
&resources.texture,
|
||||
&Viewport {
|
||||
x: 0.0,
|
||||
y: 0.0,
|
||||
mvp: None,
|
||||
output: backbuffer.clone(),
|
||||
size: backbuffer.size().unwrap(),
|
||||
output: &backbuffer,
|
||||
size: backbuffer.size()?,
|
||||
},
|
||||
0,
|
||||
None,
|
||||
|
|
Loading…
Reference in a new issue