mirror of
https://github.com/NVIDIA/open-gpu-kernel-modules.git
synced 2026-02-25 17:33:58 +00:00
565.77
This commit is contained in:
@@ -125,6 +125,7 @@ void nvEvoHeadSetControlOR(NVDispEvoPtr pDispEvo,
|
||||
void nvChooseDitheringEvo(
|
||||
const NVConnectorEvoRec *pConnectorEvo,
|
||||
enum NvKmsDpyAttributeColorBpcValue bpc,
|
||||
enum NvKmsOutputColorimetry colorimetry,
|
||||
const NVDpyAttributeRequestedDitheringConfig *pReqDithering,
|
||||
NVDpyAttributeCurrentDitheringConfig *pCurrDithering);
|
||||
|
||||
|
||||
@@ -233,6 +233,7 @@ static void SetDitheringCommon(NVDpyEvoPtr pDpyEvo)
|
||||
|
||||
nvChooseDitheringEvo(pConnectorEvo,
|
||||
pApiHeadState->attributes.color.bpc,
|
||||
pApiHeadState->attributes.color.colorimetry,
|
||||
&pDpyEvo->requestedDithering,
|
||||
&pApiHeadState->attributes.dithering);
|
||||
|
||||
|
||||
@@ -2737,10 +2737,10 @@ void nvEnableMidFrameAndDWCFWatermark(NVDevEvoPtr pDevEvo,
|
||||
static enum NvKmsDpyAttributeColorBpcValue GetMinRequiredBpc(
|
||||
enum NvKmsOutputColorimetry colorimetry)
|
||||
{
|
||||
// 10 BPC required for HDR
|
||||
// >= 8 BPC required for HDR
|
||||
// XXX HDR TODO: Handle other colorimetries
|
||||
return (colorimetry == NVKMS_OUTPUT_COLORIMETRY_BT2100) ?
|
||||
NV_KMS_DPY_ATTRIBUTE_CURRENT_COLOR_BPC_10 :
|
||||
NV_KMS_DPY_ATTRIBUTE_CURRENT_COLOR_BPC_8 :
|
||||
NV_KMS_DPY_ATTRIBUTE_CURRENT_COLOR_BPC_6;
|
||||
}
|
||||
|
||||
@@ -3155,6 +3155,7 @@ static const struct {
|
||||
void nvChooseDitheringEvo(
|
||||
const NVConnectorEvoRec *pConnectorEvo,
|
||||
enum NvKmsDpyAttributeColorBpcValue bpc,
|
||||
enum NvKmsOutputColorimetry colorimetry,
|
||||
const NVDpyAttributeRequestedDitheringConfig *pReqDithering,
|
||||
NVDpyAttributeCurrentDitheringConfig *pCurrDithering)
|
||||
{
|
||||
@@ -3261,6 +3262,29 @@ void nvChooseDitheringEvo(
|
||||
}
|
||||
}
|
||||
|
||||
// XXX HDR TODO: Handle other colorimetries
|
||||
if ((colorimetry == NVKMS_OUTPUT_COLORIMETRY_BT2100) &&
|
||||
(pReqDithering->state !=
|
||||
NV_KMS_DPY_ATTRIBUTE_REQUESTED_DITHERING_DISABLED)) {
|
||||
|
||||
// GetMinRequiredBpc() enforces >= 8 BPC for HDR
|
||||
nvAssert(bpc >= 8);
|
||||
|
||||
/*
|
||||
* If output has BT.2100 (HDR10) colorimetry but fewer than 10 bits of
|
||||
* precision, dither to 8 BPC, or as requested.
|
||||
*/
|
||||
if (bpc < 10) {
|
||||
currDithering.enabled = TRUE;
|
||||
|
||||
if (pReqDithering->depth ==
|
||||
NV_KMS_DPY_ATTRIBUTE_REQUESTED_DITHERING_DEPTH_AUTO) {
|
||||
currDithering.depth =
|
||||
NV_KMS_DPY_ATTRIBUTE_CURRENT_DITHERING_DEPTH_8_BITS;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (currDithering.enabled) {
|
||||
switch (pReqDithering->mode) {
|
||||
case NV_KMS_DPY_ATTRIBUTE_REQUESTED_DITHERING_MODE_TEMPORAL:
|
||||
@@ -6828,7 +6852,8 @@ static NvBool GetDfpHdmiProtocol(const NVDpyEvoRec *pDpyEvo,
|
||||
nvDpyGetOutputColorFormatInfo(pDpyEvo);
|
||||
const NvBool forceHdmiFrlIsSupported = FALSE;
|
||||
|
||||
nvAssert(rmProtocol == NV0073_CTRL_SPECIFIC_OR_PROTOCOL_SOR_SINGLE_TMDS_A ||
|
||||
nvAssert(rmProtocol == NV0073_CTRL_SPECIFIC_OR_PROTOCOL_SOR_DUAL_TMDS ||
|
||||
rmProtocol == NV0073_CTRL_SPECIFIC_OR_PROTOCOL_SOR_SINGLE_TMDS_A ||
|
||||
rmProtocol == NV0073_CTRL_SPECIFIC_OR_PROTOCOL_SOR_SINGLE_TMDS_B);
|
||||
|
||||
/* Override protocol if this mode requires HDMI FRL. */
|
||||
@@ -6855,10 +6880,25 @@ static NvBool GetDfpHdmiProtocol(const NVDpyEvoRec *pDpyEvo,
|
||||
if (nvHdmiGetEffectivePixelClockKHz(pDpyEvo, pTimings, pDpyColor) <=
|
||||
pDpyEvo->maxSingleLinkPixelClockKHz) {
|
||||
|
||||
*pTimingsProtocol = (rmProtocol ==
|
||||
NV0073_CTRL_SPECIFIC_OR_PROTOCOL_SOR_SINGLE_TMDS_A) ?
|
||||
NVKMS_PROTOCOL_SOR_SINGLE_TMDS_A :
|
||||
NVKMS_PROTOCOL_SOR_SINGLE_TMDS_B;
|
||||
switch (rmProtocol) {
|
||||
case NV0073_CTRL_SPECIFIC_OR_PROTOCOL_SOR_DUAL_TMDS:
|
||||
/*
|
||||
* Force single link TMDS protocol. HDMI does not support
|
||||
* physically support dual link TMDS.
|
||||
*
|
||||
* TMDS_A: "use A side of the link"
|
||||
*/
|
||||
*pTimingsProtocol = NVKMS_PROTOCOL_SOR_SINGLE_TMDS_A;
|
||||
break;
|
||||
case NV0073_CTRL_SPECIFIC_OR_PROTOCOL_SOR_SINGLE_TMDS_A:
|
||||
*pTimingsProtocol = NVKMS_PROTOCOL_SOR_SINGLE_TMDS_A;
|
||||
break;
|
||||
case NV0073_CTRL_SPECIFIC_OR_PROTOCOL_SOR_SINGLE_TMDS_B:
|
||||
*pTimingsProtocol = NVKMS_PROTOCOL_SOR_SINGLE_TMDS_B;
|
||||
break;
|
||||
default:
|
||||
return FALSE;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
} while (nvDowngradeColorSpaceAndBpc(pDpyEvo,
|
||||
|
||||
@@ -2061,6 +2061,7 @@ ValidateProposedModeSetHwStateOneDisp(
|
||||
|
||||
nvChooseDitheringEvo(pDpyEvo->pConnectorEvo,
|
||||
pProposedApiHead->attributes.color.bpc,
|
||||
pProposedApiHead->attributes.color.colorimetry,
|
||||
&pDpyEvo->requestedDithering,
|
||||
&pProposedApiHead->attributes.dithering);
|
||||
}
|
||||
|
||||
@@ -4645,6 +4645,11 @@ static NvBool NotifyVblank(
|
||||
struct NvKmsPerOpenDisp* pOpenDisp =
|
||||
GetPerOpenDisp(pOpen, pParams->request.deviceHandle,
|
||||
pParams->request.dispHandle);
|
||||
|
||||
if (pOpenDisp == NULL) {
|
||||
return NV_FALSE;
|
||||
}
|
||||
|
||||
const NvU32 apiHead = pParams->request.head;
|
||||
|
||||
pEventOpenFd = nvkms_get_per_open_data(pParams->request.unicastEvent.fd);
|
||||
@@ -5219,8 +5224,8 @@ void nvKmsClose(void *pOpenVoid)
|
||||
|
||||
|
||||
/*
|
||||
Frees all references to a device
|
||||
*/
|
||||
*Frees all references to a device
|
||||
*/
|
||||
void nvRevokeDevice(NVDevEvoPtr pDevEvo)
|
||||
{
|
||||
if (pDevEvo == NULL) {
|
||||
@@ -5229,7 +5234,7 @@ void nvRevokeDevice(NVDevEvoPtr pDevEvo)
|
||||
|
||||
struct NvKmsPerOpen *pOpen;
|
||||
|
||||
nvListForEachEntry(pOpen, &perOpenIoctlList, perOpenListEntry) {
|
||||
nvListForEachEntry(pOpen, &perOpenIoctlList, perOpenIoctlListEntry) {
|
||||
struct NvKmsPerOpenDev *pOpenDev = DevEvoToOpenDev(pOpen, pDevEvo);
|
||||
if (pOpenDev == NULL) {
|
||||
continue;
|
||||
|
||||
Reference in New Issue
Block a user