qxl_wddm_dod_relaease
2023-08-23 19:15:48 0 举报
登录查看完整内容
为你推荐
查看更多
qxl_wddm源码分析
作者其他创作
大纲/内容
QXLDrawable
uint8_t type
4
QXLEffectType
font color=\"#323232\
......
MDL
指针指向InternalImage的地址
QXLCommond
QXLDataChunk
QXLRam*(8K)
QXLCursorCmd
MSPACE_TYPE_VRAM
cursor_ring
dxgi(MapMemory)
QXLPHYSICAL data
屏幕图像源数据(pSource)
0
QXLReleaseInfo release_info;uint8_t type;union { struct SPICE_ATTR_PACKED { QXLPoint16 position; uint8_t visible; QXLPHYSICAL shape; } set; struct SPICE_ATTR_PACKED { uint16_t length; uint16_t frequency; } trail; QXLPoint16 position; } u; uint8_t device_data[QXL_CURSUR_DEVICE_DATA_SIZE];
QXLCommand
uint32_t typeQXLPHYSICAL data // 指令数据,对应QXLDrawable结构体
pDirtyRect[1]
2
image.bitmap.data
u.copy.src_bitmap
cons = 0
m_RomHdr + m_RomHdr->modes_offset
prev_chunk/next_chunk
无
QXLRom
uint32_t magic; // QXL_ROM_MAGIC (*(const uint32_t*)\"QXRO\") uint32_t id; uint32_t update_id; // 未使用 uint32_t compression_level; // 未使用 uint32_t log_level; // 未使用 uint32_t mode; // 未使用 uint32_t modes_offset; // QXLModes的起始地址 uint32_t num_pages; uint32_t pages_offset; uint32_t draw_area_offset; uint32_t surface0_area_size; // 主表面大小,对应VGAMem大小 uint32_t ram_header_offset; // QXLRam起始地址 uint32_t mm_clock; uint32_t n_surfaces; // 未使用 uint64_t flags; uint8_t slots_start; uint8_t slots_end; uint8_t slot_gen_bits; uint8_t slot_id_bits; uint8_t slot_generation; uint8_t client_present; uint8_t client_capabilities[58]; uint32_t client_monitors_config_crc; struct { uint16_t count; uint16_t padding; QXLURect heads[64]; } client_monitors_config;
3
其他属性
31
QXLCursor
屏幕图像区域
image.descriptor
QXLCursorRing_ring_el
QXLCommand el
RAM(64MB)
SpiceBitmapFmt
m_RamPA
next_chunk
qxlcommnd
1
el
format;
QXLModes *
QXLCursorHeader header; uint32_t data_size; QXLDataChunk chunk;
VRAM(8M)
屏幕图像源数据
descriptor
CommondRing
QXLCmdType type
QXLCursorHeader
uint64_t unique; uint16_t type; uint16_t width; uint16_t height; uint16_t hot_spot_x; uint16_t hot_spot_y;
prev_chunk
data_size
QXLCopy
QXLPHYSICAL src_bitmap; // 图片数据,对应QXLImage结构体QXLRect src_area;uint16_t rop_descriptor;uint8_t scale_mode;QXLQMask mask;
指针指向第一个QXLDataChunk的地址
QXLImage
指针指向QXLCursorCmd的地址
uint32_t type
prod = 0cons = 0
src_bitmap
QXLCmdType
typedef enum QXLCmdType {font color=\"#323232\
QXL_DRAW_TYPE
QXL_CURSOR_TYPE
prod 大于等于32 ,对32取余即可得到索引位置 51%32 = 20, index的位置为20,实际qxl代码中嫌弃%运算效率太低,使用的&运算 51 & (32 - 1) = 20
IO PortIO Port Info [0000D040-0000D060]io_base [000000000000D040-000000000000D060]
MSPACE_TYPE_DEVRAM
uint32_t data_size; QXLPHYSICAL prev_chunk; QXLPHYSICAL next_chunk; uint8_t data[0]; // 鼠标图像的数据片段
m_VRamStart
5
m_RamStart
data(Bitmap图片数据)
data
32byte(CmResourceTypePort)
uint8_t type;
release_ring
DirtyRect[0]
QXLCursorRing
prod = 1cons = 1
QXL Device Mem
notify_on_prod = 2
Kernal Module
QXLRom
QXLCommand_ring_el
QXLReleaseRing
uint32_t num_items; uint32_t prod; uint32_t notify_on_prod; uint32_t cons; uint32_t notify_on_cons;QXLReleaseRing_ring_el items[8]
uint32_t typeQXLPHYSICAL data // 指令数据,对应QXLCursorCmd结构体
QXL Device VRAM内存
bitmap
CursorRing
Rom(8KB)
type
SpiceImageType
QXL Device
QXLCursorHeader header;
QXLReleaseInfo release_info;uint32_t surface_id;uint8_t effect;uint8_t type;uint8_t self_bitmap;QXLRect self_bitmap_area;QXLRect bbox;QXLClip clip; // 不使用uint32_t mm_time;int32_t surfaces_dest[3];QXLRect surfaces_rects[3];union u { QXLFill fill; QXLCopy copy; Other 未使用}
QXLCommandRing
uint32_t num_items; uint32_t prod; uint32_t notify_on_prod; uint32_t cons; uint32_t notify_on_cons;QXLCursorRing_ring_el items[32]
QXL Device ROM内存
m_RamHdr
QXLDrableable
QXLRam
uint8_t effect
pDirtyRect[0]
surface0_area_size(VGAMem)(16MB)
QXLBitmap
uint8_t format; // BMP数据格式,RGBA格式uint8_t flags; // 赋值为0,应该没有用uint32_t x; // 图像宽 uint32_t y; // 图像高 uint32_t stride; // 一行数据的大小,width * 4QXLPHYSICAL palette; // 赋值为0,未使用QXLPHYSICAL data; // 图像数据,使用链表按行存储
m_RomHdr
cmd_ring
QXL Device RAM内存
地址映射
IO Port映射
prod = 1notify_on_prod = 1
header
QXLCopy copy
IO port
QXLImageDescriptor descriptor; union { QXLBitmap bitmap; // 仅使用这个 QXLQUICData quic; QXLSurfaceId surface_image; };
m_IoBase
DirtyRect[1]
InternalImage
QXLPHYSICAL shape;
指针指向QXLDrawable的地址
notify_on_prod = 1
User Module
m_VRamPA
windows系统
uint32_t num_items; uint32_t prod; uint32_t notify_on_prod; uint32_t cons; uint32_t notify_on_cons;QXLCommand_ring_el items[32]
QXLImageDescriptor
uint64_t id; // 暂时没看懂 uint8_t type; // 图像类型,BMP类型 uint8_t flags; // 赋值为0,应该没有用 uint32_t width; // 图像宽 uint32_t height; // 图像高
uint32_t data_size; QXLPHYSICAL prev_chunk; QXLPHYSICAL next_chunk; uint8_t data[0]; // bmp图片一行的数据
数据传输
QXLDataChunk chunk;
QXLReleaseRing_ring_el
uint64_t el
pSource
u.set.shape
0 条评论
回复 删除
下一页