Skip to content

Commit

Permalink
Update llpc from commit 626bce4e
Browse files Browse the repository at this point in the history
lgc: Add ShaderDbg support for ElfLinker
lgc: Cooperative rowacc code clean up
lgc: finish builder-ification of PatchInOutImportExport
lgc: Fix cooperative matrix enum build error
lgc: Move cooperative matrix enum into lgcDialect
lgc: SamplePosOffset should be v2f32 instead of i32
lgc: Shrink down include list.
lgc: Support waveMatrix rowacc expand
lgc: Support waveMatrix rowacc scalar
lgc: Support waveMatrix rowacc splat (fill)
lgc: Support waveMatrix rowacc sum accumulate
lgc: Treat patch + GS w/o tess to be point mode
lgc: Undo moving code into LowerSubgroupOps
lgc: Use llvm-dialects with new name mangling
llpc: fix a corner case with LDS in task/mesh pipelines
[Continuations] Add _AmdContStackLoadLastUse builtin support.
[Continuations] Add _cont_-prefixed contants.
[Continuations] Do not change function name during linking
[Continuations] Do not remove types metadata
[Continuations] Fix continuations-units test warning.
[Continuations] Fix undef / poison test changes.
[Continuations] Fix use-after-free
[Continuations] Handle InstanceInclusionMaskOp
[Continuations] Handle mangled _AmdComplete calls.
[Continuations] Implement lgc.cps lowering in DXILContPostProcess.
[Continuations] Lower GetResumePoint
[Continuations] Pass GPURT library to LowerRaytracingPipelinePass
[Continuations] Process lgc.cps function with no await call correctly
[Continuations] Refactor DXILContIntrinsicPrepare
[Continuations] Refactor pipeline-scope payload size handling
[Continuations] Remove continuation.complete intrinsic.
[Continuations] Remove more deprecated 'startswith' calls.
[Continuations] Remove types metadata sometimes
[Continuations] Replace payload spill allocation with alloca.
[Continuations] Terminate shader after inlining _cont_SetupRayGen.
[RT] Bad code on calculating hash for RT pipeline which contains library
[RT] Fix tracedata for function return
[RT] Remove all unnecessary functions for Traversal
[RT] Replace deprecated startswith call.
[RT] Swap InstanceIndexOp and InstanceIdOp
[RT] Use more GpuRt Funcs instead of hardcoded ir.
[RT] use the getinstance index/id from gpurt directly.
Abort for -emit-llvm and color export shader
Add new field 'numComponents' to 'InOutInfo'
Add td file in cmake source files
Add the alignment for cooperativeMatrixLoad and cooperativeMatrixStore
Changes for non-intrisic debug info mode
Cleanup-gfx9: Remove check for major >= 9
Correct the condition for executing color export operation
Move shared/continuations/ to llvmraytracing/
Port the optimization for the pattern: ((b==0.0 ? 0.0 : a) * (a==0.0 ? 0.0 : b))
Preserve necessary _Amd function calls
rayquery: Add first version of lgc.rtq dialect
Refactor handleColorExportInstructions
Refine VKGC pipeline dump and vk sections in vfx
ShaderStages test check lines more flexible
Support PipelineShaderOptions::clientHash in pipeline hash calculation
Update llpc tests to allow for upstream llvm changes
Update to handle changes in PassModel parameters
Use VKI_ macros in llpc_version
Wrap PipelineContext and RaytracingContext in SPIRVReader.
Bump Gpurt Version to 45
Update llvm-dialects.
Fix Attributes for Cooperative Matrices
Fix fp and packed formats' norm emulation issue.
Fix RT demo perf-drop due to handling global access for null desc
Fix some CTS failures for dynamicDualSource on NAVI10
  • Loading branch information
qiaojbao committed Mar 26, 2024
1 parent 65196b5 commit 14535c0
Show file tree
Hide file tree
Showing 301 changed files with 17,559 additions and 11,650 deletions.
19 changes: 4 additions & 15 deletions cmake/continuations.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -25,21 +25,10 @@

