Dynamic capture format selection (IDXGIOutput5) (#654)

Co-authored-by: Conn O'Griofa <connogriofa@gmail.com>
This commit is contained in:
Cameron Gutman
2022-12-31 16:38:29 -06:00
committed by GitHub
parent 03b62730ae
commit 0c6d0edacf
4 changed files with 283 additions and 192 deletions

View File

@@ -31,6 +31,7 @@ using device_ctx_t = util::safe_ptr<ID3D11DeviceContext, Release<ID3D11
using adapter_t = util::safe_ptr<IDXGIAdapter1, Release<IDXGIAdapter1>>;
using output_t = util::safe_ptr<IDXGIOutput, Release<IDXGIOutput>>;
using output1_t = util::safe_ptr<IDXGIOutput1, Release<IDXGIOutput1>>;
using output5_t = util::safe_ptr<IDXGIOutput5, Release<IDXGIOutput5>>;
using dup_t = util::safe_ptr<IDXGIOutputDuplication, Release<IDXGIOutputDuplication>>;
using texture2d_t = util::safe_ptr<ID3D11Texture2D, Release<ID3D11Texture2D>>;
using texture1d_t = util::safe_ptr<ID3D11Texture1D, Release<ID3D11Texture1D>>;
@@ -118,7 +119,7 @@ public:
device_ctx_t device_ctx;
duplication_t dup;
DXGI_FORMAT format;
DXGI_FORMAT capture_format;
D3D_FEATURE_LEVEL feature_level;
typedef enum _D3DKMT_SCHEDULINGPRIORITYCLASS {
@@ -134,8 +135,13 @@ public:
protected:
int get_pixel_pitch() {
return (format == DXGI_FORMAT_R16G16B16A16_FLOAT) ? 8 : 4;
return (capture_format == DXGI_FORMAT_R16G16B16A16_FLOAT) ? 8 : 4;
}
const char *dxgi_format_to_string(DXGI_FORMAT format);
virtual int complete_img(img_t *img, bool dummy) = 0;
virtual std::vector<DXGI_FORMAT> get_supported_sdr_capture_formats() = 0;
};
class display_ram_t : public display_base_t {
@@ -146,6 +152,8 @@ public:
std::shared_ptr<img_t> alloc_img() override;
int dummy_img(img_t *img) override;
int complete_img(img_t *img, bool dummy) override;
std::vector<DXGI_FORMAT> get_supported_sdr_capture_formats() override;
int init(int framerate, const std::string &display_name);
@@ -161,6 +169,8 @@ public:
std::shared_ptr<img_t> alloc_img() override;
int dummy_img(img_t *img_base) override;
int complete_img(img_t *img_base, bool dummy) override;
std::vector<DXGI_FORMAT> get_supported_sdr_capture_formats() override;
int init(int framerate, const std::string &display_name);
@@ -174,7 +184,6 @@ public:
ps_t scene_ps;
vs_t scene_vs;
texture2d_t src;
gpu_cursor_t cursor;
};
} // namespace platf::dxgi