2017-12-19 08:21:59 +08:00
|
|
|
/*==============================================================================
|
|
|
|
Copyright(c) 2017 Intel 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 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.
|
|
|
|
============================================================================
|
2017-12-02 02:44:37 +08:00
|
|
|
**
|
|
|
|
** File Name: sharedata.h
|
|
|
|
**
|
|
|
|
** Description: These are data structures that are shared between the KMD
|
|
|
|
** and the UMD
|
2017-12-19 08:21:59 +08:00
|
|
|
**
|
|
|
|
==============================================================================*/
|
2017-12-02 02:44:37 +08:00
|
|
|
|
|
|
|
#ifndef _SHAREDATA_H_
|
|
|
|
#define _SHAREDATA_H_
|
|
|
|
|
|
|
|
#include "../common/gtsysinfo.h"
|
|
|
|
#include "../common/sku_wa.h"
|
|
|
|
#include "../common/igfxfmid.h"
|
|
|
|
#include "UmKmEnum.h"
|
|
|
|
#include "UmKmDmaPerfTimer.h"
|
|
|
|
#define ADAPTER_STRING_SIZE 250
|
|
|
|
#ifdef __cplusplus
|
|
|
|
extern "C" {
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#define UMD_KMD_MAX_REGISTRY_PATH_LENGTH (512)
|
|
|
|
|
|
|
|
//===========================================================================
|
|
|
|
// typedef:
|
|
|
|
// DRIVER_VERION_INFO
|
|
|
|
//
|
|
|
|
// Description:
|
|
|
|
// This structure is used to communicate Driver Build version between
|
|
|
|
// KMD and UMD
|
|
|
|
//
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
|
typedef struct __DRIVER_VERSION_INFO
|
|
|
|
{
|
|
|
|
unsigned :16;
|
|
|
|
unsigned DriverBuildNumber :16;
|
|
|
|
}DRIVER_VERSION_INFO;
|
|
|
|
|
|
|
|
|
|
|
|
// BIT field, '1' (i.e. Set) means cap is supported by KMD
|
|
|
|
typedef struct __KMD_CAPS_INFO
|
|
|
|
{
|
|
|
|
unsigned Gamma_Rgb256x3x16 :1;
|
|
|
|
unsigned GDIAcceleration :1;
|
|
|
|
unsigned OsManagedHwContext :1; // wddm1.2+
|
|
|
|
unsigned GraphicsPreemptionGranularity :3; // wddm1.2+
|
|
|
|
unsigned ComputePreemptionGranularity :3; // wddm1.2+
|
|
|
|
unsigned InstrumentationIsEnabled :1; // KMD instrumentation state
|
|
|
|
unsigned DriverStoreEnabled :1; // wddm2.1+
|
|
|
|
unsigned :21;
|
|
|
|
} KMD_CAPS_INFO;
|
|
|
|
|
|
|
|
// Programmatically override overlay caps for testing
|
|
|
|
typedef struct __KMD_OVERLAY_OVERRIDE
|
|
|
|
{
|
2017-12-09 03:19:18 +08:00
|
|
|
uint32_t OverrideOverlayCaps : 1; // Override request
|
|
|
|
uint32_t RGBOverlay : 1; // RGB overlay override
|
|
|
|
uint32_t YUY2Overlay : 1; // YUY2 overlay override
|
|
|
|
uint32_t Reserved :29;
|
2017-12-02 02:44:37 +08:00
|
|
|
} KMD_OVERLAY_OVERRIDE;
|
|
|
|
|
|
|
|
// Overlay caps info needed by WDDM 1.1 Changes
|
|
|
|
typedef struct __KMD_OVERLAY_CAPS_INFO
|
|
|
|
{
|
|
|
|
union
|
|
|
|
{
|
|
|
|
struct
|
|
|
|
{
|
2017-12-09 03:19:18 +08:00
|
|
|
uint32_t FullRangeRGB : 1; // 0x00000001
|
|
|
|
uint32_t LimitedRangeRGB : 1; // 0x00000002
|
|
|
|
uint32_t YCbCr_BT601 : 1; // 0x00000004
|
|
|
|
uint32_t YCbCr_BT709 : 1; // 0x00000008
|
|
|
|
uint32_t YCbCr_BT601_xvYCC : 1; // 0x00000010
|
|
|
|
uint32_t YCbCr_BT709_xvYCC : 1; // 0x00000020
|
|
|
|
uint32_t StretchX : 1; // 0x00000040
|
|
|
|
uint32_t StretchY : 1; // 0x00000080
|
|
|
|
uint32_t Reserved :24; // 0xFFFFFF00
|
2017-12-02 02:44:37 +08:00
|
|
|
} Caps;
|
2017-12-09 03:19:18 +08:00
|
|
|
uint32_t CapsValue;
|
2017-12-02 02:44:37 +08:00
|
|
|
};
|
|
|
|
|
|
|
|
KMD_OVERLAY_OVERRIDE OVOverride;
|
|
|
|
|
2018-02-08 16:52:41 +08:00
|
|
|
uint32_t MaxOverlayDisplayWidth;
|
|
|
|
uint32_t MaxOverlayDisplayHeight;
|
2017-12-09 03:19:18 +08:00
|
|
|
uint8_t HWScalerExists;
|
2018-02-08 16:52:41 +08:00
|
|
|
uint32_t MaxHWScalerStride;
|
2017-12-02 02:44:37 +08:00
|
|
|
} KMD_OVERLAY_CAPS_INFO;
|
|
|
|
|
|
|
|
// Frame Rate
|
|
|
|
typedef struct
|
|
|
|
{
|
2017-12-09 03:19:18 +08:00
|
|
|
uint32_t uiNumerator;
|
|
|
|
uint32_t uiDenominator;
|
2017-12-02 02:44:37 +08:00
|
|
|
} FRAME_RATE;
|
|
|
|
|
|
|
|
typedef struct __KM_SYSTEM_INFO
|
|
|
|
{
|
|
|
|
|
|
|
|
GT_SYSTEM_INFO SystemInfo;
|
|
|
|
// ShadowReg 119 caluclated value required for WA <WaProgramMgsrForCorrectSliceSpecificMmioReads>
|
2018-02-08 16:52:41 +08:00
|
|
|
uint32_t ShadowRegValue;
|
|
|
|
uint32_t ShadowRegValueforL3SpecificRegReads; // Shadow reg value for L3 bank specific MMIO reads.
|
2017-12-02 02:44:37 +08:00
|
|
|
|
2018-02-08 16:52:41 +08:00
|
|
|
uint32_t GfxDevId; // DeviceID
|
2017-12-02 02:44:37 +08:00
|
|
|
}KM_SYSTEM_INFO;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
typedef struct _KM_DEFERRED_WAIT_INFO
|
|
|
|
{
|
2017-12-09 03:19:18 +08:00
|
|
|
uint32_t FeatureSupported;
|
|
|
|
uint32_t ActiveDisplay;
|
2017-12-02 02:44:37 +08:00
|
|
|
} KM_DEFERRED_WAIT_INFO;
|
|
|
|
|
2019-10-22 17:14:49 +08:00
|
|
|
// struct to hold Adapter's BDF
|
|
|
|
typedef struct _ADAPTER_BDF_
|
|
|
|
{
|
|
|
|
union
|
|
|
|
{
|
|
|
|
struct
|
|
|
|
{
|
|
|
|
uint32_t Bus : 8;
|
|
|
|
uint32_t Device : 8;
|
|
|
|
uint32_t Function : 8;
|
|
|
|
uint32_t Reserved : 8;
|
|
|
|
};
|
|
|
|
uint32_t Data;
|
|
|
|
};
|
|
|
|
}ADAPTER_BDF;
|
|
|
|
|
2017-12-02 02:44:37 +08:00
|
|
|
// Private data structure for D3D callback QueryAdapterInfoCB
|
|
|
|
|
|
|
|
//===========================================================================
|
|
|
|
// typedef:
|
|
|
|
// _ADAPTER_INFO
|
|
|
|
//
|
|
|
|
// Description:
|
|
|
|
// This structure is private data structure that get passed by UMD to
|
|
|
|
// KMD during QueryAdapterInfoCB
|
|
|
|
//
|
|
|
|
// Note: Structure will be filled by KMD.
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
|
#pragma pack (push,1)
|
|
|
|
typedef struct _ADAPTER_INFO
|
|
|
|
{
|
2018-02-08 16:52:41 +08:00
|
|
|
uint32_t KmdVersionInfo; // Version ID
|
2017-12-02 02:44:37 +08:00
|
|
|
DRIVER_VERSION_INFO DriverVersionInfo; //
|
|
|
|
PLATFORM GfxPlatform; // Chipset Gfx family, product, render core, display core, etc
|
|
|
|
SKU_FEATURE_TABLE SkuTable; // SKU feature table
|
|
|
|
WA_TABLE WaTable; // WA table
|
2018-02-08 16:52:41 +08:00
|
|
|
uint32_t GfxTimeStampFreq; // In Hz (No. of clock ticks per second). So timestamp base = 1 / GfxTimeStampFreq
|
|
|
|
uint32_t GfxCoreFrequency; // In MHz.
|
|
|
|
uint32_t FSBFrequency; // In MHz.
|
|
|
|
uint32_t MinRenderFreq; // In MHz.
|
|
|
|
uint32_t MaxRenderFreq; // In MHz.
|
|
|
|
uint32_t PackageTdp; // TDP Power for the platform (In Watt)
|
|
|
|
uint32_t MaxFillRate; // Fillrate with Alphablend (In Pix/Clk)
|
|
|
|
uint32_t NumberOfEUs; // Number of EUs in GT
|
2017-12-02 02:44:37 +08:00
|
|
|
|
|
|
|
// NOTE: Name is kept same so that we don't have to change PC_TARGET macro and usage
|
|
|
|
// of that.
|
2018-02-08 16:52:41 +08:00
|
|
|
uint32_t dwReleaseTarget; // PC Release Target Information supplied by INF
|
2017-12-02 02:44:37 +08:00
|
|
|
|
|
|
|
// Following member can be use by UMD for optimal use of DMA and
|
|
|
|
// command buffer
|
2018-02-08 16:52:41 +08:00
|
|
|
uint32_t SizeOfDmaBuffer; // Size of DMA buffer set (In Bytes)
|
|
|
|
uint32_t PatchLocationListSize; // Size of Patch Location List (In number of entries)
|
|
|
|
uint32_t AllocationListSize; // Size of Patch Location List (In number of entries)
|
|
|
|
uint32_t SmallPatchLocationListSize; // Size of Patch Location List for UMD context that needs a small Patch Location List,
|
2017-12-02 02:44:37 +08:00
|
|
|
// currently only used by media context (In number of entries)
|
2018-02-08 16:52:41 +08:00
|
|
|
uint32_t DefaultCmdBufferSize; // Size of Cmd buffer default location
|
2017-12-02 02:44:37 +08:00
|
|
|
|
|
|
|
// Following Members can be use for any UMD optimization (like Size of vertex buffer to allocate)
|
|
|
|
// any cacheline related read/write, etc
|
2018-02-08 16:52:41 +08:00
|
|
|
int64_t GfxMemorySize; // Total GFX memory (In MBytes)
|
|
|
|
uint32_t SystemMemorySize; // Total System Memory (In MBytes)
|
|
|
|
uint32_t CacheLineSize; // Processor CacheLine size
|
2017-12-02 02:44:37 +08:00
|
|
|
PROCESSOR_FAMILY ProcessorFamily; // Processor Family
|
2017-12-09 03:19:18 +08:00
|
|
|
uint8_t IsHTSupported; // Is Hyper Threaded CPU
|
|
|
|
uint8_t IsMutiCoreCpu; // Is Multi Core CPU
|
|
|
|
uint8_t IsVTDSupported; // Is Chipset VT is supported
|
2017-12-02 02:44:37 +08:00
|
|
|
char DeviceRegistryPath[UMD_KMD_MAX_REGISTRY_PATH_LENGTH]; // Array that contains the device registry path
|
2018-02-08 16:52:41 +08:00
|
|
|
uint32_t RegistryPathLength; // Actual chars (not including any trailing NULL) in the array set by the KMD
|
|
|
|
int64_t DedicatedVideoMemory; // Dedicated Video Memory
|
|
|
|
int64_t SystemSharedMemory; // System Shared Memory
|
|
|
|
int64_t SystemVideoMemory; // SystemVideoMemory
|
2017-12-02 02:44:37 +08:00
|
|
|
FRAME_RATE OutputFrameRate; // Output Frame Rate
|
|
|
|
FRAME_RATE InputFrameRate; // Input Frame Rate
|
|
|
|
KMD_CAPS_INFO Caps; // List of capabilities supported by the KMD
|
|
|
|
KMD_OVERLAY_CAPS_INFO OverlayCaps; // List of overlay capabilities supported
|
|
|
|
GT_SYSTEM_INFO SystemInfo; // List of system details
|
|
|
|
KM_DEFERRED_WAIT_INFO DeferredWaitInfo; // Indicates if DeferredWait feature is enabled and value of active display
|
|
|
|
|
2021-12-04 00:27:13 +08:00
|
|
|
#ifdef _WIN32
|
|
|
|
ADAPTER_BDF stAdapterBDF; // Adapter BDF
|
|
|
|
#endif
|
2017-12-02 02:44:37 +08:00
|
|
|
|
|
|
|
} ADAPTER_INFO, *PADAPTER_INFO;
|
|
|
|
#pragma pack (pop)
|
|
|
|
|
2018-06-16 02:48:35 +08:00
|
|
|
#define MAX_ENGINE_INSTANCE_PER_CLASS 4
|
|
|
|
|
|
|
|
// GEN11 Media Scalability 2.0: context based scheduling
|
|
|
|
typedef struct MEDIA_CONTEXT_REQUIREMENT_REC
|
|
|
|
{
|
|
|
|
union
|
|
|
|
{
|
|
|
|
struct
|
|
|
|
{
|
|
|
|
uint32_t UsingSFC : 1; // Use SFC or not
|
|
|
|
uint32_t HWRestrictedEngine : 1;
|
|
|
|
#if (_DEBUG || _RELEASE_INTERNAL || __KMDULT)
|
|
|
|
uint32_t Reserved : 29;
|
|
|
|
uint32_t DebugOverride : 1; // Debug & validation usage
|
|
|
|
#else
|
|
|
|
uint32_t Reserved : 30;
|
|
|
|
#endif
|
|
|
|
};
|
|
|
|
|
|
|
|
uint32_t Flags;
|
|
|
|
};
|
|
|
|
|
|
|
|
uint32_t LRCACount;
|
|
|
|
|
|
|
|
// Logical engine instances used by this context; valid only if flag DebugOverride is set.
|
|
|
|
uint8_t EngineInstance[MAX_ENGINE_INSTANCE_PER_CLASS];
|
|
|
|
|
|
|
|
} MEDIA_CONTEXT_REQUIREMENT, *PMEDIA_CONTEXT_REQUIREMENT;
|
2017-12-02 02:44:37 +08:00
|
|
|
|
|
|
|
// Bit-Struct for Driver's Use of D3DDDI_PATCHLOCATIONLIST.DriverId
|
|
|
|
typedef union __D3DDDI_PATCHLOCATIONLIST_DRIVERID
|
|
|
|
{
|
|
|
|
struct
|
|
|
|
{
|
2017-12-09 03:19:18 +08:00
|
|
|
uint32_t UseGlobalGtt : 1; // Indicates patch is to use global GTT space address (instead of PPGTT space).
|
|
|
|
uint32_t HasDecryptBits : 1;
|
|
|
|
uint32_t RenderTargetEnable : 1; // Indicates this is an output surface that may need to be encrypted
|
|
|
|
int32_t DecryptBitDwordOffset : 8; // signed offset (in # of DWORDS) from the patch location to where the cmd's decrypt bit is
|
|
|
|
uint32_t DecryptBitNumber : 5; // which bit to set in the dword specified by DecryptBitDwordOffset (0 - 31)
|
|
|
|
uint32_t GpGpuCsrBaseAddress : 1; // this patch location is for the GPGPU Preempt buffer
|
|
|
|
uint32_t SurfaceStateBaseAddress : 1; // Indicates this is patch for SBA.SurfaceStateBaseAddress
|
|
|
|
uint32_t PreemptPatchType : 3; // Contains list of addresses that may need patching due to Preemption/Resubmit.
|
|
|
|
uint32_t PatchLowDword : 1; // 32-bit patch despite 64-bit platform--Low DWORD.
|
|
|
|
uint32_t PatchHighDword : 1; // 32-bit patch despite 64-bit platform--High DWORD.
|
|
|
|
uint32_t StateSip : 1; // STATE_SIP address that needs to be patched in the context image (for thread-level preemption)
|
|
|
|
uint32_t GpGpuWSDIBegin : 1; // The start of the SDI command seq before GPGPU_WALKER (for restarting thread-level workload)
|
|
|
|
uint32_t GpGpuWSDIEnd : 1; // The end of the SDI command seq before GPGPU_WALKER (for restarting thread-level workload)
|
|
|
|
uint32_t NullPatch : 1; // Don't perform KMD patching (used for SVM, Tiled/Sparse Resources and ExistingSysMem Virtual Padding).
|
|
|
|
uint32_t UpperBoundsPatch : 1; // Indicates the patch is for an UpperBounds/"out-of-bounds" address
|
|
|
|
uint32_t BindingTablePoolPatch : 1; // Indicates the patch is for Binding Table Pool. Needed for bindless head testing. Remove later.
|
2017-12-02 02:44:37 +08:00
|
|
|
};
|
2017-12-09 03:19:18 +08:00
|
|
|
uint32_t Value;
|
2017-12-02 02:44:37 +08:00
|
|
|
} D3DDDI_PATCHLOCATIONLIST_DRIVERID;
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
#endif // _SHAREDATA_H_
|