set(LLPC_SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}/..")

include("${LLPC_SOURCE_DIR}/cmake/llpc_version.cmake")
include("${LLPC_SOURCE_DIR}/cmake/compilerutils.cmake")
include("${LLPC_SOURCE_DIR}/cmake/llvmraytracing.cmake")

# Macro to add continuations and its dependencies as LLVM external projects.
# This appends the project names to LLVM_EXTERNAL_PROJECTS and sets each LLVM_EXTERNAL_*_SOURCE_DIR,
# all in the caller's scope.
# Deprecated transition macro for refactoring transition; use add_llvmraytracing_projects instead
macro(add_continuations_projects)
add_llpc_version_projects()
add_compilerutils_projects()
if (NOT continuations IN_LIST LLVM_EXTERNAL_PROJECTS)
if (NOT llvm_dialects IN_LIST LLVM_EXTERNAL_PROJECTS)
list(APPEND LLVM_EXTERNAL_PROJECTS llvm_dialects)
set(LLVM_EXTERNAL_LLVM_DIALECTS_SOURCE_DIR "${LLPC_SOURCE_DIR}/imported/llvm-dialects")
endif()
list(APPEND LLVM_EXTERNAL_PROJECTS Continuations)
set(LLVM_EXTERNAL_CONTINUATIONS_SOURCE_DIR "${LLPC_SOURCE_DIR}/shared/continuations")
endif()
add_llvmraytracing_projects()
set(LLPC_RAYTRACING_ADD_TRANSITION_TARGETS ON)
endmacro()
4 changes: 2 additions & 2 deletions cmake/lgc.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -26,14 +26,14 @@
set(LLPC_SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}/..")

include("${LLPC_SOURCE_DIR}/cmake/llpc_version.cmake")
include("${LLPC_SOURCE_DIR}/cmake/continuations.cmake")
include("${LLPC_SOURCE_DIR}/cmake/llvmraytracing.cmake")

# Macro to add LGC and its dependencies as LLVM external projects.
# This appends the project names to LLVM_EXTERNAL_PROJECTS and sets each LLVM_EXTERNAL_*_SOURCE_DIR,
# all in the caller's scope.
macro(add_lgc_projects)
add_llpc_version_projects()
add_continuations_projects()
add_llvmraytracing_projects()
if (NOT lgc IN_LIST LLVM_EXTERNAL_PROJECTS)
if (NOT llvm_dialects IN_LIST LLVM_EXTERNAL_PROJECTS)
list(APPEND LLVM_EXTERNAL_PROJECTS llvm_dialects)
Expand Down
45 changes: 45 additions & 0 deletions cmake/llvmraytracing.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
##
#######################################################################################################################
#
# Copyright (c) 2023-2024 Advanced Micro Devices, Inc. All Rights Reserved.
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to
# deal in the Software without restriction, including without limitation the
# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
# sell copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
# IN THE SOFTWARE.
#
#######################################################################################################################

set(LLPC_SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}/..")

include("${LLPC_SOURCE_DIR}/cmake/llpc_version.cmake")
include("${LLPC_SOURCE_DIR}/cmake/compilerutils.cmake")

