[host] dxgi: add support for downsampling the capture before sending

This is an experimental & incomplete feature for those using
supersampling. Anything > 1200p will be downsampled by 50% before
copying out of the GPU to save on memory bandwidth.

Unfinished! Has issues with damage tracking and currently can not
be configured. Only dx11 has been tested at this point, everything
else will likely have problems/crash.
This commit is contained in:
Geoffrey McRae
2022-05-01 19:45:44 +10:00
parent 132d0e3c42
commit 3134ec84de
6 changed files with 195 additions and 49 deletions

View File

@@ -28,7 +28,7 @@
#include "types.h"
#define KVMFR_MAGIC "KVMFR---"
#define KVMFR_VERSION 18
#define KVMFR_VERSION 19
#define KVMFR_MAX_DAMAGE_RECTS 64
@@ -127,7 +127,8 @@ KVMFRCursor;
enum
{
FRAME_FLAG_BLOCK_SCREENSAVER = 0x1,
FRAME_FLAG_REQUEST_ACTIVATION = 0x2
FRAME_FLAG_REQUEST_ACTIVATION = 0x2,
FRAME_FLAG_TRUNCATED = 0x4 // ivshmem was too small for the frame
};
typedef uint32_t KVMFRFrameFlags;
@@ -137,9 +138,10 @@ typedef struct KVMFRFrame
uint32_t formatVer; // the frame format version number
uint32_t frameSerial; // the unique frame number
FrameType type; // the frame data type
uint32_t width; // the frame width
uint32_t height; // the frame height
uint32_t realHeight; // the real height if the frame was truncated due to low mem
uint32_t screenWidth; // the client's screen width
uint32_t screenHeight; // the client's screen height
uint32_t frameWidth; // the frame width
uint32_t frameHeight; // the frame height
FrameRotation rotation; // the frame rotation
uint32_t stride; // the row stride (zero if compressed data)
uint32_t pitch; // the row pitch (stride in bytes or the compressed frame size)