For GFX12, the workgroup id is passed in ttmp9 (trap temp register) instead of the scalar register.
Normal shader code (i.e. not priv, not trap handler) can only read the ttmp registers.

Signed-off-by: David Belanger <david.belanger@amd.com>
Change-Id: I42404d8c8c0ee9c746e23879fd30b2d16cfa1787
Signed-off-by: Chris Freehill <cfreehil@amd.com>


[ROCm/ROCR-Runtime commit: 40cc6559f1]
Этот коммит содержится в:
David Belanger
2023-06-26 16:55:21 -04:00
коммит произвёл Chris Freehill
родитель abc4fcabb5
Коммит 78221f3e9b
5 изменённых файлов: 77 добавлений и 50 удалений
+57 -45
Просмотреть файл
@@ -263,68 +263,77 @@ void GpuAgent::AssembleShader(const char* func_name, AssembleTarget assemble_tar
ASICShader compute_1010;
ASICShader compute_10;
ASICShader compute_11;
ASICShader compute_12;
};
std::map<std::string, CompiledShader> compiled_shaders = {
{"TrapHandler",
{
{NULL, 0, 0, 0}, // gfx7
{kCodeTrapHandler8, sizeof(kCodeTrapHandler8), 2, 4}, // gfx8
{kCodeTrapHandler9, sizeof(kCodeTrapHandler9), 2, 4}, // gfx9
{kCodeTrapHandler90a, sizeof(kCodeTrapHandler90a), 2, 4}, // gfx90a
{NULL, 0, 0, 0}, // gfx940
{NULL, 0, 0, 0}, // gfx942
{kCodeTrapHandler1010, sizeof(kCodeTrapHandler1010), 2, 4}, // gfx1010
{kCodeTrapHandler10, sizeof(kCodeTrapHandler10), 2, 4}, // gfx10
{NULL, 0, 0, 0}, // gfx11
{NULL, 0, 0, 0}, // gfx7
{kCodeTrapHandler8, sizeof(kCodeTrapHandler8), 2, 4}, // gfx8
{kCodeTrapHandler9, sizeof(kCodeTrapHandler9), 2, 4}, // gfx9
{kCodeTrapHandler90a, sizeof(kCodeTrapHandler90a), 2, 4}, // gfx90a
{NULL, 0, 0, 0}, // gfx940
{NULL, 0, 0, 0}, // gfx942
{kCodeTrapHandler1010, sizeof(kCodeTrapHandler1010), 2, 4}, // gfx1010
{kCodeTrapHandler10, sizeof(kCodeTrapHandler10), 2, 4}, // gfx10
{NULL, 0, 0, 0}, // gfx11
// GFX12_TODO: Using one for GFX10 for now.
// If NULL is used (like GFX11), get an assert.
{kCodeTrapHandler10, sizeof(kCodeTrapHandler10), 2, 4}, // gfx12
}},
{"TrapHandlerKfdExceptions",
{
{NULL, 0, 0, 0}, // gfx7
{kCodeTrapHandler8, sizeof(kCodeTrapHandler8), 2, 4}, // gfx8
{kCodeTrapHandlerV2_9, sizeof(kCodeTrapHandlerV2_9), 2, 4}, // gfx9
{kCodeTrapHandlerV2_9, sizeof(kCodeTrapHandlerV2_9), 2, 4}, // gfx90a
{kCodeTrapHandlerV2_940, sizeof(kCodeTrapHandlerV2_940), 2, 4}, // gfx940
{kCodeTrapHandlerV2_940, sizeof(kCodeTrapHandlerV2_940), 2, 4}, // gfx942
{kCodeTrapHandlerV2_1010, sizeof(kCodeTrapHandlerV2_1010), 2, 4}, // gfx1010
{kCodeTrapHandlerV2_10, sizeof(kCodeTrapHandlerV2_10), 2, 4}, // gfx10
{kCodeTrapHandlerV2_11, sizeof(kCodeTrapHandlerV2_11), 2, 4}, // gfx11
{NULL, 0, 0, 0}, // gfx7
{kCodeTrapHandler8, sizeof(kCodeTrapHandler8), 2, 4}, // gfx8
{kCodeTrapHandlerV2_9, sizeof(kCodeTrapHandlerV2_9), 2, 4}, // gfx9
{kCodeTrapHandlerV2_9, sizeof(kCodeTrapHandlerV2_9), 2, 4}, // gfx90a
{kCodeTrapHandlerV2_940, sizeof(kCodeTrapHandlerV2_940), 2, 4}, // gfx940
{kCodeTrapHandlerV2_940, sizeof(kCodeTrapHandlerV2_940), 2, 4}, // gfx942
{kCodeTrapHandlerV2_1010, sizeof(kCodeTrapHandlerV2_1010), 2, 4},// gfx1010
{kCodeTrapHandlerV2_10, sizeof(kCodeTrapHandlerV2_10), 2, 4}, // gfx10
{kCodeTrapHandlerV2_11, sizeof(kCodeTrapHandlerV2_11), 2, 4}, // gfx11
// GFX12_TODO: Using one for GFX11 for now.
{kCodeTrapHandlerV2_11, sizeof(kCodeTrapHandlerV2_11), 2, 4}, // gfx12
}},
{"CopyAligned",
{
{kCodeCopyAligned7, sizeof(kCodeCopyAligned7), 32, 12}, // gfx7
{kCodeCopyAligned8, sizeof(kCodeCopyAligned8), 32, 12}, // gfx8
{kCodeCopyAligned9, sizeof(kCodeCopyAligned9), 32, 12}, // gfx9
{kCodeCopyAligned9, sizeof(kCodeCopyAligned9), 32, 12}, // gfx90a
{kCodeCopyAligned940, sizeof(kCodeCopyAligned940), 32, 12}, // gfx940
{kCodeCopyAligned9, sizeof(kCodeCopyAligned9), 32, 12}, // gfx942
{kCodeCopyAligned10, sizeof(kCodeCopyAligned10), 32, 12}, // gfx1010
{kCodeCopyAligned10, sizeof(kCodeCopyAligned10), 32, 12}, // gfx10
{kCodeCopyAligned11, sizeof(kCodeCopyAligned11), 32, 12}, // gfx11
{kCodeCopyAligned7, sizeof(kCodeCopyAligned7), 32, 12}, // gfx7
{kCodeCopyAligned8, sizeof(kCodeCopyAligned8), 32, 12}, // gfx8
{kCodeCopyAligned9, sizeof(kCodeCopyAligned9), 32, 12}, // gfx9
{kCodeCopyAligned9, sizeof(kCodeCopyAligned9), 32, 12}, // gfx90a
{kCodeCopyAligned940, sizeof(kCodeCopyAligned940), 32, 12}, // gfx940
{kCodeCopyAligned9, sizeof(kCodeCopyAligned9), 32, 12}, // gfx942
{kCodeCopyAligned10, sizeof(kCodeCopyAligned10), 32, 12}, // gfx1010
{kCodeCopyAligned10, sizeof(kCodeCopyAligned10), 32, 12}, // gfx10
{kCodeCopyAligned11, sizeof(kCodeCopyAligned11), 32, 12}, // gfx11
{kCodeCopyAligned12, sizeof(kCodeCopyAligned12), 32, 12}, // gfx12
}},
{"CopyMisaligned",
{
{kCodeCopyMisaligned7, sizeof(kCodeCopyMisaligned7), 23, 10}, // gfx7
{kCodeCopyMisaligned8, sizeof(kCodeCopyMisaligned8), 23, 10}, // gfx8
{kCodeCopyMisaligned9, sizeof(kCodeCopyMisaligned9), 23, 10}, // gfx9
{kCodeCopyMisaligned9, sizeof(kCodeCopyMisaligned9), 23, 10}, // gfx90a
{kCodeCopyMisaligned940, sizeof(kCodeCopyMisaligned940), 23, 10}, // gfx940
{kCodeCopyMisaligned9, sizeof(kCodeCopyMisaligned9), 23, 10}, // gfx942
{kCodeCopyMisaligned10, sizeof(kCodeCopyMisaligned10), 23, 10}, // gfx1010
{kCodeCopyMisaligned10, sizeof(kCodeCopyMisaligned10), 23, 10}, // gfx10
{kCodeCopyMisaligned11, sizeof(kCodeCopyMisaligned11), 23, 10}, // gfx11
{kCodeCopyMisaligned7, sizeof(kCodeCopyMisaligned7), 23, 10}, // gfx7
{kCodeCopyMisaligned8, sizeof(kCodeCopyMisaligned8), 23, 10}, // gfx8
{kCodeCopyMisaligned9, sizeof(kCodeCopyMisaligned9), 23, 10}, // gfx9
{kCodeCopyMisaligned9, sizeof(kCodeCopyMisaligned9), 23, 10}, // gfx90a
{kCodeCopyMisaligned940, sizeof(kCodeCopyMisaligned940), 23, 10},// gfx940
{kCodeCopyMisaligned9, sizeof(kCodeCopyMisaligned9), 23, 10}, // gfx942
{kCodeCopyMisaligned10, sizeof(kCodeCopyMisaligned10), 23, 10}, // gfx1010
{kCodeCopyMisaligned10, sizeof(kCodeCopyMisaligned10), 23, 10}, // gfx10
{kCodeCopyMisaligned11, sizeof(kCodeCopyMisaligned11), 23, 10}, // gfx11
{kCodeCopyMisaligned12, sizeof(kCodeCopyMisaligned12), 23, 10}, // gfx12
}},
{"Fill",
{
{kCodeFill7, sizeof(kCodeFill7), 19, 8}, // gfx7
{kCodeFill8, sizeof(kCodeFill8), 19, 8}, // gfx8
{kCodeFill9, sizeof(kCodeFill9), 19, 8}, // gfx9
{kCodeFill9, sizeof(kCodeFill9), 19, 8}, // gfx90a
{kCodeFill940, sizeof(kCodeFill940), 19, 8}, // gfx940
{kCodeFill9, sizeof(kCodeFill9), 19, 8}, // gfx942
{kCodeFill10, sizeof(kCodeFill10), 19, 8}, // gfx1010
{kCodeFill10, sizeof(kCodeFill10), 19, 8}, // gfx10
{kCodeFill11, sizeof(kCodeFill11), 19, 8}, // gfx11
{kCodeFill7, sizeof(kCodeFill7), 19, 8}, // gfx7
{kCodeFill8, sizeof(kCodeFill8), 19, 8}, // gfx8
{kCodeFill9, sizeof(kCodeFill9), 19, 8}, // gfx9
{kCodeFill9, sizeof(kCodeFill9), 19, 8}, // gfx90a
{kCodeFill940, sizeof(kCodeFill940), 19, 8}, // gfx940
{kCodeFill9, sizeof(kCodeFill9), 19, 8}, // gfx942
{kCodeFill10, sizeof(kCodeFill10), 19, 8}, // gfx1010
{kCodeFill10, sizeof(kCodeFill10), 19, 8}, // gfx10
{kCodeFill11, sizeof(kCodeFill11), 19, 8}, // gfx11
{kCodeFill12, sizeof(kCodeFill12), 19, 8}, // gfx12
}}};
auto compiled_shader_it = compiled_shaders.find(func_name);
@@ -367,6 +376,9 @@ void GpuAgent::AssembleShader(const char* func_name, AssembleTarget assemble_tar
case 11:
asic_shader = &compiled_shader_it->second.compute_11;
break;
case 12:
asic_shader = &compiled_shader_it->second.compute_12;
break;
default:
assert(false && "Precompiled shader unavailable for target");
}
+3 -2
Просмотреть файл
@@ -49,9 +49,10 @@ find_package(Clang REQUIRED HINTS ${CMAKE_PREFIX_PATH}/llvm PATHS /opt/rocm/llvm
find_package(LLVM REQUIRED HINTS ${CMAKE_PREFIX_PATH}/llvm PATHS /opt/rocm/llvm )
# Set the target devices
set (TARGET_DEVS "gfx900;gfx940;gfx1010;gfx1030;gfx1100")
set (TARGET_DEVS "gfx900;gfx940;gfx1010;gfx1030;gfx1100;gfx1200")
# Set the postfix for each target device
set (POSTFIX "9;940;1010;10;11")
set (POSTFIX "9;940;1010;10;11;12")
# If verbose output is enabled, print paths and target devices
if(${CMAKE_VERBOSE_MAKEFILE})
+5 -1
Просмотреть файл
@@ -146,8 +146,12 @@ compute_pgm_rsrc1_vgprs = CopyAlignedRsrc1VGPRs
s_load_dword s24, s[0:1], 0x50
s_waitcnt lgkmcnt(0)
.if (.amdgcn.gfx_generation_number == 12)
s_lshl_b32 s2, ttmp9, 0x6
.else
s_lshl_b32 s2, s2, 0x6
.endif
V_ADD_CO_U32 v0, s2, v0
v_mov_b32 v3, s5
+6 -1
Просмотреть файл
@@ -117,7 +117,12 @@ CopyMisaligned:
s_load_dword s16, s[0:1], 0x30
s_waitcnt lgkmcnt(0)
s_lshl_b32 s2, s2, 0x6
.if (.amdgcn.gfx_generation_number == 12)
s_lshl_b32 s2, ttmp9, 0x6
.else
s_lshl_b32 s2, s2, 0x6
.endif
V_ADD_CO_U32 v0, s2, v0
v_mov_b32 v3, s5
+6 -1
Просмотреть файл
@@ -117,7 +117,12 @@ Fill:
s_load_dwordx4 s[8:11], s[0:1], 0x10
s_waitcnt lgkmcnt(0)
s_lshl_b32 s2, s2, 0x6
.if (.amdgcn.gfx_generation_number == 12)
s_lshl_b32 s2, ttmp9, 0x6
.else
s_lshl_b32 s2, s2, 0x6
.endif
V_ADD_CO_U32 v0, s2, v0
.macro mFillPattern iter iter_end