# Macro to add raytracing and its dependencies as LLVM external projects.
# This appends the project names to LLVM_EXTERNAL_PROJECTS and sets each LLVM_EXTERNAL_*_SOURCE_DIR,
# all in the caller's scope.
macro(add_llvmraytracing_projects)
add_llpc_version_projects()
add_compilerutils_projects()
if (NOT raytracing IN_LIST LLVM_EXTERNAL_PROJECTS)
if (NOT llvm_dialects IN_LIST LLVM_EXTERNAL_PROJECTS)
list(APPEND LLVM_EXTERNAL_PROJECTS llvm_dialects)
set(LLVM_EXTERNAL_LLVM_DIALECTS_SOURCE_DIR "${LLPC_SOURCE_DIR}/imported/llvm-dialects")
endif()
list(APPEND LLVM_EXTERNAL_PROJECTS raytracing)
set(LLVM_EXTERNAL_RAYTRACING_SOURCE_DIR "${LLPC_SOURCE_DIR}/llvmraytracing")
endif()
endmacro()
19 changes: 17 additions & 2 deletions compilerutils/lib/CompilerUtils.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,10 @@ Function *CompilerUtils::cloneFunctionHeader(Function &f, FunctionType *newType,
} else {
// Insert new function before f to facilitate writing tests
f.getParent()->getFunctionList().insert(f.getIterator(), newFunc);
#if !defined(LLVM_MAIN_REVISION) || LLVM_MAIN_REVISION >= 489715
// If targetModule is null then take flag from original function.
newFunc->setIsNewDbgInfoFormat(f.IsNewDbgInfoFormat);
#endif
}

