Edit

kc3-lang/angle/src/third_party/libXNVCtrl/nv_control.h

Branch :

  • Show log

    Commit

  • Author : Corentin Wallez
    Date : 2016-02-29 16:37:04
    Hash : cc068e93
    Message : Add DisplayGL::getDriverVersion and implementation on Linux NVIDIA Some GPU driver bug workarounds should be active only for specific driver version ranges. This adds NVIDIA Linux driver detection using the XNVCtrl X11 extension. BUG=590870 Change-Id: I8cbf692a0c8a6da7473169f29d720bdc2d07663d Reviewed-on: https://chromium-review.googlesource.com/329637 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Corentin Wallez <cwallez@chromium.org>

  • src/third_party/libXNVCtrl/nv_control.h
  • /*
     * Copyright (c) 2008 NVIDIA, Corporation
     *
     * Permission is hereby granted, free of charge, to any person obtaining a copy
     * of this software and associated documentation files (the "Software"), to deal
     * in the Software without restriction, including without limitation the rights
     * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
     * copies of the Software, and to permit persons to whom the Software is
     * furnished to do so, subject to the following conditions:
     *
     * The above copyright notice and this permission notice (including the next
     * paragraph) shall be included in all copies or substantial portions of the
     * Software.
     *
     * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
     * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
     * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
     * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
     * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
     * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
     * SOFTWARE.
     *
     *
     * NV-CONTROL Protocol Version History
     *
     * 1.0 - 1.5   NVIDIA Internal development versions
     * 1.6         Initial public version
     * 1.7         Added QueryBinaryData request
     * 1.8         Added TargetTypes
     * 1.9         Added QueryTargetCount request
     * 1.10        Fixed target type/id byte ordering for compatibility with
     *             pre-1.8 NV-CONTROL clients
     * 1.11        NVIDIA Internal development version
     * 1.12        Added StringOperation request
     * 1.13        NVIDIA Internal development version
     * 1.14        Fixed an NV_CTRL_BINARY_DATA_MODELINES double scan modeline
     *             reporting bug (vsyncstart, vsyncend, and vtotal were incorrectly
     *             doubled)
     * 1.15        Added AVAILABILITY_TARGET_ATTRIBUTE_CHANGED_EVENT
     * 1.16        Added TARGET_STRING_ATTRIBUTE_CHANGED_EVENT
     * 1.17        Added TARGET_BINARY_ATTRIBUTE_CHANGED_EVENT
     * 1.18        Updated QueryTargetCount to return a count of 0, rather than
     *             BadMatch, if an unknown TargetType is specified
     * 1.19        Added TargetType support for SetAttributeAndGetStatus and
     *             SetStringAttribute requests
     * 1.20        Added COOLER TargetType
     * 1.21        Added initial 64-bit integer attribute support (read-only)
     * 1.22        Added X_nvCtrlQueryValidStringAttributeValues to check
     *             string attribute permissions.
     * 1.23        Added SENSOR TargetType
     * 1.24        Fixed a bug where SLI_MOSAIC_MODE_AVAILABLE attribute would
     *             report false positives via the GPU and X screen target types
     * 1.25        Added 3D_VISION_PRO_TRANSCEIVER TargetType
     * 1.26        Added XNVCTRLQueryXXXAttributePermissions.
     * 1.27        Added DISPLAY TargetType
     * 1.28        Added NV_CTRL_CURRENT_METAMODE_ID: clients should use this
     *             attribute to switch MetaModes, rather than pass the MetaMode ID
     *             through the RRSetScreenConfig protocol request.
     */
    
    #ifndef __NVCONTROL_H
    #define __NVCONTROL_H
    
    #define NV_CONTROL_ERRORS 0
    #define NV_CONTROL_EVENTS 5
    #define NV_CONTROL_NAME "NV-CONTROL"
    
    #define NV_CONTROL_MAJOR 1
    #define NV_CONTROL_MINOR 28
    
    #define X_nvCtrlQueryExtension 0
    #define X_nvCtrlIsNv 1
    #define X_nvCtrlQueryAttribute 2
    #define X_nvCtrlSetAttribute 3
    #define X_nvCtrlQueryStringAttribute 4
    #define X_nvCtrlQueryValidAttributeValues 5
    #define X_nvCtrlSelectNotify 6
    #define X_nvCtrlSetGvoColorConversionDeprecated 7
    #define X_nvCtrlQueryGvoColorConversionDeprecated 8
    #define X_nvCtrlSetStringAttribute 9
    /* STUB X_nvCtrlQueryDDCCILutSize                   10 */
    /* STUB X_nvCtrlQueryDDCCISinglePointLutOperation   11 */
    /* STUB X_nvCtrlSetDDCCISinglePointLutOperation     12 */
    /* STUB X_nvCtrlQueryDDCCIBlockLutOperation         13 */
    /* STUB X_nvCtrlSetDDCCIBlockLutOperation           14 */
    /* STUB X_nvCtrlSetDDCCIRemoteProcedureCall         15 */
    /* STUB X_nvCtrlQueryDDCCIDisplayControllerType     16 */
    /* STUB X_nvCtrlQueryDDCCICapabilities              17 */
    /* STUB X_nvCtrlQueryDDCCITimingReport              18 */
    #define X_nvCtrlSetAttributeAndGetStatus 19
    #define X_nvCtrlQueryBinaryData 20
    #define X_nvCtrlSetGvoColorConversion 21
    #define X_nvCtrlQueryGvoColorConversion 22
    #define X_nvCtrlSelectTargetNotify 23
    #define X_nvCtrlQueryTargetCount 24
    #define X_nvCtrlStringOperation 25
    #define X_nvCtrlQueryValidAttributeValues64 26
    #define X_nvCtrlQueryAttribute64 27
    #define X_nvCtrlQueryValidStringAttributeValues 28
    #define X_nvCtrlQueryAttributePermissions 29
    #define X_nvCtrlQueryStringAttributePermissions 30
    #define X_nvCtrlQueryBinaryDataAttributePermissions 31
    #define X_nvCtrlQueryStringOperationAttributePermissions 32
    
    #define X_nvCtrlLastRequest (X_nvCtrlQueryStringOperationAttributePermissions + 1)
    
    /* Define 32 bit floats */
    typedef float FLOAT32;
    #ifndef F32
    #define F32
    #endif
    
    typedef struct
    {
        CARD8 reqType;
        CARD8 nvReqType;
        CARD16 length B16;
    } xnvCtrlQueryExtensionReq;
    #define sz_xnvCtrlQueryExtensionReq 4
    
    typedef struct
    {
        BYTE type; /* X_Reply */
        CARD8 padb1;
        CARD16 sequenceNumber B16;
        CARD32 length B32;
        CARD16 major B16;
        CARD16 minor B16;
        CARD32 padl4 B32;
        CARD32 padl5 B32;
        CARD32 padl6 B32;
        CARD32 padl7 B32;
        CARD32 padl8 B32;
    } xnvCtrlQueryExtensionReply;
    #define sz_xnvCtrlQueryExtensionReply 32
    
    typedef struct
    {
        CARD8 reqType;
        CARD8 nvReqType;
        CARD16 length B16;
        CARD32 screen B32;
    } xnvCtrlIsNvReq;
    #define sz_xnvCtrlIsNvReq 8
    
    typedef struct
    {
        BYTE type; /* X_Reply */
        CARD8 padb1;
        CARD16 sequenceNumber B16;
        CARD32 length B32;
        CARD32 isnv B32;
        CARD32 padl4 B32;
        CARD32 padl5 B32;
        CARD32 padl6 B32;
        CARD32 padl7 B32;
        CARD32 padl8 B32;
    } xnvCtrlIsNvReply;
    #define sz_xnvCtrlIsNvReply 32
    
    typedef struct
    {
        CARD8 reqType;
        CARD8 nvReqType;
        CARD16 length B16;
        CARD32 target_type B32;
    } xnvCtrlQueryTargetCountReq;
    #define sz_xnvCtrlQueryTargetCountReq 8
    
    typedef struct
    {
        BYTE type; /* X_Reply */
        CARD8 padb1;
        CARD16 sequenceNumber B16;
        CARD32 length B32;
        CARD32 count B32;
        CARD32 padl4 B32;
        CARD32 padl5 B32;
        CARD32 padl6 B32;
        CARD32 padl7 B32;
        CARD32 padl8 B32;
    } xnvCtrlQueryTargetCountReply;
    #define sz_xnvCtrlQueryTargetCountReply 32
    
    typedef struct
    {
        CARD8 reqType;
        CARD8 nvReqType;
        CARD16 length B16;
        CARD16 target_id B16;   /* X screen number or GPU number */
        CARD16 target_type B16; /* X screen or GPU */
        CARD32 display_mask B32;
        CARD32 attribute B32;
    } xnvCtrlQueryAttributeReq;
    #define sz_xnvCtrlQueryAttributeReq 16
    
    typedef struct
    {
        BYTE type;
        BYTE pad0;
        CARD16 sequenceNumber B16;
        CARD32 length B32;
        CARD32 flags B32;
        INT32 value B32;
        CARD32 pad4 B32;
        CARD32 pad5 B32;
        CARD32 pad6 B32;
        CARD32 pad7 B32;
    } xnvCtrlQueryAttributeReply;
    #define sz_xnvCtrlQueryAttributeReply 32
    
    typedef struct
    {
        BYTE type;
        BYTE pad0;
        CARD16 sequenceNumber B16;
        CARD32 length B32;
        CARD32 flags B32;
        CARD32 pad3 B32;
        int64_t value_64;
        CARD32 pad6 B32;
        CARD32 pad7 B32;
    } xnvCtrlQueryAttribute64Reply;
    #define sz_xnvCtrlQueryAttribute64Reply 32
    
    typedef struct
    {
        CARD8 reqType;
        CARD8 nvReqType;
        CARD16 length B16;
        CARD16 target_id B16;
        CARD16 target_type B16;
        CARD32 display_mask B32;
        CARD32 attribute B32;
        INT32 value B32;
    } xnvCtrlSetAttributeReq;
    #define sz_xnvCtrlSetAttributeReq 20
    
    typedef struct
    {
        CARD8 reqType;
        CARD8 nvReqType;
        CARD16 length B16;
        CARD16 target_id B16;
        CARD16 target_type B16;
        CARD32 display_mask B32;
        CARD32 attribute B32;
        INT32 value B32;
    } xnvCtrlSetAttributeAndGetStatusReq;
    #define sz_xnvCtrlSetAttributeAndGetStatusReq 20
    
    typedef struct
    {
        BYTE type;
        BYTE pad0;
        CARD16 sequenceNumber B16;
        CARD32 length B32;
        CARD32 flags B32;
        CARD32 pad3 B32;
        CARD32 pad4 B32;
        CARD32 pad5 B32;
        CARD32 pad6 B32;
        CARD32 pad7 B32;
    } xnvCtrlSetAttributeAndGetStatusReply;
    #define sz_xnvCtrlSetAttributeAndGetStatusReply 32
    
    typedef struct
    {
        CARD8 reqType;
        CARD8 nvReqType;
        CARD16 length B16;
        CARD16 target_id B16;   /* X screen number or GPU number */
        CARD16 target_type B16; /* X screen or GPU */
        CARD32 display_mask B32;
        CARD32 attribute B32;
    } xnvCtrlQueryStringAttributeReq;
    #define sz_xnvCtrlQueryStringAttributeReq 16
    
    typedef struct
    {
        BYTE type;
        BYTE pad0;
        CARD16 sequenceNumber B16;
        CARD32 length B32;
        CARD32 flags B32;
        CARD32 n B32; /* Length of string */
        CARD32 pad4 B32;
        CARD32 pad5 B32;
        CARD32 pad6 B32;
        CARD32 pad7 B32;
    } xnvCtrlQueryStringAttributeReply;
    #define sz_xnvCtrlQueryStringAttributeReply 32
    
    typedef struct
    {
        CARD8 reqType;
        CARD8 nvReqType;
        CARD16 length B16;
        CARD16 target_id B16;
        CARD16 target_type B16;
        CARD32 display_mask B32;
        CARD32 attribute B32;
        CARD32 num_bytes B32;
    } xnvCtrlSetStringAttributeReq;
    #define sz_xnvCtrlSetStringAttributeReq 20
    
    typedef struct
    {
        BYTE type;
        BYTE pad0;
        CARD16 sequenceNumber B16;
        CARD32 length B32;
        CARD32 flags B32;
        CARD32 pad3 B32;
        CARD32 pad4 B32;
        CARD32 pad5 B32;
        CARD32 pad6 B32;
        CARD32 pad7 B32;
    } xnvCtrlSetStringAttributeReply;
    #define sz_xnvCtrlSetStringAttributeReply 32
    
    typedef struct
    {
        CARD8 reqType;
        CARD8 nvReqType;
        CARD16 length B16;
        CARD16 target_id B16;   /* X screen number or GPU number */
        CARD16 target_type B16; /* X screen or GPU */
        CARD32 display_mask B32;
        CARD32 attribute B32;
    } xnvCtrlQueryValidAttributeValuesReq;
    #define sz_xnvCtrlQueryValidAttributeValuesReq 16
    
    typedef struct
    {
        BYTE type;
        BYTE pad0;
        CARD16 sequenceNumber B16;
        CARD32 length B32;
        CARD32 flags B32;
        INT32 attr_type B32;
        INT32 min B32;
        INT32 max B32;
        CARD32 bits B32;
        CARD32 perms B32;
    } xnvCtrlQueryValidAttributeValuesReply;
    #define sz_xnvCtrlQueryValidAttributeValuesReply 32
    
    typedef struct
    {
        BYTE type;
        BYTE pad0;
        CARD16 sequenceNumber B16;
        CARD32 length B32;
        CARD32 flags B32;
        INT32 attr_type B32;
        int64_t min_64;
        int64_t max_64;
        CARD64 bits_64;
        CARD32 perms B32;
        CARD32 pad1 B32;
    } xnvCtrlQueryValidAttributeValues64Reply;
    #define sz_xnvCtrlQueryValidAttributeValues64Reply 48
    #define sz_xnvCtrlQueryValidAttributeValues64Reply_extra ((48 - 32) >> 2)
    
    typedef struct
    {
        CARD8 reqType;
        CARD8 nvReqType;
        CARD16 length B16;
        CARD32 attribute B32;
    } xnvCtrlQueryAttributePermissionsReq;
    #define sz_xnvCtrlQueryAttributePermissionsReq 8
    
    typedef struct
    {
        BYTE type;
        BYTE pad0;
        CARD16 sequenceNumber B16;
        CARD32 length B32;
        CARD32 flags B32;
        INT32 attr_type B32;
        CARD32 perms B32;
        CARD32 pad5 B32;
        CARD32 pad6 B32;
        CARD32 pad7 B32;
        CARD32 pad8 B32;
    } xnvCtrlQueryAttributePermissionsReply;
    #define sz_xnvCtrlQueryAttributePermissionsReply 32
    
    /* Set GVO Color Conversion request (deprecated) */
    typedef struct
    {
        CARD8 reqType;
        CARD8 nvReqType;
        CARD16 length B16;
        CARD32 screen B32;
        FLOAT32 row1_col1 F32;
        FLOAT32 row1_col2 F32;
        FLOAT32 row1_col3 F32;
        FLOAT32 row1_col4 F32;
        FLOAT32 row2_col1 F32;
        FLOAT32 row2_col2 F32;
        FLOAT32 row2_col3 F32;
        FLOAT32 row2_col4 F32;
        FLOAT32 row3_col1 F32;
        FLOAT32 row3_col2 F32;
        FLOAT32 row3_col3 F32;
        FLOAT32 row3_col4 F32;
    } xnvCtrlSetGvoColorConversionDeprecatedReq;
    #define sz_xnvCtrlSetGvoColorConversionDeprecatedReq 56
    
    /* Query GVO Color Conversion request (deprecated) */
    typedef struct
    {
        CARD8 reqType;
        CARD8 nvReqType;
        CARD16 length B16;
        CARD32 screen B32;
    } xnvCtrlQueryGvoColorConversionDeprecatedReq;
    #define sz_xnvCtrlQueryGvoColorConversionDeprecatedReq 8
    
    /* Query GVO Color Conversion reply (deprecated) */
    typedef struct
    {
        BYTE type; /* X_Reply */
        BYTE pad0;
        CARD16 sequenceNumber B16;
        CARD32 length B32;
        CARD32 pad3 B32;
        CARD32 pad4 B32;
        CARD32 pad5 B32;
        CARD32 pad6 B32;
        CARD32 pad7 B32;
        CARD32 pad8 B32;
    } xnvCtrlQueryGvoColorConversionDeprecatedReply;
    #define sz_xnvCtrlQueryGvoColorConversionDeprecatedReply 32
    
    /* Set GVO Color Conversion request */
    typedef struct
    {
        CARD8 reqType;
        CARD8 nvReqType;
        CARD16 length B16;
        CARD32 screen B32;
    
        FLOAT32 cscMatrix_y_r F32;
        FLOAT32 cscMatrix_y_g F32;
        FLOAT32 cscMatrix_y_b F32;
    
        FLOAT32 cscMatrix_cr_r F32;
        FLOAT32 cscMatrix_cr_g F32;
        FLOAT32 cscMatrix_cr_b F32;
    
        FLOAT32 cscMatrix_cb_r F32;
        FLOAT32 cscMatrix_cb_g F32;
        FLOAT32 cscMatrix_cb_b F32;
    
        FLOAT32 cscOffset_y F32;
        FLOAT32 cscOffset_cr F32;
        FLOAT32 cscOffset_cb F32;
    
        FLOAT32 cscScale_y F32;
        FLOAT32 cscScale_cr F32;
        FLOAT32 cscScale_cb F32;
    
    } xnvCtrlSetGvoColorConversionReq;
    #define sz_xnvCtrlSetGvoColorConversionReq 68
    
    /* Query GVO Color Conversion request */
    typedef struct
    {
        CARD8 reqType;
        CARD8 nvReqType;
        CARD16 length B16;
        CARD32 screen B32;
    } xnvCtrlQueryGvoColorConversionReq;
    #define sz_xnvCtrlQueryGvoColorConversionReq 8
    
    /* Query GVO Color Conversion reply */
    typedef struct
    {
        BYTE type; /* X_Reply */
        BYTE pad0;
        CARD16 sequenceNumber B16;
        CARD32 length B32;
        CARD32 pad3 B32;
        CARD32 pad4 B32;
        CARD32 pad5 B32;
        CARD32 pad6 B32;
        CARD32 pad7 B32;
        CARD32 pad8 B32;
    } xnvCtrlQueryGvoColorConversionReply;
    #define sz_xnvCtrlQueryGvoColorConversionReply 32
    
    typedef struct
    {
        CARD8 reqType;
        CARD8 nvReqType;
        CARD16 length B16;
        CARD16 target_id B16;   /* X screen number or GPU number */
        CARD16 target_type B16; /* X screen or GPU */
        CARD32 display_mask B32;
        CARD32 attribute B32;
    } xnvCtrlQueryBinaryDataReq;
    #define sz_xnvCtrlQueryBinaryDataReq 16
    
    typedef struct
    {
        BYTE type;
        BYTE pad0;
        CARD16 sequenceNumber B16;
        CARD32 length B32;
        CARD32 flags B32;
        CARD32 n B32;
        CARD32 pad4 B32;
        CARD32 pad5 B32;
        CARD32 pad6 B32;
        CARD32 pad7 B32;
    } xnvCtrlQueryBinaryDataReply;
    #define sz_xnvCtrlQueryBinaryDataReply 32
    
    typedef struct
    {
        CARD8 reqType;
        CARD8 nvReqType;
        CARD16 length B16;
        CARD32 screen B32;
        CARD16 notifyType B16;
        CARD16 onoff B16;
    } xnvCtrlSelectNotifyReq;
    #define sz_xnvCtrlSelectNotifyReq 12
    
    typedef struct
    {
        CARD8 reqType;
        CARD8 nvReqType;
        CARD16 length B16;
        CARD16 target_id B16;   /* X screen number or GPU number */
        CARD16 target_type B16; /* X screen or GPU */
        CARD32 display_mask B32;
        CARD32 attribute B32;
        CARD32 num_bytes B32; /* Length of string */
    } xnvCtrlStringOperationReq;
    #define sz_xnvCtrlStringOperationReq 20
    
    typedef struct
    {
        BYTE type; /* X_Reply */
        CARD8 padb1;
        CARD16 sequenceNumber B16;
        CARD32 length B32;
        CARD32 ret B32;
        CARD32 num_bytes B32; /* Length of string */
        CARD32 padl4 B32;
        CARD32 padl5 B32;
        CARD32 padl6 B32;
        CARD32 padl7 B32;
    } xnvCtrlStringOperationReply;
    #define sz_xnvCtrlStringOperationReply 32
    
    typedef struct
    {
        union
        {
            struct
            {
                BYTE type;
                BYTE detail;
                CARD16 sequenceNumber B16;
            } u;
            struct
            {
                BYTE type;
                BYTE detail;
                CARD16 sequenceNumber B16;
                CARD32 time B32;
                CARD32 screen B32;
                CARD32 display_mask B32;
                CARD32 attribute B32;
                CARD32 value B32;
                CARD32 pad0 B32;
                CARD32 pad1 B32;
            } attribute_changed;
        } u;
    } xnvctrlEvent;
    
    /*
     * Leave target_type before target_id for the
     * xnvCtrlSelectTargetNotifyReq and xnvctrlEventTarget
     * structures, even though other request protocol structures
     * store target_id in the bottom 16-bits of the second DWORD of the
     * structures.  The event-related structures were added in version
     * 1.8, and so there is no prior version with which to maintain
     * compatibility.
     */
    typedef struct
    {
        CARD8 reqType;
        CARD8 nvReqType;
        CARD16 length B16;
        CARD16 target_type B16; /* Don't swap these */
        CARD16 target_id B16;
        CARD16 notifyType B16;
        CARD16 onoff B16;
    } xnvCtrlSelectTargetNotifyReq;
    #define sz_xnvCtrlSelectTargetNotifyReq 12
    
    typedef struct
    {
        union
        {
            struct
            {
                BYTE type;
                BYTE detail;
                CARD16 sequenceNumber B16;
            } u;
            struct
            {
                BYTE type;
                BYTE detail;
                CARD16 sequenceNumber B16;
                CARD32 time B32;
                CARD16 target_type B16; /* Don't swap these */
                CARD16 target_id B16;
                CARD32 display_mask B32;
                CARD32 attribute B32;
                CARD32 value B32;
                CARD32 pad0 B32;
                CARD32 pad1 B32;
            } attribute_changed;
            struct
            {
                BYTE type;
                BYTE detail;
                CARD16 sequenceNumber B16;
                CARD32 time B32;
                CARD16 target_type B16; /* Don't swap these */
                CARD16 target_id B16;
                CARD32 display_mask B32;
                CARD32 attribute B32;
                CARD32 value B32;
                CARD8 availability;
                CARD8 pad0;
                CARD16 pad1 B16;
                CARD32 pad2 B32;
            } availability_changed;
        } u;
    } xnvctrlEventTarget;
    
    #endif /* __NVCONTROL_H */