Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Windows 8.1'den başlayarak, ekran miniport sürücüsünün bir GPU düğümünün altyapı özelliklerini sorgulamak için kullanılan DxgkDdiGetNodeMetadata işlevini uygulaması gerekir.
Bu bilgiler, iş yüklerinin düğümler arasında nasıl zamanlanıp dağıtıldığının değerlendirilmesine yardımcı olur ve uygulamalarda hata ayıklama özelliğini geliştirir.
Altyapı özellikleri cihaz sürücüsü arabirimi (DDI)
Bu arabirim, belirtilen bir GPU düğümünün altyapı özelliklerini sağlar:
DxgkDdiGetNodeMetadata işlevinin işaretçisi, DRIVER_INITIALIZATION_DATA yapısının DxgkDdiGetNodeMetadata üyesi tarafından sağlanır.
GPU düğümü mimarisi
Sistemdeki her görüntü bağdaştırıcısında görevleri zamanlamak için kullanılabilecek bir dizi farklı motor mevcuttur. Her altyapı yalnızca bir düğüme atanır, ancak bu düğüm birden çok bağdaştırıcıyla ilişkilendirilmişse (örneğin, birden çok fiziksel GPU'un tek, daha hızlı, sanal GPU oluşturmak için bağlandığı bağlı görüntü bağdaştırıcısı (LDA) yapılandırmasında) her düğüm birden fazla altyapı içerebilir.
Farklı düğümler GPU'nun asimetrik işlem çekirdeklerini temsil ederken, her düğümdeki motorlar bağdaştırıcılar arasında simetrik işlem çekirdeklerini temsil eder. Başka bir ifadeyle, bir 3-B düğümü, birkaç bağdaştırıcıda yalnızca aynı 3-B motorları içerir ve hiçbir zaman farklı bir motor türü içermez.
Motorlar her zaman motor türüne göre düğümlerde birlikte gruplandırıldığından, motor türü bilgileri belirtilen düğüme göre sorgulanabilir. Görüntü miniport sürücüsünün belirtebileceği motor türleri DXGK_ENGINE_TYPE numaralandırmasında listelenir.
Düğüm meta veri işlevinin örnek uygulaması
Bu kod, görüntü miniport sürücüsünün DxgkDdiGetNodeMetadata işlevi tarafından döndürülebilen bazı altyapı türlerini nasıl uygulayabileceğini gösterir.
NTSTATUS
IHVGetNodeDescription(
IN_CONST_HANDLE hAdapter,
UINT NodeOrdinal,
OUT_PDXGKARG_GETNODEMETADATA pGetNodeMetadata
)
{
DDI_FUNCTION();
PAGED_CODE();
if(NULL == pGetNodeMetadata)
{
return STATUS_INVALID_PARAMETER;
}
CAdapter *pAdapter = GetAdapterFromHandle(hAdapter);
//Invalid handle
if(NULL == pAdapter)
{
return STATUS_INVALID_PARAMETER;
}
//Node ordinal is out of bounds. Required to return
//STATUS_INVALID_PARAMETER
if(NodeOrdinal >= pAdapter->GetNumNodes())
{
return STATUS_INVALID_PARAMETER;
}
switch(pAdapter->GetEngineType(NodeOrdinal))
{
//This is the adapter's 3-D engine. This engine handles a large number
//of different workloads, but it also handles the adapter's 3-D
//workloads. Therefore the 3-D capability is what must be exposed.
case GPU_ENGINE_3D:
{
pGetNodeMetadata->EngineType = DXGK_ENGINE_TYPE_3D;
break;
}
//This is the adapter's video decoding engine
case GPU_ENGINE_VIDEO_DECODE:
{
pGetNodeMetadata->EngineType = DXGK_ENGINE_TYPE_VIDEO_DECODE;
break;
}
//This engine is proprietary and contains no functionality that
//fits the DXGK_ENGINE_TYPE enumeration
case GPU_ENGINE_PROPRIETARY_ENGINE_1:
{
pGetNodeMetadata->EngineType = DXGK_ENGINE_TYPE_OTHER;
//Copy over friendly name associated with this engine
SetFriendlyNameForEngine(pGetNodeMetadata->FriendlyName,
DXGK_MAX_METADATA_NAME_LENGTH,
PROPRIETARY_ENGINE_1_NAME);
break;
}
}
return STATUS_SUCCESS;
}