Assigning Precedence to Protection Levels

A precedence value is assigned to each protection level for each protection type. This way, a physical output can determine which protection level to use if two or more protected outputs are associated with the physical output and each protected output has a different protection level.

The Microsoft DirectX graphics kernel subsystem (Dxgkrnl.sys) can make more than one call to a display miniport driver's DxgkDdiOPMCreateProtectedOutput function to create more than one protected output for a particular physical output. Furthermore, each of these protected outputs can have a different protection level for the same output protection type.

For example, suppose that a graphics adapter has one composite output that has the CGMS-A protection type, and that protected outputs A and B are both associated with that composite output. Next, suppose that protected output A's CGMS-A protection level is set to DXGKMDT_OPM_CGMSA_COPY_NO_MORE while protected output B's CGMS-A protection level is set to DXGKMDT_OPM_CGMSA_COPY_ONE_GENERATION. In this situation, the physical output cannot use both protection levels. Therefore, because the physical output can output only one CGMS-A protection level at a time, the physical output must use the CGMS-A protection level with the higher precedence.

The following sections show which protection level a physical output should use (from highest to lowest precedence) when different protected outputs instruct the physical output to use different protection levels. Note that these tables apply to protected outputs with COPP or OPM semantics.

ACP Protection Level Precedence

When different protected outputs instruct the physical output to use different ACP protection levels, the physical output should use the protection level with the higher precedence as shown in the following table. Note that this table applies to protected outputs with COPP semantics.

ACP protection level value Precedence

DXGKMDT_OPM_ACP_OFF (0)

Lowest precedence (0)

DXGKMDT_OPM_ACP_LEVEL_ONE (1)

1

DXGKMDT_OPM_ACP_LEVEL_THREE (3)

2

DXGKMDT_OPM_ACP_LEVEL_TWO (2)

Highest precedence (3)

CGMS-A Protection Level Precedence

When different protected outputs instruct the physical output to use different CGMS-A protection levels, the physical output should use the protection level with the higher precedence as shown in the following table. Note that this table applies to protected outputs with COPP semantics.

CGMS-A protection level value Precedence

DXGKMDT_OPM_CGMSA_OFF (0)

Lowest precedence (0)

DXGKMDT_OPM_CGMSA_COPY_FREELY (1)

1

DXGKMDT_OPM_CGMSA_COPY_ONE_GENERATION (3)

2

DXGKMDT_OPM_CGMSA_COPY_NO_MORE (2)

3

DXGKMDT_OPM_CGMSA_COPY_NEVER (4)

Highest precedence (4)

Note   The redistribution control flag (DXGKMDT_OPM_REDISTRIBUTION_CONTROL_REQUIRED) does not affect the CGMS-A precedence value. For example, (DXGKMDT_OPM_CGMSA_COPY_ONE_GENERATION | DXGKMDT_OPM_REDISTRIBUTION_CONTROL_REQUIRED) has the same precedence value as DXGKMDT_OPM_CGMSA_COPY_ONE_GENERATION.

HDCP Protection Level Precedence

When different protected outputs instruct the physical output to use different HDCP protection levels, the physical output should use the protection level with the higher precedence as shown in the following table. Note that this table applies to protected outputs with COPP or OPM semantics.

HDCP protection level value Precedence

DXGKMDT_OPM_HDCP_OFF (0)

Lowest precedence (0)

DXGKMDT_OPM_HDCP_ON (1)

Highest precedence (1)

DPCP Protection Level Precedence

When different protected outputs instruct the physical output to use different DPCP protection levels, the physical output should use the protection level with the higher precedence as shown in the following table. Note that this table applies to protected outputs with OPM semantics.

DPCP protection level value Precedence

DXGKMDT_OPM_DPCP_OFF (0)

Lowest precedence (0)

DXGKMDT_OPM_DPCP_ON (1)

Highest precedence (1)