diff --git a/renderdoc/driver/ihv/amd/AMD.vcxproj b/renderdoc/driver/ihv/amd/AMD.vcxproj
index b75e714f8..584a0b127 100644
--- a/renderdoc/driver/ihv/amd/AMD.vcxproj
+++ b/renderdoc/driver/ihv/amd/AMD.vcxproj
@@ -123,7 +123,7 @@
-
+
diff --git a/renderdoc/driver/ihv/amd/AMD.vcxproj.filters b/renderdoc/driver/ihv/amd/AMD.vcxproj.filters
index 85b339dde..9f0e17957 100644
--- a/renderdoc/driver/ihv/amd/AMD.vcxproj.filters
+++ b/renderdoc/driver/ihv/amd/AMD.vcxproj.filters
@@ -74,9 +74,6 @@
official\RGA\Common
-
- official\RGA\Common
-
ISA
@@ -114,5 +111,8 @@
official\GPUPerfAPI
+
+ official\RGA\Common
+
\ No newline at end of file
diff --git a/renderdoc/driver/ihv/amd/amd_isa.cpp b/renderdoc/driver/ihv/amd/amd_isa.cpp
index 75e1ca8ce..067af2c35 100644
--- a/renderdoc/driver/ihv/amd/amd_isa.cpp
+++ b/renderdoc/driver/ihv/amd/amd_isa.cpp
@@ -109,17 +109,10 @@ void GetTargets(GraphicsAPI api, std::vector &targets)
if(IsSupported(primary) || IsSupported(secondary))
{
- // OpenGL doesn't support AMDIL
- if(api != GraphicsAPI::OpenGL)
- targets.push_back("AMDIL");
-
- int apiBitmask = 1 << (int)api;
+ targets.push_back("AMDIL");
for(int i = 0; i < asicCount; i++)
- {
- if(asicInfo[i].apiBitmask & apiBitmask)
- targets.push_back(asicInfo[i].name);
- }
+ targets.push_back(asicInfo[i].name);
}
else
{
@@ -296,6 +289,7 @@ std::string DisassembleGLSL(ShaderStage stage, const bytebuf &shaderBytes, const
std::string outPath = StringFormat::Fmt("%sout.txt", tempPath.c_str());
std::string binPath = StringFormat::Fmt("%sout.bin", tempPath.c_str());
std::string statsPath = StringFormat::Fmt("%sstats.txt", tempPath.c_str());
+ std::string ilPath = StringFormat::Fmt("%sil.txt", tempPath.c_str());
std::string cmdLine = "\"";
@@ -332,6 +326,13 @@ std::string DisassembleGLSL(ShaderStage stage, const bytebuf &shaderBytes, const
}
}
+ // dummy values
+ if(!found)
+ {
+ const asic &a = asicInfo[0];
+ cmdLine += StringFormat::Fmt("%d;%d;", a.chipFamily, a.chipRevision);
+ }
+
// input files
for(int i = 0; i < 6; i++)
{
@@ -341,11 +342,26 @@ std::string DisassembleGLSL(ShaderStage stage, const bytebuf &shaderBytes, const
cmdLine += ';';
}
+ cmdLine += ";\"";
+
+ // amdil files
+ for(int i = 0; i < 6; i++)
+ {
+ if(i == stageIndex)
+ cmdLine += ilPath;
+
+ cmdLine += ';';
+ }
+
+ if(!found && target == "AMDIL")
+ {
+ outPath = ilPath;
+ found = true;
+ }
+
if(!found)
return "; Invalid ISA Target specified";
- cmdLine += ";\"";
-
FileIO::dump(inPath.c_str(), shaderBytes.data(), shaderBytes.size());
// try to locate the amdspv relative to our running program
@@ -371,6 +387,9 @@ std::string DisassembleGLSL(ShaderStage stage, const bytebuf &shaderBytes, const
FileIO::slurp(outPath.c_str(), data);
ret = std::string(data.data(), data.data() + data.size());
+ while(ret.back() == '\0')
+ ret.pop_back();
+
if(FileIO::exists(statsPath.c_str()))
{
FileIO::slurp(statsPath.c_str(), data);
diff --git a/renderdoc/driver/ihv/amd/amd_isa_devices.cpp b/renderdoc/driver/ihv/amd/amd_isa_devices.cpp
index f2c011c58..b4a21f11d 100644
--- a/renderdoc/driver/ihv/amd/amd_isa_devices.cpp
+++ b/renderdoc/driver/ihv/amd/amd_isa_devices.cpp
@@ -24,43 +24,39 @@
#include "amd_isa_devices.h"
#include "common/common.h"
-#include "official/RGA/Common/asic_reg/devices.h"
-
-static constexpr int allAPIs = (1 << (int)GraphicsAPI::D3D11) | (1 << (int)GraphicsAPI::D3D12) |
- (1 << (int)GraphicsAPI::Vulkan) | (1 << (int)GraphicsAPI::OpenGL);
-
-// gfx900 isn't currently supported on GL
-static constexpr int notOpenGL = (1 << (int)GraphicsAPI::D3D11) | (1 << (int)GraphicsAPI::D3D12) |
- (1 << (int)GraphicsAPI::Vulkan);
+#include "official/RGA/Common/AsicReg/devices.h"
const GCNISA::asic GCNISA::asicInfo[] = {
// Southern Islands
- {"GCN (Tahiti)", "6", FAMILY_SI, SI_TAHITI_P_B1, allAPIs},
- {"GCN (Pitcairn)", "6", FAMILY_SI, SI_PITCAIRN_PM_A1, allAPIs},
- {"GCN (Capeverde)", "6", FAMILY_SI, SI_CAPEVERDE_M_A1, allAPIs},
- {"GCN (Oland)", "6", FAMILY_SI, SI_OLAND_M_A0, allAPIs},
- {"GCN (Hainan)", "6", FAMILY_SI, SI_HAINAN_V_A0, allAPIs},
+ {"GCN (Tahiti)", "6", FAMILY_SI, SI_TAHITI_P_B1, "gfx600"},
+ {"GCN (Pitcairn)", "6", FAMILY_SI, SI_PITCAIRN_PM_A1, "gfx601"},
+ {"GCN (Capeverde)", "6", FAMILY_SI, SI_CAPEVERDE_M_A1, "gfx601"},
+ {"GCN (Oland)", "6", FAMILY_SI, SI_OLAND_M_A0, "gfx601"},
+ {"GCN (Hainan)", "6", FAMILY_SI, SI_HAINAN_V_A0, "gfx601"},
// Sea Islands
- {"GCN (Bonaire)", "7", FAMILY_CI, CI_BONAIRE_M_A0, allAPIs},
- {"GCN (Hawaii)", "7", FAMILY_CI, CI_HAWAII_P_A0, allAPIs},
- {"GCN (Spectre)", "7", FAMILY_CI, KV_SPECTRE_A0, allAPIs},
- {"GCN (Spooky)", "7", FAMILY_CI, KV_SPOOKY_A0, allAPIs},
- {"GCN (Kalindi)", "7.x", FAMILY_CI, CI_BONAIRE_M_A0, allAPIs},
- {"GCN (Mullins)", "7", FAMILY_CI, CI_BONAIRE_M_A0, allAPIs},
+ {"GCN (Bonaire)", "7", FAMILY_CI, CI_BONAIRE_M_A0, "gfx704"},
+ {"GCN (Hawaii)", "7", FAMILY_CI, CI_HAWAII_P_A0, "gfx701"},
+ {"GCN (Spectre)", "7", FAMILY_CI, KV_SPECTRE_A0, "gfx700"},
+ {"GCN (Spooky)", "7", FAMILY_CI, KV_SPOOKY_A0, "gfx700"},
+ {"GCN (Kalindi)", "7.x", FAMILY_CI, CI_BONAIRE_M_A0, "gfx703"},
+ {"GCN (Mullins)", "7", FAMILY_CI, CI_BONAIRE_M_A0, "gfx704"},
// Volcanic Islands
- {"GCN (Iceland)", "8", FAMILY_VI, VI_ICELAND_M_A0, allAPIs},
- {"GCN (Tonga)", "8", FAMILY_VI, VI_TONGA_P_A0, allAPIs},
- {"GCN (Carrizo)", "8", FAMILY_VI, CARRIZO_A0, allAPIs},
- {"GCN (Bristol Ridge)", "8", FAMILY_VI, CARRIZO_A0, allAPIs},
- {"GCN (Carrizo)", "8", FAMILY_VI, CARRIZO_A0, allAPIs},
- {"GCN (Fiji)", "8", FAMILY_VI, VI_FIJI_P_A0, allAPIs},
- {"GCN (Stoney)", "8.1", FAMILY_VI, STONEY_A0, allAPIs},
- {"GCN (Ellesmere)", "8", FAMILY_VI, VI_ELLESMERE_P_A0, allAPIs},
- {"GCN (Baffin)", "8", FAMILY_VI, VI_BAFFIN_M_A0, allAPIs},
- {"GCN (gfx804)", "8", FAMILY_VI, VI_LEXA_V_A0, allAPIs},
+ {"GCN (Iceland)", "8", FAMILY_VI, VI_ICELAND_M_A0, "gfx802"},
+ {"GCN (Tonga)", "8", FAMILY_VI, VI_TONGA_P_A0, "gfx802"},
+ {"GCN (Carrizo)", "8", FAMILY_VI, CARRIZO_A0, "gfx801"},
+ {"GCN (Bristol Ridge)", "8", FAMILY_VI, CARRIZO_A0, "gfx801"},
+ {"GCN (Carrizo)", "8", FAMILY_VI, CARRIZO_A0, "gfx801"},
+ {"GCN (Fiji)", "8", FAMILY_VI, VI_FIJI_P_A0, "gfx803"},
+ {"GCN (Stoney)", "8.1", FAMILY_VI, STONEY_A0, "gfx810"},
+ {"GCN (Ellesmere)", "8", FAMILY_VI, VI_ELLESMERE_P_A0, "gfx803"},
+ {"GCN (Baffin)", "8", FAMILY_VI, VI_BAFFIN_M_A0, "gfx803"},
+ {"GCN (gfx804)", "8", FAMILY_VI, VI_LEXA_V_A0, "gfx804"},
// Arctic Islands
- {"GCN (gfx900)", "900", FAMILY_AI, AI_GD_P0, notOpenGL},
- {"GCN (gfx902)", "902", FAMILY_AI, AI_GD_P0, notOpenGL},
+ {"GCN (gfx900)", "900", FAMILY_AI, AI_GD_P0, "gfx900"},
+ {"GCN (gfx902)", "902", FAMILY_AI, AI_GD_P0, "gfx902"},
+ {"GCN (Vega 20)", "906", FAMILY_AI, AI_VEGA20_P_A0, "gfx906"},
+ // Navi
+ {"RDNA (Navi 10)", "1010", FAMILY_NV, NV_NAVI10_P_A0, "gfx1010"},
};
RDCCOMPILE_ASSERT(ARRAY_COUNT(GCNISA::asicInfo) == GCNISA::asicCount, "Mismatched array count");
\ No newline at end of file
diff --git a/renderdoc/driver/ihv/amd/amd_isa_devices.h b/renderdoc/driver/ihv/amd/amd_isa_devices.h
index 03f2a3419..9a1193a3a 100644
--- a/renderdoc/driver/ihv/amd/amd_isa_devices.h
+++ b/renderdoc/driver/ihv/amd/amd_isa_devices.h
@@ -32,10 +32,10 @@ struct asic
const char *gfxIpString;
int chipFamily;
int chipRevision;
- int apiBitmask;
+ const char *targetName;
};
-const int asicCount = 23;
+const int asicCount = 25;
extern const asic asicInfo[];
}; // namespace GCNISA
diff --git a/renderdoc/driver/ihv/amd/amd_isa_win32.cpp b/renderdoc/driver/ihv/amd/amd_isa_win32.cpp
index 2bcde680c..ab5646d4d 100644
--- a/renderdoc/driver/ihv/amd/amd_isa_win32.cpp
+++ b/renderdoc/driver/ihv/amd/amd_isa_win32.cpp
@@ -59,6 +59,20 @@ static HMODULE GetAMDModule()
return module;
}
+void SafelyCompile(PfnAmdDxGsaCompileShader compileShader, AmdDxGsaCompileShaderInput &in,
+ AmdDxGsaCompileShaderOutput &out)
+{
+ __try
+ {
+ compileShader(&in, &out);
+ }
+ __except(EXCEPTION_EXECUTE_HANDLER)
+ {
+ out.pShaderBinary = NULL;
+ out.shaderBinarySize = 0;
+ }
+}
+
std::string DisassembleDXBC(const bytebuf &shaderBytes, const std::string &target)
{
HMODULE mod = GetAMDModule();
@@ -175,7 +189,7 @@ std::string DisassembleDXBC(const bytebuf &shaderBytes, const std::string &targe
out.size = sizeof(out);
- compileShader(&in, &out);
+ SafelyCompile(compileShader, in, out);
if(out.pShaderBinary == NULL || out.shaderBinarySize < 16)
return "; Failed to disassemble shader";
diff --git a/renderdoc/driver/ihv/amd/official/RGA/Common/asic_reg/devices.h b/renderdoc/driver/ihv/amd/official/RGA/Common/AsicReg/devices.h
similarity index 94%
rename from renderdoc/driver/ihv/amd/official/RGA/Common/asic_reg/devices.h
rename to renderdoc/driver/ihv/amd/official/RGA/Common/AsicReg/devices.h
index 7257c12ea..c1cc770f5 100644
--- a/renderdoc/driver/ihv/amd/official/RGA/Common/asic_reg/devices.h
+++ b/renderdoc/driver/ihv/amd/official/RGA/Common/AsicReg/devices.h
@@ -108,10 +108,15 @@ enum {
};
enum {
- AI_GD_P0 = 1,
- AI_GD_P1 = 2,
+ NV_NAVI10_P_A0 = 1
+};
- AI_UNKNOWN = 0xFF
+enum {
+ AI_GD_P0 = 1,
+ AI_GD_P1 = 2,
+ AI_VEGA12_P_A0 = 20,
+ AI_VEGA20_P_A0 = 40,
+ AI_UNKNOWN = 0xFF
};
#ifndef _ATIID_H
@@ -137,6 +142,8 @@ enum {
#define FAMILY_AI 141
+#define FAMILY_NV 143
+
#define ATI_VENDOR_ID 0x1002
diff --git a/renderdoc/driver/ihv/amd/official/RGA/Common/README.md b/renderdoc/driver/ihv/amd/official/RGA/Common/README.md
index 3cc738dba..1486b4b4d 100644
--- a/renderdoc/driver/ihv/amd/official/RGA/Common/README.md
+++ b/renderdoc/driver/ihv/amd/official/RGA/Common/README.md
@@ -1,2 +1,2 @@
-Taken from https://github.com/GPUOpen-Tools/RGA in RadeonGPUAnalyzerBackend/include @ 1507bb1ddbca5872fd5e30f7a26240fe674f428f
+Taken from https://github.com/GPUOpen-Tools/RGA in RadeonGPUAnalyzerBackend/include @ a13f242b3ce6dc9e49904c648b2552c9f80ddc6c