|
|
|
@@ -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");
|
|
|
|
|
}
|
|
|
|
|