newFunc->copyAttributesFrom(&f);
Expand All @@ -137,8 +141,8 @@ namespace {
std::string getCrossModuleName(GlobalValue &gv) {
if (auto *fn = dyn_cast<Function>(&gv)) {
// Intrinsics should not be renamed since the IR verifier insists on a "correct" name mangling based on any
// overloaded types.
if (fn->isIntrinsic())
// overloaded types. Lgc dialects also require exact name for similar reason.
if (fn->isIntrinsic() || fn->getName().starts_with("lgc."))
return fn->getName().str();
}
return (Twine(gv.getName()) + ".cloned." + gv.getParent()->getName()).str();
Expand Down Expand Up @@ -242,7 +246,17 @@ iterator_range<Function::iterator> CompilerUtils::CrossModuleInliner::inlineCall

// Copy code
InlineFunctionInfo ifi;
#if !defined(LLVM_MAIN_REVISION) || LLVM_MAIN_REVISION >= 489715
// calleeFunc is not from targetMod, check if we need to convert it.
bool shouldConvert = !calleeFunc->IsNewDbgInfoFormat && targetMod->IsNewDbgInfoFormat;
if (shouldConvert)
calleeFunc->convertToNewDbgValues();
#endif
auto res = InlineFunction(cb, ifi);
#if !defined(LLVM_MAIN_REVISION) || LLVM_MAIN_REVISION >= 489715
if (shouldConvert)
calleeFunc->convertFromNewDbgValues();
#endif
if (!res.isSuccess())
report_fatal_error(Twine("Failed to inline ") + calleeFunc->getName() + ": " + res.getFailureReason());

Expand Down Expand Up @@ -325,6 +339,7 @@ CompilerUtils::CrossModuleInliner::inlineCall(IRBuilder<> &b, llvm::Function *ca
result = fakeUse->getOperand(0);
fakeUse->eraseFromParent();
}

return {result, newBBs};
}

Expand Down
2 changes: 0 additions & 2 deletions include/gpurt-compiler.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,6 @@

#pragma once

#define MAKE_GPURT_VERSION(MAJOR, MINOR) ((MAJOR << 16) | MINOR)

namespace GpuRt {

#pragma pack(push, 4)
Expand Down
102 changes: 58 additions & 44 deletions include/vkgcDefs.h
Original file line number Diff line number Diff line change
Expand Up @@ -451,7 +451,7 @@ struct PipelineOptions {
///< depending the values of tessellation factors.
bool enableInterpModePatch; ///< If set, per-sample interpolation for nonperspective and smooth input is enabled
bool pageMigrationEnabled; ///< If set, page migration is enabled
uint32_t optimizationLevel; ///< The higher the number the more optimizations will be performed. Valid values are
unsigned optimizationLevel; ///< The higher the number the more optimizations will be performed. Valid values are
///< between 0 and 3.
unsigned overrideThreadGroupSizeX; ///< Override value for ThreadGroupSizeX
unsigned overrideThreadGroupSizeY; ///< Override value for ThreadGroupSizeY
Expand Down Expand Up @@ -517,21 +517,21 @@ struct ShaderModuleEntryData {
/// Represents the shader resources
struct ResourcesNodes {
ResourceNodeData *pInputInfo;
uint32_t inputInfoCount;
unsigned inputInfoCount;
ResourceNodeData *pOutputInfo;
uint32_t outputInfoCount;
unsigned outputInfoCount;
ResourceNodeData *pUniformBufferInfo;
uint32_t uniformBufferInfoCount;
unsigned uniformBufferInfoCount;
ResourceNodeData *pShaderStorageInfo;
uint32_t shaderStorageInfoCount;
unsigned shaderStorageInfoCount;
ResourceNodeData *pTexturesInfo;
uint32_t textureInfoCount;
unsigned textureInfoCount;
ResourceNodeData *pImagesInfo;
uint32_t imageInfoCount;
unsigned imageInfoCount;
ResourceNodeData *pAtomicCounterInfo;
uint32_t atomicCounterInfoCount;
unsigned atomicCounterInfoCount;
ResourceNodeData *pDefaultUniformInfo;
uint32_t defaultUniformInfoCount;
unsigned defaultUniformInfoCount;
};

/// Represents usage info of a shader module
Expand Down Expand Up @@ -567,6 +567,7 @@ struct ShaderModuleUsage {
unsigned localSizeY; ///< Compute shader work-group size in the Y dimension
unsigned localSizeZ; ///< Compute shader work-group size in the Z dimension
bool useBarycentric; ///< Whether to use gl_BarycentricXX or pervertexEXT decoration
bool disableDualSource; ///< Whether disable dualSource blend
};

/// Represents common part of shader module data
Expand Down Expand Up @@ -889,33 +890,33 @@ struct SamplerYCbCrConversionMetaData {

/// Represents assistant info for each vertex attribute in uber fetch shader
struct UberFetchShaderAttribInfo {
uint32_t binding : 8; ///< Attribute binding in vertex buffer table
uint32_t perInstance : 1; ///< Whether vertex input rate is per-instance
uint32_t isCurrent : 1; ///< Whether it is a current attribute
uint32_t isPacked : 1; ///< Whether it is a packed format
uint32_t isFixed : 1; ///< Whether it is a fixed format
uint32_t componentSize : 4; ///< Byte size per component
uint32_t componentMask : 4; ///< Component mask of this attribute.
uint32_t isBgra : 1; ///< Whether is BGRA format
uint32_t reserved : 11; ///< reserved bits in DWORD 0
uint32_t offset; ///< Attribute offset
uint32_t instanceDivisor; ///< Reciprocal of instance divisor
uint32_t bufferFormat; ///< Buffer format info. it is a copy of buffer SRD DWORD3.
unsigned binding : 8; ///< Attribute binding in vertex buffer table
unsigned perInstance : 1; ///< Whether vertex input rate is per-instance
unsigned isCurrent : 1; ///< Whether it is a current attribute
unsigned isPacked : 1; ///< Whether it is a packed format
unsigned isFixed : 1; ///< Whether it is a fixed format
unsigned componentSize : 4; ///< Byte size per component
unsigned componentMask : 4; ///< Component mask of this attribute.
unsigned isBgra : 1; ///< Whether is BGRA format
unsigned reserved : 11; ///< reserved bits in DWORD 0
unsigned offset; ///< Attribute offset
unsigned instanceDivisor; ///< Reciprocal of instance divisor
unsigned bufferFormat; ///< Buffer format info. it is a copy of buffer SRD DWORD3.
};

/// Represents the bit field info of struct BilUberFetchShaderAttribInfo
constexpr uint32_t UberFetchShaderAttribMaskBinding = 0x00000FFu;
constexpr uint32_t UberFetchShaderAttribMaskPerInstance = 0x0000100u;
constexpr uint32_t UberFetchShaderAttribMaskIsCurrent = 0x0000200u;
constexpr uint32_t UberFetchShaderAttribMaskIsPacked = 0x0000400u;
constexpr uint32_t UberFetchShaderAttribMaskIsFixed = 0x0000800u;
constexpr uint32_t UberFetchShaderAttribMaskComponentSize = 0x000F000u;
constexpr uint32_t UberFetchShaderAttribShiftComponentSize = 12u;
constexpr uint32_t UberFetchShaderAttribMaskComponent0 = 0x0010000u;
constexpr uint32_t UberFetchShaderAttribMaskComponent1 = 0x0020000u;
constexpr uint32_t UberFetchShaderAttribMaskComponent2 = 0x0040000u;
constexpr uint32_t UberFetchShaderAttribMaskComponent3 = 0x0080000u;
constexpr uint32_t UberFetchShaderAttribMaskIsBgra = 0x0100000u;
constexpr unsigned UberFetchShaderAttribMaskBinding = 0x00000FFu;
constexpr unsigned UberFetchShaderAttribMaskPerInstance = 0x0000100u;
constexpr unsigned UberFetchShaderAttribMaskIsCurrent = 0x0000200u;
constexpr unsigned UberFetchShaderAttribMaskIsPacked = 0x0000400u;
constexpr unsigned UberFetchShaderAttribMaskIsFixed = 0x0000800u;
constexpr unsigned UberFetchShaderAttribMaskComponentSize = 0x000F000u;
constexpr unsigned UberFetchShaderAttribShiftComponentSize = 12u;
constexpr unsigned UberFetchShaderAttribMaskComponent0 = 0x0010000u;
constexpr unsigned UberFetchShaderAttribMaskComponent1 = 0x0020000u;
constexpr unsigned UberFetchShaderAttribMaskComponent2 = 0x0040000u;
constexpr unsigned UberFetchShaderAttribMaskComponent3 = 0x0080000u;
constexpr unsigned UberFetchShaderAttribMaskIsBgra = 0x0100000u;

/// Represents the bit field info of struct BilUberFetchShaderAttribInfo

Expand Down Expand Up @@ -974,7 +975,7 @@ struct BvhShaderResourceDescriptor {
};

// Corresponds to gl_RayFlags* in GLSL_EXT_ray_tracing.txt
enum RayTracingRayFlag : uint32_t {
enum RayTracingRayFlag : unsigned {
RayTracingRayFlagNone = 0x00, // gl_RayFlagsNoneEXT
RayTracingRayFlagForceOpaque = 0x01, // gl_RayFlagsOpaqueEXT
RayTracingRayFlagForceNonOpaque = 0x02, // gl_RayFlagsNoOpaqueEXT
Expand Down Expand Up @@ -1130,8 +1131,8 @@ struct RtState {
};

struct UniformConstantMapEntry {
uint32_t location; ///< Starting location of the uniform constant variable
uint32_t offset; ///< Offset of the uniform constant variable in the final buffer
unsigned location; ///< Starting location of the uniform constant variable
unsigned offset; ///< Offset of the uniform constant variable in the final buffer
};

struct UniformConstantMap {
Expand Down Expand Up @@ -1250,15 +1251,28 @@ struct GraphicsPipelineBuildInfo {
#if LLPC_CLIENT_INTERFACE_MAJOR_VERSION < 62
BinaryData shaderLibrary; ///< SPIR-V library binary data
#endif
RtState rtState; ///< Ray tracing state
bool originUpperLeft; ///< Whether origin coordinate of framebuffer is upper-left.
const void *pClientMetadata; ///< Pointer to (optional) client-defined data to be stored inside the ELF
size_t clientMetadataSize; ///< Size (in bytes) of the client-defined data
unsigned numUniformConstantMaps; ///< Number of uniform constant maps
UniformConstantMap **ppUniformMaps; ///< Pointers to array of pointers for the uniform constant map.
ApiXfbOutData apiXfbOutData; ///< Transform feedback data specified by API interface.
bool vbAddressLowBitsKnown; ///< Whether vbAddressLowBits is valid
RtState rtState; ///< Ray tracing state
#if LLPC_CLIENT_INTERFACE_MAJOR_VERSION < 71
bool originUpperLeft; ///< Whether origin coordinate of framebuffer is upper-left.
unsigned numUniformConstantMaps; ///< Number of uniform constant maps
UniformConstantMap **ppUniformMaps; ///< Pointers to array of pointers for the uniform constant map.
ApiXfbOutData apiXfbOutData; ///< Transform feedback data specified by API interface.
bool vbAddressLowBitsKnown; ///< Whether vbAddressLowBits is valid
uint8_t vbAddressLowBits[MaxVertexBindings]; ///< Lowest two bits of vertex buffer addresses
const auto &getGlState() const { return *this; }
#else
struct {
bool originUpperLeft; ///< Whether origin coordinate of framebuffer is upper-left.
unsigned numUniformConstantMaps; ///< Number of uniform constant maps
UniformConstantMap **ppUniformMaps; ///< Pointers to array of pointers for the uniform constant map.
ApiXfbOutData apiXfbOutData; ///< Transform feedback data specified by API interface.
bool vbAddressLowBitsKnown; ///< Whether vbAddressLowBits is valid
uint8_t vbAddressLowBits[MaxVertexBindings]; ///< Lowest two bits of vertex buffer addresses
} glState;
const auto &getGlState() const { return glState; }
#endif
const void *pClientMetadata; ///< Pointer to (optional) client-defined data to be stored inside the ELF
size_t clientMetadataSize; ///< Size (in bytes) of the client-defined data
};

/// Represents info to build a compute pipeline.
Expand Down
13 changes: 10 additions & 3 deletions lgc/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ add_llvm_library(LLVMlgc LINK_COMPONENTS
Vectorize
)

llvm_map_components_to_libnames(extra_llvm_libs CompilerUtils Continuations)
llvm_map_components_to_libnames(extra_llvm_libs CompilerUtils Raytracing)
target_link_libraries(LLVMlgc PUBLIC llvm_dialects ${extra_llvm_libs} llpc_version)

### Cached Project Options #############################################################################################
Expand All @@ -65,7 +65,11 @@ set_compiler_options(LLVMlgc ${LLPC_ENABLE_WERROR})

### TableGen for LGC dialect ###########################################################################################

set(LGC_TABLEGEN_EXE $<TARGET_FILE:llvm-dialects-tblgen>)
if (EXISTS ${LLVM_TOOLS_BINARY_PATH}/llvm-dialects-tblgen)
set(LGC_TABLEGEN_EXE ${LLVM_TOOLS_BINARY_PATH}/llvm-dialects-tblgen)
else()
set(LGC_TABLEGEN_EXE $<TARGET_FILE:llvm-dialects-tblgen>)
endif()
set(LGC_TABLEGEN_TARGET llvm-dialects-tblgen)
set(LLVM_TARGET_DEFINITIONS interface/lgc/LgcDialect.td)

Expand Down Expand Up @@ -204,6 +208,9 @@ target_sources(LLVMlgc PRIVATE
util/StartStopTimer.cpp
)

# lgc/interface/lgc
target_sources(LLVMlgc PRIVATE interface/lgc/LgcDialect.td)

add_subdirectory(disassembler)
add_subdirectory(tool/lgc)
add_subdirectory(test)
Expand All @@ -212,4 +219,4 @@ if (LLPC_BUILD_TESTS)
add_subdirectory(unittests)
endif()

target_link_libraries(LLVMlgc PRIVATE LLVMContinuations)
target_link_libraries(LLVMlgc PRIVATE LLVMRaytracing)
Loading

0 comments on commit 14535c0

Please sign in to comment.