diff options
Diffstat (limited to 'video/out/d3d11/ra_d3d11.h')
-rw-r--r-- | video/out/d3d11/ra_d3d11.h | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/video/out/d3d11/ra_d3d11.h b/video/out/d3d11/ra_d3d11.h new file mode 100644 index 0000000..6f62a7f --- /dev/null +++ b/video/out/d3d11/ra_d3d11.h @@ -0,0 +1,47 @@ +#pragma once + +#include <stdbool.h> +#include <windows.h> +#include <d3d11.h> +#include <dxgi1_2.h> + +#include "video/out/gpu/ra.h" +#include "video/out/gpu/spirv.h" + +// Get the underlying DXGI format from an RA format +DXGI_FORMAT ra_d3d11_get_format(const struct ra_format *fmt); + +// Gets the matching ra_format for a given DXGI format. +// Returns a nullptr in case of no known match. +const struct ra_format *ra_d3d11_get_ra_format(struct ra *ra, DXGI_FORMAT fmt); + +// Create an RA instance from a D3D11 device. This takes a reference to the +// device, which is released when the RA instance is destroyed. +struct ra *ra_d3d11_create(ID3D11Device *device, struct mp_log *log, + struct spirv_compiler *spirv); + +// Flush the immediate context of the wrapped D3D11 device +void ra_d3d11_flush(struct ra *ra); + +// Create an RA texture from a D3D11 resource. This takes a reference to the +// texture, which is released when the RA texture is destroyed. +struct ra_tex *ra_d3d11_wrap_tex(struct ra *ra, ID3D11Resource *res); + +// As above, but for a D3D11VA video resource. The fmt parameter selects which +// plane of a planar format will be mapped when the RA texture is used. +// array_slice should be set for texture arrays and is ignored for non-arrays. +struct ra_tex *ra_d3d11_wrap_tex_video(struct ra *ra, ID3D11Texture2D *res, + int w, int h, int array_slice, + const struct ra_format *fmt); + +// Get the underlying D3D11 resource from an RA texture. The returned resource +// is refcounted and must be released by the caller. +ID3D11Resource *ra_d3d11_get_raw_tex(struct ra *ra, struct ra_tex *tex, + int *array_slice); + +// Get the underlying D3D11 device from an RA instance. The returned device is +// refcounted and must be released by the caller. +ID3D11Device *ra_d3d11_get_device(struct ra *ra); + +// True if the RA instance was created with ra_d3d11_create() +bool ra_is_d3d11(struct ra *ra); |