publish adding a new resolution

This commit is contained in:
Vadim Rozenfeld 2015-02-18 20:57:00 +11:00
parent 170be1696a
commit 7693d4153c
3 changed files with 43 additions and 24 deletions

View File

@ -218,7 +218,7 @@ NTSTATUS QxlDod::DispatchIoRequest(_In_ ULONG VidPnSourceId,
UNREFERENCED_PARAMETER(VidPnSourceId); UNREFERENCED_PARAMETER(VidPnSourceId);
UNREFERENCED_PARAMETER(pVideoRequestPacket); UNREFERENCED_PARAMETER(pVideoRequestPacket);
DbgPrint(TRACE_LEVEL_FATAL, ("---> %s\n", __FUNCTION__)); DbgPrint(TRACE_LEVEL_VERBOSE, ("---> %s\n", __FUNCTION__));
return STATUS_SUCCESS; return STATUS_SUCCESS;
} }
@ -457,11 +457,27 @@ NTSTATUS QxlDod::SetPointerShape(_In_ CONST DXGKARG_SETPOINTERSHAPE* pSetPointer
NTSTATUS QxlDod::Escape(_In_ CONST DXGKARG_ESCAPE* pEscape) NTSTATUS QxlDod::Escape(_In_ CONST DXGKARG_ESCAPE* pEscape)
{ {
PAGED_CODE(); PAGED_CODE();
NTSTATUS Status = STATUS_SUCCESS;
QXL_ASSERT(pEscape != NULL); QXL_ASSERT(pEscape != NULL);
DbgPrint(TRACE_LEVEL_FATAL, ("<---> %s Flags = %d\n", __FUNCTION__, pEscape->Flags)); DbgPrint(TRACE_LEVEL_VERBOSE, ("<---> %s Flags = %d\n", __FUNCTION__, pEscape->Flags));
return m_pHWDevice->Escape(pEscape); Status = m_pHWDevice->Escape(pEscape);
if (Status == STATUS_SUCCESS)
{
DXGK_CHILD_STATUS ChildStatus;
ChildStatus.Type = StatusConnection;
ChildStatus.ChildUid = 0;
ChildStatus.HotPlug.Connected = FALSE;
Status = m_DxgkInterface.DxgkCbIndicateChildStatus(m_DxgkInterface.DeviceHandle, &ChildStatus);
if (Status == STATUS_SUCCESS)
{
ChildStatus.HotPlug.Connected = TRUE;
Status = m_DxgkInterface.DxgkCbIndicateChildStatus(m_DxgkInterface.DeviceHandle, &ChildStatus);
}
}
DbgPrint(TRACE_LEVEL_VERBOSE, ("<---> %s Status = %x\n", __FUNCTION__, Status));
return Status;
} }
@ -2473,7 +2489,7 @@ NTSTATUS VgaDevice::GetModeList(DXGK_DISPLAY_INFORMATION* pDispInfo)
DbgPrint(TRACE_LEVEL_INFORMATION, ("ModeCount filtered %d\n", m_ModeCount)); DbgPrint(TRACE_LEVEL_INFORMATION, ("ModeCount filtered %d\n", m_ModeCount));
for (ULONG idx = 0; idx < m_ModeCount; idx++) for (ULONG idx = 0; idx < m_ModeCount; idx++)
{ {
DbgPrint(TRACE_LEVEL_ERROR, ("type %x, XRes = %d, YRes = %d, BPP = %d\n", DbgPrint(TRACE_LEVEL_INFORMATION, ("type %x, XRes = %d, YRes = %d, BPP = %d\n",
m_ModeNumbers[idx], m_ModeNumbers[idx],
m_ModeInfo[idx].VisScreenWidth, m_ModeInfo[idx].VisScreenWidth,
m_ModeInfo[idx].VisScreenHeight, m_ModeInfo[idx].VisScreenHeight,
@ -2926,15 +2942,13 @@ BOOL QxlDevice::SetVideoModeInfo(UINT Idx, QXLMode* pModeInfo)
return TRUE; return TRUE;
} }
BOOL QxlDevice::UpdateVideoModeInfo(UINT Idx, UINT xres, UINT yres, UINT bpp) void QxlDevice::UpdateVideoModeInfo(UINT Idx, UINT xres, UINT yres, UINT bpp)
{ {
PVIDEO_MODE_INFORMATION pMode = NULL; PVIDEO_MODE_INFORMATION pMode = NULL;
UINT bytes_pp = (bpp + 7) / 8; UINT bytes_pp = (bpp + 7) / 8;
ULONG color_bits; ULONG color_bits;
PAGED_CODE(); PAGED_CODE();
if (xres < MIN_WIDTH_SIZE || yres < MIN_HEIGHT_SIZE || bpp != 32)
return FALSE;
pMode = &m_ModeInfo[Idx]; pMode = &m_ModeInfo[Idx];
pMode->VisScreenWidth = xres; pMode->VisScreenWidth = xres;
pMode->VisScreenHeight = yres; pMode->VisScreenHeight = yres;
@ -2948,7 +2962,6 @@ BOOL QxlDevice::UpdateVideoModeInfo(UINT Idx, UINT xres, UINT yres, UINT bpp)
pMode->BlueMask = (1 << color_bits) - 1; pMode->BlueMask = (1 << color_bits) - 1;
pMode->GreenMask = pMode->BlueMask << color_bits; pMode->GreenMask = pMode->BlueMask << color_bits;
pMode->RedMask = pMode->GreenMask << color_bits; pMode->RedMask = pMode->GreenMask << color_bits;
return TRUE;
} }
NTSTATUS QxlDevice::GetModeList(DXGK_DISPLAY_INFORMATION* pDispInfo) NTSTATUS QxlDevice::GetModeList(DXGK_DISPLAY_INFORMATION* pDispInfo)
@ -2969,7 +2982,7 @@ NTSTATUS QxlDevice::GetModeList(DXGK_DISPLAY_INFORMATION* pDispInfo)
return STATUS_UNSUCCESSFUL; return STATUS_UNSUCCESSFUL;
} }
DbgPrint(TRACE_LEVEL_ERROR, ("%s: ModeCount = %d\n", __FUNCTION__, ModeCount)); DbgPrint(TRACE_LEVEL_INFORMATION, ("%s: ModeCount = %d\n", __FUNCTION__, ModeCount));
ModeCount += 2; ModeCount += 2;
m_ModeInfo = reinterpret_cast<PVIDEO_MODE_INFORMATION> (new (PagedPool) BYTE[sizeof (VIDEO_MODE_INFORMATION) * ModeCount]); m_ModeInfo = reinterpret_cast<PVIDEO_MODE_INFORMATION> (new (PagedPool) BYTE[sizeof (VIDEO_MODE_INFORMATION) * ModeCount]);
@ -2986,11 +2999,11 @@ NTSTATUS QxlDevice::GetModeList(DXGK_DISPLAY_INFORMATION* pDispInfo)
QXLMode* tmpModeInfo = &modes->modes[CurrentMode]; QXLMode* tmpModeInfo = &modes->modes[CurrentMode];
DbgPrint(TRACE_LEVEL_ERROR, ("%s: modes[%d] x_res = %d, y_res = %d, bits = %d BitsPerPixel = %d\n", __FUNCTION__, CurrentMode, tmpModeInfo->x_res, tmpModeInfo->y_res, tmpModeInfo->bits, BitsPerPixel)); DbgPrint(TRACE_LEVEL_INFORMATION, ("%s: modes[%d] x_res = %d, y_res = %d, bits = %d BitsPerPixel = %d\n", __FUNCTION__, CurrentMode, tmpModeInfo->x_res, tmpModeInfo->y_res, tmpModeInfo->bits, BitsPerPixel));
if (tmpModeInfo->x_res >= Width && if (tmpModeInfo->x_res >= Width &&
tmpModeInfo->y_res >= Height && tmpModeInfo->y_res >= Height &&
tmpModeInfo->bits == 32) tmpModeInfo->bits == QXL_BPP)
{ {
m_ModeNumbers[SuitableModeCount] = SuitableModeCount;//CurrentMode; m_ModeNumbers[SuitableModeCount] = SuitableModeCount;//CurrentMode;
SetVideoModeInfo(SuitableModeCount, tmpModeInfo); SetVideoModeInfo(SuitableModeCount, tmpModeInfo);
@ -3019,10 +3032,10 @@ NTSTATUS QxlDevice::GetModeList(DXGK_DISPLAY_INFORMATION* pDispInfo)
memcpy(&m_ModeInfo[CurrentMode], &m_ModeInfo[m_CurrentMode], sizeof(VIDEO_MODE_INFORMATION)); memcpy(&m_ModeInfo[CurrentMode], &m_ModeInfo[m_CurrentMode], sizeof(VIDEO_MODE_INFORMATION));
} }
m_ModeCount = SuitableModeCount + 2; m_ModeCount = SuitableModeCount + 2;
DbgPrint(TRACE_LEVEL_ERROR, ("ModeCount filtered %d\n", m_ModeCount)); DbgPrint(TRACE_LEVEL_INFORMATION, ("ModeCount filtered %d\n", m_ModeCount));
for (ULONG idx = 0; idx < GetModeCount(); idx++) for (ULONG idx = 0; idx < GetModeCount(); idx++)
{ {
DbgPrint(TRACE_LEVEL_ERROR, ("type %x, XRes = %d, YRes = %d, BPP = %d\n", DbgPrint(TRACE_LEVEL_INFORMATION, ("type %x, XRes = %d, YRes = %d, BPP = %d\n",
m_ModeNumbers[idx], m_ModeNumbers[idx],
m_ModeInfo[idx].VisScreenWidth, m_ModeInfo[idx].VisScreenWidth,
m_ModeInfo[idx].VisScreenHeight, m_ModeInfo[idx].VisScreenHeight,
@ -4394,8 +4407,16 @@ NTSTATUS QxlDevice::Escape(_In_ CONST DXGKARG_ESCAPE* pEscap)
xres = custom_display->xres; xres = custom_display->xres;
yres = custom_display->yres; yres = custom_display->yres;
bpp = custom_display->bpp; bpp = custom_display->bpp;
if (bpp != QXL_BPP)
{
bpp = QXL_BPP;
}
if (xres < MIN_WIDTH_SIZE || yres < MIN_HEIGHT_SIZE)
{
DbgPrint(TRACE_LEVEL_FATAL, ("%s: xres = %d, yres = %d\n", __FUNCTION__, xres, yres));
return ERROR_INVALID_DATA;
}
/* alternate custom mode index */
if (m_CustomMode == (m_ModeCount - 1)) if (m_CustomMode == (m_ModeCount - 1))
m_CustomMode = (USHORT)(m_ModeCount - 2); m_CustomMode = (USHORT)(m_ModeCount - 2);
else else
@ -4406,12 +4427,9 @@ NTSTATUS QxlDevice::Escape(_In_ CONST DXGKARG_ESCAPE* pEscap)
__FUNCTION__, xres, yres, bpp, m_RomHdr->surface0_area_size)); __FUNCTION__, xres, yres, bpp, m_RomHdr->surface0_area_size));
return ERROR_NOT_ENOUGH_MEMORY; return ERROR_NOT_ENOUGH_MEMORY;
} }
if (!UpdateVideoModeInfo(m_CustomMode, xres, yres, bpp)) { UpdateVideoModeInfo(m_CustomMode, xres, yres, bpp);
return ERROR_INVALID_DATA;
}
DbgPrint(TRACE_LEVEL_FATAL, ("<--> %s xres %d yres %d bpp %d\n", __FUNCTION__, xres, yres, bpp));
DbgPrint(TRACE_LEVEL_VERBOSE, ("<--- %s\n", __FUNCTION__)); DbgPrint(TRACE_LEVEL_VERBOSE, ("<--- %s\n", __FUNCTION__));
return STATUS_SUCCESS;// SetCurrentMode(m_CustomMode); return STATUS_SUCCESS;
} }
VOID QxlDevice::WaitForCmdRing() VOID QxlDevice::WaitForCmdRing()
@ -4516,15 +4534,15 @@ VOID QxlDevice::DpcRoutine(PVOID ptr)
ASSERT(Status == STATUS_SUCCESS); ASSERT(Status == STATUS_SUCCESS);
if (ctx.data & QXL_INTERRUPT_DISPLAY) { if (ctx.data & QXL_INTERRUPT_DISPLAY) {
DbgPrint(TRACE_LEVEL_FATAL, ("---> %s m_DisplayEvent\n", __FUNCTION__)); DbgPrint(TRACE_LEVEL_INFORMATION, ("---> %s m_DisplayEvent\n", __FUNCTION__));
KeSetEvent (&m_DisplayEvent, IO_NO_INCREMENT, FALSE); KeSetEvent (&m_DisplayEvent, IO_NO_INCREMENT, FALSE);
} }
if (ctx.data & QXL_INTERRUPT_CURSOR) { if (ctx.data & QXL_INTERRUPT_CURSOR) {
DbgPrint(TRACE_LEVEL_FATAL, ("---> %s m_CursorEvent\n", __FUNCTION__)); DbgPrint(TRACE_LEVEL_INFORMATION, ("---> %s m_CursorEvent\n", __FUNCTION__));
KeSetEvent (&m_CursorEvent, IO_NO_INCREMENT, FALSE); KeSetEvent (&m_CursorEvent, IO_NO_INCREMENT, FALSE);
} }
if (ctx.data & QXL_INTERRUPT_IO_CMD) { if (ctx.data & QXL_INTERRUPT_IO_CMD) {
DbgPrint(TRACE_LEVEL_FATAL, ("---> %s m_IoCmdEvent\n", __FUNCTION__)); DbgPrint(TRACE_LEVEL_INFORMATION, ("---> %s m_IoCmdEvent\n", __FUNCTION__));
KeSetEvent (&m_IoCmdEvent, IO_NO_INCREMENT, FALSE); KeSetEvent (&m_IoCmdEvent, IO_NO_INCREMENT, FALSE);
} }
m_RamHdr->int_mask = QXL_INTERRUPT_MASK; m_RamHdr->int_mask = QXL_INTERRUPT_MASK;

View File

@ -10,6 +10,7 @@
#define POINTER_SIZE 64 #define POINTER_SIZE 64
#define MIN_WIDTH_SIZE 1024 #define MIN_WIDTH_SIZE 1024
#define MIN_HEIGHT_SIZE 768 #define MIN_HEIGHT_SIZE 768
#define QXL_BPP 32
typedef struct _QXL_FLAGS typedef struct _QXL_FLAGS
{ {
@ -471,7 +472,7 @@ private:
void QxlClose(void); void QxlClose(void);
void UnmapMemory(void); void UnmapMemory(void);
BOOL SetVideoModeInfo(UINT Idx, QXLMode* pModeInfo); BOOL SetVideoModeInfo(UINT Idx, QXLMode* pModeInfo);
BOOL UpdateVideoModeInfo(UINT Idx, UINT xres, UINT yres, UINT bpp); void UpdateVideoModeInfo(UINT Idx, UINT xres, UINT yres, UINT bpp);
BOOL InitMemSlots(void); BOOL InitMemSlots(void);
BOOL CreateMemSlots(void); BOOL CreateMemSlots(void);
void DestroyMemSlots(void); void DestroyMemSlots(void);

View File

@ -465,7 +465,7 @@ DodEnumVidPnCofuncModality(
{ {
PAGED_CODE(); PAGED_CODE();
QXL_ASSERT_CHK(hAdapter != NULL); QXL_ASSERT_CHK(hAdapter != NULL);
DbgPrint(TRACE_LEVEL_FATAL, ("<---> %s\n", __FUNCTION__)); DbgPrint(TRACE_LEVEL_VERBOSE, ("<---> %s\n", __FUNCTION__));
QxlDod* pQxl = reinterpret_cast<QxlDod*>(hAdapter); QxlDod* pQxl = reinterpret_cast<QxlDod*>(hAdapter);
if (!pQxl->IsDriverActive()) if (!pQxl->IsDriverActive())