@@ -604,16 +604,17 @@ function SpliceReportByArchAndVendor(reportContainer) {
604
604
"RDNA" , ///< AMD RDNA architecture
605
605
"RDNA2" , ///< AMD RDNA2 architecture
606
606
"RDNA3" , ///< AMD RDNA3 architecture
607
+ "RDNA4" , ///< AMD RDNA4 architecture
607
608
] ;
608
609
// TODO: unknown asic reports could be assigned by device ID lists
609
610
if ( report . AGSDeviceInfo . asicFamily != 0 ) {
610
611
arch = AMDArchitectures [ report . AGSDeviceInfo . asicFamily ] ;
611
612
612
- // filter out RDNA2 iGPUs with 1 WGP because those don't support mesh shaders unlike all the others (TODO: should we handle this differently?)
613
- if ( arch == "RDNA2" && report . AGSDeviceInfo . numWGPs == 1 && report . D3D12_FEATURE_DATA_D3D12_OPTIONS7 . MeshShaderTier == 0 )
614
- return ;
613
+ if ( ! arch ) {
614
+ arch = "Arch ID " + report . AGSDeviceInfo . asicFamily ;
615
+ }
615
616
616
- if ( arch ) ArchsPerVendor . AMD . add ( arch ) ;
617
+ ArchsPerVendor . AMD . add ( arch ) ;
617
618
}
618
619
}
619
620
else if ( vendorId . startsWith ( "Intel" ) ) {
@@ -687,31 +688,29 @@ function SpliceReportByArchAndVendor(reportContainer) {
687
688
}
688
689
arch = GetKeyByValue ( NvidiaArchitectures , report . NvPhysicalGpuHandle [ "NvAPI_GPU_GetArchInfo - NV_GPU_ARCH_INFO::architecture_id" ] ) ;
689
690
690
- // filter variants except Maxwell, should have same D3D12 features (though not CUDA features)
691
- if ( arch ) {
692
- if ( arch == "Kepler2" || arch == "Kepler1" )
693
- arch = "Kepler" ;
694
- else if ( arch == "Fermi1" )
695
- arch = "Fermi" ; // unconfirmed
696
- else if ( arch == "Volta1" )
697
- arch = "Volta" ; // unconfirmed
698
- else if ( arch == "Turing" ) { // differentiate between Turing 16 (no RT) and Turing 20 (RTX)
699
- let codename = report . NvPhysicalGpuHandle [ "NvAPI_GPU_GetArchInfo - NV_GPU_ARCH_INFO::implementation_id" ] ;
700
- if ( codename == 360 || codename == 359 || report . DXGI_ADAPTER_DESC3 . Description . includes ( "GTX 16" ) ) // TU116/117 or TU106 with RT disabled
701
- arch = "Turing 16" ;
702
- else
703
- arch = "Turing 20" ;
704
- }
691
+ if ( ! arch ) {
692
+ arch = "Arch ID " + report . NvPhysicalGpuHandle [ "NvAPI_GPU_GetArchInfo - NV_GPU_ARCH_INFO::architecture_id" ] ;
705
693
}
706
694
695
+ // filter variants except Maxwell, should have same D3D12 features (though not CUDA features)
696
+ if ( arch == "Kepler2" || arch == "Kepler1" )
697
+ arch = "Kepler" ;
698
+ else if ( arch == "Fermi1" )
699
+ arch = "Fermi" ; // unconfirmed
700
+ else if ( arch == "Volta1" )
701
+ arch = "Volta" ; // unconfirmed
702
+
707
703
ArchsPerVendor . Nvidia . add ( arch ? arch : report . NvPhysicalGpuHandle [ "NvAPI_GPU_GetArchInfo - NV_GPU_ARCH_INFO::architecture_id" ] . toString ( ) ) ;
708
704
}
709
705
else if ( vendorId . startsWith ( "Qualcomm" ) ) {
710
706
711
707
if ( / S n a p d r a g o n \( R \) X ( P l u s ) | ( E l i t e ) - X 1 .* / . test ( report . DXGI_ADAPTER_DESC3 . Description ) )
712
708
arch = "X1" ;
713
709
else if ( report . DXGI_ADAPTER_DESC3 . Description . includes ( "8cx" ) )
710
+ {
714
711
arch = report . DXGI_ADAPTER_DESC3 . Description . slice ( report . DXGI_ADAPTER_DESC3 . Description . search ( / 8 c x .* / ) ) ;
712
+ arch = arch . replace ( "Gen " , "" ) ;
713
+ }
715
714
716
715
if ( arch ) ArchsPerVendor . Qualcomm . add ( arch ) ;
717
716
}
@@ -742,12 +741,23 @@ function IsReportNewer(lhs, rhs) {
742
741
return lhs . ID > rhs . ID ;
743
742
}
744
743
744
+ function FeatureTableFilter ( report ) {
745
+ if ( report . GetField ( "Header.Using preview Agility SDK" ) )
746
+ return true ;
747
+
748
+ // filter out RDNA2 iGPUs with 1 WGP since they don't have mesh shaders unlike all other RDNA2 GPUs
749
+ if ( report . GetField ( "AGSDeviceInfo.asicFamily" ) == 8 && report . GetField ( "AGSDeviceInfo.numWGPs" ) == 1 && report . GetField ( "D3D12_FEATURE_DATA_D3D12_OPTIONS7.MeshShaderTier" ) == 0 )
750
+ return true ;
751
+
752
+ return false ;
753
+ }
754
+
745
755
function PrepareReportsForTable ( ) {
746
756
747
757
ClearTableReportData ( ) ;
748
758
749
759
for ( let report of Reports ) {
750
- if ( ! report . GetField ( "Header.Using preview Agility SDK" ) )
760
+ if ( ! FeatureTableFilter ( report ) )
751
761
SpliceReportByArchAndVendor ( report ) ;
752
762
}
753
763
@@ -900,7 +910,7 @@ function UpdateTableHeader(table) {
900
910
{
901
911
alignOutsideVertical : true ,
902
912
preferTowardsBottom : true ,
903
- tooltipAlignment : "bottom "
913
+ tooltipAlignment : "bottomright "
904
914
} ) ;
905
915
}
906
916
}
@@ -941,8 +951,14 @@ function UpdateTableBody(table) {
941
951
else if ( featureName == "TableMarketShare" ) {
942
952
let td = document . createElement ( "td" ) ;
943
953
let marketShare = ArchStats [ archName ] ;
954
+ let tooltipText ;
944
955
945
- if ( marketShare == undefined )
956
+ if ( archName == "WARP" )
957
+ {
958
+ marketShare = "N/A"
959
+ tooltipText = "WARP is a software rasterizer, not a hardware GPU, so it doesn't have a market share and not in Steam Hardware Survey." ;
960
+ }
961
+ else if ( marketShare == undefined )
946
962
{
947
963
marketShare = "~0%"
948
964
}
@@ -952,6 +968,8 @@ function UpdateTableBody(table) {
952
968
}
953
969
td . append ( marketShare )
954
970
featureRow . appendChild ( td )
971
+ if ( tooltipText )
972
+ AddTooltipForTable ( td , tooltipText , { alignOutsideVertical : true , tooltipAlignment : "bottomleft" } ) ;
955
973
}
956
974
else if ( featureName == "TableReportUsed" ) {
957
975
let td = document . createElement ( "td" ) ;
@@ -985,7 +1003,6 @@ function UpdateTableBody(table) {
985
1003
if ( featureName == "D3D12_FEATURE_DATA_D3D12_OPTIONS21.WorkGraphsTier" && featureValue == undefined ) {
986
1004
featureValue = newestReportContainer . GetField ( "D3D12_FEATURE_DATA_D3D12_OPTIONS_EXPERIMENTAL.WorkGraphsTier" ) ;
987
1005
}
988
-
989
1006
// GPU Upload Heap support depends on BIOS settings / Windows version, so if any report is true we take that one
990
1007
else if ( featureName == "D3D12_FEATURE_DATA_D3D12_OPTIONS16.GPUUploadHeapSupported" ) {
991
1008
for ( let r of ReportsPerArch . get ( archName ) ) {
@@ -995,16 +1012,25 @@ function UpdateTableBody(table) {
995
1012
}
996
1013
}
997
1014
}
998
-
999
1015
// If our tiled resource tier is 3, the SRVOnlyTiledResourceTier3 flag does not apply, but is always true, which is misleading
1000
1016
else if ( featureName == "D3D12_FEATURE_DATA_D3D12_OPTIONS5.SRVOnlyTiledResourceTier3" && newestDriverReport . D3D12_FEATURE_DATA_D3D12_OPTIONS . TiledResourcesTier >= 3 ) {
1001
1017
featureValue = "N/A" ;
1002
1018
displayRawFeatureValue = true ;
1003
1019
}
1004
- else if ( featureName == "D3D12_FEATURE_DATA_D3D12_OPTIONS5.RaytracingTier" && ( archName == "Pascal" || archName == "Turing 16" ) ) {
1005
- featureValue = TableTrueFalseMapping [ "1" ] + "/" + TableTrueFalseMapping [ "0" ] ;
1020
+ else if ( featureName == "D3D12_FEATURE_DATA_D3D12_OPTIONS5.RaytracingTier" && archName == "Pascal" ) {
1021
+ featureValue = "Tier 1.0 *" ;
1022
+ displayRawFeatureValue = true ;
1023
+ tooltipText = "Pascal have (software emulated) Tier 1.0 raytracing support, but only if the card has 6GB of VRAM or more" ;
1024
+ }
1025
+ else if ( featureName == "D3D12_FEATURE_DATA_D3D12_OPTIONS5.RaytracingTier" && archName == "Turing" ) {
1026
+ featureValue = "Tier 1.1 *" ;
1027
+ displayRawFeatureValue = true ;
1028
+ tooltipText = "Within Turing architecture there are:\nRTX 20 series and Quadro RTX cards with hardware Tier 1.1 support\nGTX 16 series cards with >= 6GB of VRAM with software emulated Tier 1.0 support\nGTX 16 series cards with < 6GB of VRAM with no raytracing support at all" ;
1029
+ }
1030
+ else if ( featureName == "D3D12_FEATURE_DATA_D3D12_OPTIONS7.MeshShaderTier" && archName == "RDNA2" ) {
1031
+ featureValue = TableTrueFalseMapping [ "1" ] + "*" ;
1006
1032
displayRawFeatureValue = true ;
1007
- tooltipText = "Pascal and Turing 16 have (software emulated) Tier 1.0 raytracing support, but only if the card has 6GB VRAM or more " ;
1033
+ tooltipText = "RDNA2 iGPUs with 1 WGP don't have mesh shader support " ;
1008
1034
}
1009
1035
let td = document . createElement ( "td" ) ;
1010
1036
td . append ( displayRawFeatureValue ? featureValue : MakeHumanReadableForTable ( featureName , featureValue ) ) ;
0 commit comments