Fix pixel pitch handling for DXGI_FORMAT_R16G16B16A16_FLOAT (#605)

This commit is contained in:
Cameron Gutman 2022-12-22 20:58:39 -06:00 committed by GitHub
parent bb092c0723
commit 1e037db7bd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 11 additions and 5 deletions

View File

@ -131,6 +131,11 @@ public:
} D3DKMT_SCHEDULINGPRIORITYCLASS;
typedef NTSTATUS WINAPI (*PD3DKMTSetProcessSchedulingPriorityClass)(HANDLE, D3DKMT_SCHEDULINGPRIORITYCLASS);
protected:
int get_pixel_pitch() {
return (format == DXGI_FORMAT_R16G16B16A16_FLOAT) ? 8 : 4;
}
};
class display_ram_t : public display_base_t {

View File

@ -280,7 +280,7 @@ capture_e display_ram_t::snapshot(::platf::img_t *img_base, std::chrono::millise
std::shared_ptr<platf::img_t> display_ram_t::alloc_img() {
auto img = std::make_shared<img_t>();
img->pixel_pitch = 4;
img->pixel_pitch = get_pixel_pitch();
img->row_pitch = img_info.RowPitch;
img->width = width;
img->height = height;

View File

@ -757,7 +757,7 @@ int display_vram_t::init(int framerate, const std::string &display_name) {
std::shared_ptr<platf::img_t> display_vram_t::alloc_img() {
auto img = std::make_shared<img_d3d_t>();
img->pixel_pitch = 4;
img->pixel_pitch = get_pixel_pitch();
img->row_pitch = img->pixel_pitch * width;
img->width = width;
img->height = height;
@ -802,13 +802,14 @@ int display_vram_t::dummy_img(platf::img_t *img_base) {
return 0;
}
img->row_pitch = width * 4;
auto dummy_data = std::make_unique<int[]>(width * height);
img->pixel_pitch = get_pixel_pitch();
img->row_pitch = img->pixel_pitch * width;
auto dummy_data = std::make_unique<uint8_t[]>(img->row_pitch * height);
D3D11_SUBRESOURCE_DATA data {
dummy_data.get(),
(UINT)img->row_pitch
};
std::fill_n(dummy_data.get(), width * height, 0);
std::fill_n(dummy_data.get(), img->row_pitch * height, 0);
D3D11_TEXTURE2D_DESC t {};
t.Width = width;