rt(d3d11): get rid of input/output view wrappers
This commit is contained in:
parent
35f499f5e1
commit
4d6793d305
|
@ -4,11 +4,12 @@ use crate::ctypes::{
|
||||||
use crate::error::{assert_non_null, assert_some_ptr, LibrashaderError};
|
use crate::error::{assert_non_null, assert_some_ptr, LibrashaderError};
|
||||||
use crate::ffi::extern_fn;
|
use crate::ffi::extern_fn;
|
||||||
use librashader::runtime::d3d11::{
|
use librashader::runtime::d3d11::{
|
||||||
D3D11InputView, D3D11OutputView, FilterChain, FilterChainOptions, FrameOptions,
|
FilterChain, FilterChainOptions, FrameOptions,
|
||||||
};
|
};
|
||||||
use std::ffi::c_char;
|
use std::ffi::c_char;
|
||||||
use std::ffi::CStr;
|
use std::ffi::CStr;
|
||||||
use std::mem::{ManuallyDrop, MaybeUninit};
|
use std::mem::{ManuallyDrop, MaybeUninit};
|
||||||
|
use std::ops::Deref;
|
||||||
use std::ptr::NonNull;
|
use std::ptr::NonNull;
|
||||||
use std::slice;
|
use std::slice;
|
||||||
use windows::Win32::Graphics::Direct3D11::{
|
use windows::Win32::Graphics::Direct3D11::{
|
||||||
|
@ -23,25 +24,12 @@ use librashader::runtime::{FilterChainParameters, Size, Viewport};
|
||||||
pub struct libra_source_image_d3d11_t {
|
pub struct libra_source_image_d3d11_t {
|
||||||
/// A shader resource view into the source image
|
/// A shader resource view into the source image
|
||||||
pub handle: ManuallyDrop<ID3D11ShaderResourceView>,
|
pub handle: ManuallyDrop<ID3D11ShaderResourceView>,
|
||||||
/// The width of the source image.
|
/// This is currently ignored.
|
||||||
pub width: u32,
|
pub width: u32,
|
||||||
/// The height of the source image.
|
/// This is currently ignored.
|
||||||
pub height: u32,
|
pub height: u32,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl TryFrom<libra_source_image_d3d11_t> for D3D11InputView {
|
|
||||||
type Error = LibrashaderError;
|
|
||||||
|
|
||||||
fn try_from(value: libra_source_image_d3d11_t) -> Result<Self, Self::Error> {
|
|
||||||
let handle = value.handle.clone();
|
|
||||||
|
|
||||||
Ok(D3D11InputView {
|
|
||||||
handle: ManuallyDrop::into_inner(handle),
|
|
||||||
size: Size::new(value.width, value.height),
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Options for Direct3D 11 filter chain creation.
|
/// Options for Direct3D 11 filter chain creation.
|
||||||
#[repr(C)]
|
#[repr(C)]
|
||||||
#[derive(Default, Debug, Clone)]
|
#[derive(Default, Debug, Clone)]
|
||||||
|
@ -251,19 +239,14 @@ extern_fn! {
|
||||||
let viewport = Viewport {
|
let viewport = Viewport {
|
||||||
x: viewport.x,
|
x: viewport.x,
|
||||||
y: viewport.y,
|
y: viewport.y,
|
||||||
output: D3D11OutputView {
|
output: ManuallyDrop::into_inner(out.clone()),
|
||||||
size: Size::new(viewport.width, viewport.height),
|
|
||||||
handle: ManuallyDrop::into_inner(out.clone()),
|
|
||||||
},
|
|
||||||
mvp,
|
mvp,
|
||||||
};
|
};
|
||||||
|
|
||||||
let options = options.map(FromUninit::from_uninit);
|
let options = options.map(FromUninit::from_uninit);
|
||||||
|
|
||||||
let image = image.try_into()?;
|
|
||||||
|
|
||||||
unsafe {
|
unsafe {
|
||||||
chain.frame(device_context.as_deref(), image, &viewport, frame_count, options.as_ref())?;
|
chain.frame(device_context.as_deref(), image.handle.deref(), &viewport, frame_count, options.as_ref())?;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
use crate::texture::{D3D11InputView, InputTexture};
|
use crate::texture::InputTexture;
|
||||||
use librashader_common::{ImageFormat, Size, Viewport};
|
use librashader_common::{ImageFormat, Size, Viewport};
|
||||||
|
|
||||||
use librashader_common::map::FastHashMap;
|
use librashader_common::map::FastHashMap;
|
||||||
|
@ -21,8 +21,8 @@ use crate::graphics_pipeline::D3D11State;
|
||||||
use crate::luts::LutTexture;
|
use crate::luts::LutTexture;
|
||||||
use crate::options::{FilterChainOptionsD3D11, FrameOptionsD3D11};
|
use crate::options::{FilterChainOptionsD3D11, FrameOptionsD3D11};
|
||||||
use crate::samplers::SamplerSet;
|
use crate::samplers::SamplerSet;
|
||||||
use crate::util::d3d11_compile_bound_shader;
|
use crate::util::{d3d11_compile_bound_shader, GetSize};
|
||||||
use crate::{error, util, D3D11OutputView};
|
use crate::{error, util};
|
||||||
use librashader_cache::cache_shader_object;
|
use librashader_cache::cache_shader_object;
|
||||||
use librashader_cache::CachedCompilation;
|
use librashader_cache::CachedCompilation;
|
||||||
use librashader_presets::context::VideoDriver;
|
use librashader_presets::context::VideoDriver;
|
||||||
|
@ -36,7 +36,8 @@ use librashader_runtime::scaling::ScaleFramebuffer;
|
||||||
use librashader_runtime::uniforms::UniformStorage;
|
use librashader_runtime::uniforms::UniformStorage;
|
||||||
use rayon::prelude::*;
|
use rayon::prelude::*;
|
||||||
use windows::Win32::Graphics::Direct3D11::{
|
use windows::Win32::Graphics::Direct3D11::{
|
||||||
ID3D11Buffer, ID3D11Device, ID3D11DeviceContext, D3D11_BIND_CONSTANT_BUFFER, D3D11_BUFFER_DESC,
|
ID3D11Buffer, ID3D11Device, ID3D11DeviceContext, ID3D11RenderTargetView,
|
||||||
|
ID3D11ShaderResourceView, D3D11_BIND_CONSTANT_BUFFER, D3D11_BUFFER_DESC,
|
||||||
D3D11_CPU_ACCESS_WRITE, D3D11_CREATE_DEVICE_SINGLETHREADED, D3D11_RESOURCE_MISC_GENERATE_MIPS,
|
D3D11_CPU_ACCESS_WRITE, D3D11_CREATE_DEVICE_SINGLETHREADED, D3D11_RESOURCE_MISC_GENERATE_MIPS,
|
||||||
D3D11_TEXTURE2D_DESC, D3D11_USAGE_DEFAULT, D3D11_USAGE_DYNAMIC,
|
D3D11_TEXTURE2D_DESC, D3D11_USAGE_DEFAULT, D3D11_USAGE_DYNAMIC,
|
||||||
};
|
};
|
||||||
|
@ -347,7 +348,7 @@ impl FilterChainD3D11 {
|
||||||
fn push_history(
|
fn push_history(
|
||||||
&mut self,
|
&mut self,
|
||||||
ctx: &ID3D11DeviceContext,
|
ctx: &ID3D11DeviceContext,
|
||||||
input: &D3D11InputView,
|
input: &ID3D11ShaderResourceView,
|
||||||
) -> error::Result<()> {
|
) -> error::Result<()> {
|
||||||
if let Some(mut back) = self.history_framebuffers.pop_back() {
|
if let Some(mut back) = self.history_framebuffers.pop_back() {
|
||||||
back.copy_from(ctx, input)?;
|
back.copy_from(ctx, input)?;
|
||||||
|
@ -399,8 +400,8 @@ impl FilterChainD3D11 {
|
||||||
pub unsafe fn frame(
|
pub unsafe fn frame(
|
||||||
&mut self,
|
&mut self,
|
||||||
ctx: Option<&ID3D11DeviceContext>,
|
ctx: Option<&ID3D11DeviceContext>,
|
||||||
input: D3D11InputView,
|
input: &ID3D11ShaderResourceView,
|
||||||
viewport: &Viewport<D3D11OutputView>,
|
viewport: &Viewport<ID3D11RenderTargetView>,
|
||||||
frame_count: usize,
|
frame_count: usize,
|
||||||
options: Option<&FrameOptionsD3D11>,
|
options: Option<&FrameOptionsD3D11>,
|
||||||
) -> error::Result<()> {
|
) -> error::Result<()> {
|
||||||
|
@ -447,8 +448,8 @@ impl FilterChainD3D11 {
|
||||||
// rescale render buffers to ensure all bindings are valid.
|
// rescale render buffers to ensure all bindings are valid.
|
||||||
OwnedImage::scale_framebuffers(
|
OwnedImage::scale_framebuffers(
|
||||||
source.size(),
|
source.size(),
|
||||||
viewport.output.size,
|
viewport.output.size()?,
|
||||||
original.view.size,
|
original.view.size()?,
|
||||||
&mut self.output_framebuffers,
|
&mut self.output_framebuffers,
|
||||||
&mut self.feedback_framebuffers,
|
&mut self.feedback_framebuffers,
|
||||||
passes,
|
passes,
|
||||||
|
@ -481,7 +482,6 @@ impl FilterChainD3D11 {
|
||||||
source.filter = pass.config.filter;
|
source.filter = pass.config.filter;
|
||||||
source.wrap_mode = pass.config.wrap_mode;
|
source.wrap_mode = pass.config.wrap_mode;
|
||||||
let target = &self.output_framebuffers[index];
|
let target = &self.output_framebuffers[index];
|
||||||
let size = target.size;
|
|
||||||
pass.draw(
|
pass.draw(
|
||||||
ctx,
|
ctx,
|
||||||
index,
|
index,
|
||||||
|
@ -491,15 +491,12 @@ impl FilterChainD3D11 {
|
||||||
viewport,
|
viewport,
|
||||||
&original,
|
&original,
|
||||||
&source,
|
&source,
|
||||||
RenderTarget::identity(&target.as_output()?),
|
RenderTarget::identity(&target.create_render_target_view()?),
|
||||||
QuadType::Offscreen,
|
QuadType::Offscreen,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
source = InputTexture {
|
source = InputTexture {
|
||||||
view: D3D11InputView {
|
view: target.create_shader_resource_view()?,
|
||||||
handle: target.create_shader_resource_view()?,
|
|
||||||
size,
|
|
||||||
},
|
|
||||||
filter: pass.config.filter,
|
filter: pass.config.filter,
|
||||||
wrap_mode: pass.config.wrap_mode,
|
wrap_mode: pass.config.wrap_mode,
|
||||||
};
|
};
|
||||||
|
|
|
@ -16,13 +16,14 @@ use librashader_runtime::filter_pass::FilterPassMeta;
|
||||||
use librashader_runtime::quad::QuadType;
|
use librashader_runtime::quad::QuadType;
|
||||||
use librashader_runtime::render_target::RenderTarget;
|
use librashader_runtime::render_target::RenderTarget;
|
||||||
use windows::Win32::Graphics::Direct3D11::{
|
use windows::Win32::Graphics::Direct3D11::{
|
||||||
ID3D11Buffer, ID3D11DeviceContext, ID3D11InputLayout, ID3D11PixelShader, ID3D11SamplerState,
|
ID3D11Buffer, ID3D11DeviceContext, ID3D11InputLayout, ID3D11PixelShader,
|
||||||
ID3D11ShaderResourceView, ID3D11VertexShader, D3D11_MAPPED_SUBRESOURCE,
|
ID3D11RenderTargetView, ID3D11SamplerState, ID3D11ShaderResourceView, ID3D11VertexShader,
|
||||||
D3D11_MAP_WRITE_DISCARD, D3D11_VIEWPORT,
|
D3D11_MAPPED_SUBRESOURCE, D3D11_MAP_WRITE_DISCARD, D3D11_VIEWPORT,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
use crate::error;
|
||||||
use crate::samplers::SamplerSet;
|
use crate::samplers::SamplerSet;
|
||||||
use crate::{error, D3D11OutputView};
|
use crate::util::GetSize;
|
||||||
use librashader_runtime::uniforms::{UniformStorage, UniformStorageAccess};
|
use librashader_runtime::uniforms::{UniformStorage, UniformStorageAccess};
|
||||||
|
|
||||||
pub struct ConstantBufferBinding {
|
pub struct ConstantBufferBinding {
|
||||||
|
@ -55,7 +56,7 @@ const NULL_TEXTURES: &[Option<ID3D11ShaderResourceView>; 16] = &[
|
||||||
|
|
||||||
impl TextureInput for InputTexture {
|
impl TextureInput for InputTexture {
|
||||||
fn size(&self) -> Size<u32> {
|
fn size(&self) -> Size<u32> {
|
||||||
self.view.size
|
self.view.size().unwrap_or(Size::default())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -77,7 +78,7 @@ impl BindSemantics for FilterPass {
|
||||||
_device: &Self::DeviceContext,
|
_device: &Self::DeviceContext,
|
||||||
) {
|
) {
|
||||||
let (texture_binding, sampler_binding) = descriptors;
|
let (texture_binding, sampler_binding) = descriptors;
|
||||||
texture_binding[binding.binding as usize] = Some(texture.view.handle.clone());
|
texture_binding[binding.binding as usize] = Some(texture.view.clone());
|
||||||
sampler_binding[binding.binding as usize] =
|
sampler_binding[binding.binding as usize] =
|
||||||
Some(samplers.get(texture.wrap_mode, texture.filter).clone());
|
Some(samplers.get(texture.wrap_mode, texture.filter).clone());
|
||||||
}
|
}
|
||||||
|
@ -149,15 +150,15 @@ impl FilterPass {
|
||||||
parent: &FilterCommon,
|
parent: &FilterCommon,
|
||||||
frame_count: u32,
|
frame_count: u32,
|
||||||
options: &FrameOptionsD3D11,
|
options: &FrameOptionsD3D11,
|
||||||
viewport: &Viewport<D3D11OutputView>,
|
viewport: &Viewport<ID3D11RenderTargetView>,
|
||||||
original: &InputTexture,
|
original: &InputTexture,
|
||||||
source: &InputTexture,
|
source: &InputTexture,
|
||||||
output: RenderTarget<D3D11OutputView>,
|
output: RenderTarget<ID3D11RenderTargetView>,
|
||||||
vbo_type: QuadType,
|
vbo_type: QuadType,
|
||||||
) -> error::Result<()> {
|
) -> error::Result<()> {
|
||||||
if self.config.mipmap_input && !parent.disable_mipmaps {
|
if self.config.mipmap_input && !parent.disable_mipmaps {
|
||||||
unsafe {
|
unsafe {
|
||||||
ctx.GenerateMips(&source.view.handle);
|
ctx.GenerateMips(&source.view);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
unsafe {
|
unsafe {
|
||||||
|
@ -170,14 +171,17 @@ impl FilterPass {
|
||||||
let mut samplers: [Option<ID3D11SamplerState>; 16] = std::array::from_fn(|_| None);
|
let mut samplers: [Option<ID3D11SamplerState>; 16] = std::array::from_fn(|_| None);
|
||||||
let descriptors = (&mut textures, &mut samplers);
|
let descriptors = (&mut textures, &mut samplers);
|
||||||
|
|
||||||
|
let output_size = output.output.size()?;
|
||||||
|
let viewport_size = viewport.output.size()?;
|
||||||
|
|
||||||
self.build_semantics(
|
self.build_semantics(
|
||||||
pass_index,
|
pass_index,
|
||||||
parent,
|
parent,
|
||||||
output.mvp,
|
output.mvp,
|
||||||
frame_count,
|
frame_count,
|
||||||
options,
|
options,
|
||||||
output.output.size,
|
output_size,
|
||||||
viewport.output.size,
|
viewport_size,
|
||||||
descriptors,
|
descriptors,
|
||||||
original,
|
original,
|
||||||
source,
|
source,
|
||||||
|
@ -241,15 +245,16 @@ impl FilterPass {
|
||||||
std::mem::size_of::<Option<windows::core::IUnknown>>()
|
std::mem::size_of::<Option<windows::core::IUnknown>>()
|
||||||
== std::mem::size_of::<windows::core::IUnknown>()
|
== std::mem::size_of::<windows::core::IUnknown>()
|
||||||
);
|
);
|
||||||
|
|
||||||
ctx.PSSetShaderResources(0, Some(std::mem::transmute(textures.as_ref())));
|
ctx.PSSetShaderResources(0, Some(std::mem::transmute(textures.as_ref())));
|
||||||
ctx.PSSetSamplers(0, Some(std::mem::transmute(samplers.as_ref())));
|
ctx.PSSetSamplers(0, Some(std::mem::transmute(samplers.as_ref())));
|
||||||
|
|
||||||
ctx.OMSetRenderTargets(Some(&[Some(output.output.handle.clone())]), None);
|
ctx.OMSetRenderTargets(Some(&[Some(output.output.clone())]), None);
|
||||||
ctx.RSSetViewports(Some(&[D3D11_VIEWPORT {
|
ctx.RSSetViewports(Some(&[D3D11_VIEWPORT {
|
||||||
TopLeftX: output.x,
|
TopLeftX: output.x,
|
||||||
TopLeftY: output.y,
|
TopLeftY: output.y,
|
||||||
Width: output.output.size.width as f32,
|
Width: output_size.width as f32,
|
||||||
Height: output.output.size.height as f32,
|
Height: output_size.height as f32,
|
||||||
MinDepth: 0.0,
|
MinDepth: 0.0,
|
||||||
MaxDepth: 1.0,
|
MaxDepth: 1.0,
|
||||||
}]))
|
}]))
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
|
use crate::error;
|
||||||
use crate::error::{assume_d3d11_init, FilterChainError};
|
use crate::error::{assume_d3d11_init, FilterChainError};
|
||||||
use crate::texture::D3D11InputView;
|
|
||||||
use crate::util::d3d11_get_closest_format;
|
use crate::util::d3d11_get_closest_format;
|
||||||
use crate::{error, D3D11OutputView};
|
|
||||||
use librashader_common::{ImageFormat, Size};
|
use librashader_common::{ImageFormat, Size};
|
||||||
use librashader_presets::Scale2D;
|
use librashader_presets::Scale2D;
|
||||||
use librashader_runtime::scaling::{MipmapSize, ScaleFramebuffer, ViewportSize};
|
use librashader_runtime::scaling::{MipmapSize, ScaleFramebuffer, ViewportSize};
|
||||||
|
@ -171,33 +170,25 @@ impl OwnedImage {
|
||||||
Ok(rtv)
|
Ok(rtv)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn as_output(&self) -> error::Result<D3D11OutputView> {
|
|
||||||
let rtv = self.create_render_target_view()?;
|
|
||||||
Ok(D3D11OutputView {
|
|
||||||
handle: rtv,
|
|
||||||
size: self.size,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn copy_from(
|
pub fn copy_from(
|
||||||
&mut self,
|
&mut self,
|
||||||
ctx: &ID3D11DeviceContext,
|
ctx: &ID3D11DeviceContext,
|
||||||
image: &D3D11InputView,
|
image: &ID3D11ShaderResourceView,
|
||||||
) -> error::Result<()> {
|
) -> error::Result<()> {
|
||||||
let original_resource: ID3D11Texture2D = unsafe {
|
let original_resource: ID3D11Texture2D = unsafe {
|
||||||
let resource = image.handle.GetResource()?;
|
let resource = image.GetResource()?;
|
||||||
resource.cast()?
|
resource.cast()?
|
||||||
};
|
};
|
||||||
|
|
||||||
let format = unsafe {
|
let (format, image_size) = unsafe {
|
||||||
let mut desc = Default::default();
|
let mut desc = Default::default();
|
||||||
original_resource.GetDesc(&mut desc);
|
original_resource.GetDesc(&mut desc);
|
||||||
desc.Format
|
(desc.Format, Size::new(desc.Width, desc.Height))
|
||||||
};
|
};
|
||||||
|
|
||||||
if self.size != image.size || format != self.format {
|
if self.size != image_size || format != self.format {
|
||||||
// eprintln!("[history] resizing");
|
// eprintln!("[history] resizing");
|
||||||
self.init(image.size, ImageFormat::from(format))?;
|
self.init(image_size, ImageFormat::from(format))?;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsafe {
|
unsafe {
|
||||||
|
|
|
@ -25,5 +25,3 @@ use librashader_runtime::impl_filter_chain_parameters;
|
||||||
impl_filter_chain_parameters!(FilterChainD3D11);
|
impl_filter_chain_parameters!(FilterChainD3D11);
|
||||||
|
|
||||||
pub use filter_chain::FilterChainD3D11;
|
pub use filter_chain::FilterChainD3D11;
|
||||||
pub use texture::D3D11InputView;
|
|
||||||
pub use texture::D3D11OutputView;
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
|
use crate::error;
|
||||||
use crate::error::assume_d3d11_init;
|
use crate::error::assume_d3d11_init;
|
||||||
use crate::texture::InputTexture;
|
use crate::texture::InputTexture;
|
||||||
use crate::{error, D3D11InputView};
|
|
||||||
use librashader_common::{FilterMode, WrapMode};
|
use librashader_common::{FilterMode, WrapMode};
|
||||||
use librashader_runtime::image::Image;
|
use librashader_runtime::image::Image;
|
||||||
use librashader_runtime::scaling::MipmapSize;
|
use librashader_runtime::scaling::MipmapSize;
|
||||||
|
@ -139,10 +139,7 @@ impl LutTexture {
|
||||||
handle,
|
handle,
|
||||||
desc,
|
desc,
|
||||||
image: InputTexture {
|
image: InputTexture {
|
||||||
view: D3D11InputView {
|
view: srv,
|
||||||
handle: srv,
|
|
||||||
size: source.size,
|
|
||||||
},
|
|
||||||
filter,
|
filter,
|
||||||
wrap_mode,
|
wrap_mode,
|
||||||
},
|
},
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
use crate::error::Result;
|
use crate::error::Result;
|
||||||
use crate::framebuffer::OwnedImage;
|
use crate::framebuffer::OwnedImage;
|
||||||
use librashader_common::{FilterMode, Size, WrapMode};
|
use librashader_common::{FilterMode, WrapMode};
|
||||||
use windows::Win32::Graphics::Direct3D11::{ID3D11RenderTargetView, ID3D11ShaderResourceView};
|
use windows::Win32::Graphics::Direct3D11::{ID3D11RenderTargetView, ID3D11ShaderResourceView};
|
||||||
|
|
||||||
/// An image view for use as a shader resource.
|
/// An image view for use as a shader resource.
|
||||||
|
@ -10,8 +10,6 @@ use windows::Win32::Graphics::Direct3D11::{ID3D11RenderTargetView, ID3D11ShaderR
|
||||||
pub struct D3D11InputView {
|
pub struct D3D11InputView {
|
||||||
/// A handle to the shader resource view.
|
/// A handle to the shader resource view.
|
||||||
pub handle: ID3D11ShaderResourceView,
|
pub handle: ID3D11ShaderResourceView,
|
||||||
/// The size of the image.
|
|
||||||
pub size: Size<u32>,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// An image view for use as a render target.
|
/// An image view for use as a render target.
|
||||||
|
@ -21,13 +19,11 @@ pub struct D3D11InputView {
|
||||||
pub struct D3D11OutputView {
|
pub struct D3D11OutputView {
|
||||||
/// A handle to the render target view.
|
/// A handle to the render target view.
|
||||||
pub handle: ID3D11RenderTargetView,
|
pub handle: ID3D11RenderTargetView,
|
||||||
/// The size of the image.
|
|
||||||
pub size: Size<u32>,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone)]
|
||||||
pub struct InputTexture {
|
pub struct InputTexture {
|
||||||
pub view: D3D11InputView,
|
pub view: ID3D11ShaderResourceView,
|
||||||
pub filter: FilterMode,
|
pub filter: FilterMode,
|
||||||
pub wrap_mode: WrapMode,
|
pub wrap_mode: WrapMode,
|
||||||
}
|
}
|
||||||
|
@ -39,10 +35,7 @@ impl InputTexture {
|
||||||
filter: FilterMode,
|
filter: FilterMode,
|
||||||
) -> Result<Self> {
|
) -> Result<Self> {
|
||||||
Ok(InputTexture {
|
Ok(InputTexture {
|
||||||
view: D3D11InputView {
|
view: fbo.create_shader_resource_view()?,
|
||||||
handle: fbo.create_shader_resource_view()?,
|
|
||||||
size: fbo.size,
|
|
||||||
},
|
|
||||||
filter,
|
filter,
|
||||||
wrap_mode,
|
wrap_mode,
|
||||||
})
|
})
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
use crate::error;
|
use crate::error;
|
||||||
use crate::error::assume_d3d11_init;
|
use crate::error::assume_d3d11_init;
|
||||||
|
use librashader_common::Size;
|
||||||
use std::slice;
|
use std::slice;
|
||||||
use windows::core::PCSTR;
|
use windows::core::{ComInterface, PCSTR};
|
||||||
use windows::Win32::Graphics::Direct3D::Fxc::{
|
use windows::Win32::Graphics::Direct3D::Fxc::{
|
||||||
D3DCompile, D3DCOMPILE_DEBUG, D3DCOMPILE_OPTIMIZATION_LEVEL3, D3DCOMPILE_SKIP_OPTIMIZATION,
|
D3DCompile, D3DCOMPILE_DEBUG, D3DCOMPILE_OPTIMIZATION_LEVEL3, D3DCOMPILE_SKIP_OPTIMIZATION,
|
||||||
};
|
};
|
||||||
|
@ -175,3 +176,39 @@ pub fn d3d11_create_input_layout(
|
||||||
Ok(input_layout)
|
Ok(input_layout)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub(crate) trait GetSize {
|
||||||
|
fn size(&self) -> error::Result<Size<u32>>;
|
||||||
|
}
|
||||||
|
|
||||||
|
impl GetSize for ID3D11RenderTargetView {
|
||||||
|
fn size(&self) -> error::Result<Size<u32>> {
|
||||||
|
let parent = unsafe { self.GetResource()?.cast::<ID3D11Texture2D>()? };
|
||||||
|
|
||||||
|
let mut desc = Default::default();
|
||||||
|
unsafe {
|
||||||
|
parent.GetDesc(&mut desc);
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(Size {
|
||||||
|
height: desc.Height,
|
||||||
|
width: desc.Width,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl GetSize for ID3D11ShaderResourceView {
|
||||||
|
fn size(&self) -> error::Result<Size<u32>> {
|
||||||
|
let parent = unsafe { self.GetResource()?.cast::<ID3D11Texture2D>()? };
|
||||||
|
|
||||||
|
let mut desc = Default::default();
|
||||||
|
unsafe {
|
||||||
|
parent.GetDesc(&mut desc);
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(Size {
|
||||||
|
height: desc.Height,
|
||||||
|
width: desc.Width,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -246,7 +246,6 @@ pub mod d3d11_hello_triangle {
|
||||||
use librashader_runtime::image::Image;
|
use librashader_runtime::image::Image;
|
||||||
use librashader_runtime_d3d11::options::FilterChainOptionsD3D11;
|
use librashader_runtime_d3d11::options::FilterChainOptionsD3D11;
|
||||||
use librashader_runtime_d3d11::FilterChainD3D11;
|
use librashader_runtime_d3d11::FilterChainD3D11;
|
||||||
use librashader_runtime_d3d11::{D3D11InputView, D3D11OutputView};
|
|
||||||
use std::slice;
|
use std::slice;
|
||||||
use std::time::Instant;
|
use std::time::Instant;
|
||||||
use texture::ExampleTexture;
|
use texture::ExampleTexture;
|
||||||
|
@ -572,23 +571,11 @@ pub mod d3d11_hello_triangle {
|
||||||
self.filter
|
self.filter
|
||||||
.frame(
|
.frame(
|
||||||
None,
|
None,
|
||||||
D3D11InputView {
|
&srv,
|
||||||
handle: srv,
|
|
||||||
size: Size {
|
|
||||||
width: tex2d_desc.Width,
|
|
||||||
height: tex2d_desc.Height,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
&Viewport {
|
&Viewport {
|
||||||
x: 0f32,
|
x: 0f32,
|
||||||
y: 0f32,
|
y: 0f32,
|
||||||
output: D3D11OutputView {
|
output: resources.backbuffer_rtv.as_ref().unwrap().clone(),
|
||||||
size: Size {
|
|
||||||
width: backbuffer_desc.Width,
|
|
||||||
height: backbuffer_desc.Height,
|
|
||||||
},
|
|
||||||
handle: resources.backbuffer_rtv.as_ref().unwrap().clone(),
|
|
||||||
},
|
|
||||||
mvp: None,
|
mvp: None,
|
||||||
},
|
},
|
||||||
resources.frame_count,
|
resources.frame_count,
|
||||||
|
|
|
@ -12,8 +12,7 @@ use librashader_runtime_d3d11::options::FilterChainOptionsD3D11;
|
||||||
// const FILTER_PATH: &str =
|
// const FILTER_PATH: &str =
|
||||||
// "../test/Mega_Bezel_Packs/Duimon-Mega-Bezel/Presets/Advanced/Nintendo_GBA_SP/GBA_SP-[ADV]-[LCD-GRID].slangp";
|
// "../test/Mega_Bezel_Packs/Duimon-Mega-Bezel/Presets/Advanced/Nintendo_GBA_SP/GBA_SP-[ADV]-[LCD-GRID].slangp";
|
||||||
|
|
||||||
const FILTER_PATH: &str =
|
const FILTER_PATH: &str = "../test/shaders_slang/crt/crt-royale.slangp";
|
||||||
"../test/shaders_slang/bezel/Mega_Bezel/Presets/MBZ__0__SMOOTH-ADV.slangp";
|
|
||||||
|
|
||||||
// const FILTER_PATH: &str = "../test/slang-shaders/test/history.slangp";
|
// const FILTER_PATH: &str = "../test/slang-shaders/test/history.slangp";
|
||||||
// const FILTER_PATH: &str = "../test/slang-shaders/test/feedback.slangp";
|
// const FILTER_PATH: &str = "../test/slang-shaders/test/feedback.slangp";
|
||||||
|
@ -61,7 +60,7 @@ fn triangle_d3d11() {
|
||||||
FILTER_PATH,
|
FILTER_PATH,
|
||||||
Some(&FilterChainOptionsD3D11 {
|
Some(&FilterChainOptionsD3D11 {
|
||||||
force_no_mipmaps: false,
|
force_no_mipmaps: false,
|
||||||
disable_cache: false,
|
disable_cache: true,
|
||||||
}),
|
}),
|
||||||
// replace below with 'None' for the triangle
|
// replace below with 'None' for the triangle
|
||||||
// None,
|
// None,
|
||||||
|
|
|
@ -259,7 +259,7 @@ pub mod runtime {
|
||||||
options::{
|
options::{
|
||||||
FilterChainOptionsD3D11 as FilterChainOptions, FrameOptionsD3D11 as FrameOptions,
|
FilterChainOptionsD3D11 as FilterChainOptions, FrameOptionsD3D11 as FrameOptions,
|
||||||
},
|
},
|
||||||
D3D11InputView, D3D11OutputView, FilterChainD3D11 as FilterChain,
|
FilterChainD3D11 as FilterChain,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue