Fix pixel pitch handling for DXGI_FORMAT_R16G16B16A16_FLOAT (#605)
This commit is contained in:
@@ -131,6 +131,11 @@ public:
|
|||||||
} D3DKMT_SCHEDULINGPRIORITYCLASS;
|
} D3DKMT_SCHEDULINGPRIORITYCLASS;
|
||||||
|
|
||||||
typedef NTSTATUS WINAPI (*PD3DKMTSetProcessSchedulingPriorityClass)(HANDLE, 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 {
|
class display_ram_t : public display_base_t {
|
||||||
|
|||||||
@@ -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() {
|
std::shared_ptr<platf::img_t> display_ram_t::alloc_img() {
|
||||||
auto img = std::make_shared<img_t>();
|
auto img = std::make_shared<img_t>();
|
||||||
|
|
||||||
img->pixel_pitch = 4;
|
img->pixel_pitch = get_pixel_pitch();
|
||||||
img->row_pitch = img_info.RowPitch;
|
img->row_pitch = img_info.RowPitch;
|
||||||
img->width = width;
|
img->width = width;
|
||||||
img->height = height;
|
img->height = height;
|
||||||
|
|||||||
@@ -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() {
|
std::shared_ptr<platf::img_t> display_vram_t::alloc_img() {
|
||||||
auto img = std::make_shared<img_d3d_t>();
|
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->row_pitch = img->pixel_pitch * width;
|
||||||
img->width = width;
|
img->width = width;
|
||||||
img->height = height;
|
img->height = height;
|
||||||
@@ -802,13 +802,14 @@ int display_vram_t::dummy_img(platf::img_t *img_base) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
img->row_pitch = width * 4;
|
img->pixel_pitch = get_pixel_pitch();
|
||||||
auto dummy_data = std::make_unique<int[]>(width * height);
|
img->row_pitch = img->pixel_pitch * width;
|
||||||
|
auto dummy_data = std::make_unique<uint8_t[]>(img->row_pitch * height);
|
||||||
D3D11_SUBRESOURCE_DATA data {
|
D3D11_SUBRESOURCE_DATA data {
|
||||||
dummy_data.get(),
|
dummy_data.get(),
|
||||||
(UINT)img->row_pitch
|
(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 {};
|
D3D11_TEXTURE2D_DESC t {};
|
||||||
t.Width = width;
|
t.Width = width;
|
||||||
|
|||||||
Reference in New Issue
Block a user