Skip to content

Commit

Permalink
Update xgl from commit 1df6731b
Browse files Browse the repository at this point in the history
Update Khronos Vulkan Headers to 1.3.287
Add localCreateInfo struct to OpenExternalMemory
Add some new runtime settings helpful for performance tuning
Cleanup Image.m_pSwapChain
Copy useSoftwareVertexBufferDescriptors for fast link
Disable packing for some formats due to dynamic vertex state
Increasing pushconstant size to 256
Log ResourceInfoUpdate of RT buffers
Refine CmdSetVertexBuffers
Remove the redundant code added for cooperativeMatrix support
Remove the workaround that enables padVertexBuffers for Zink
Support for LogRayTracingPipelineSummary
Update PAL Version to 880
VK_NV_Device_Generated_Commands: Indirect Pipeline Layout
Fix clang build error 'Wmissing-braces'
Fix enableColorExportShader option mistakenly enabled for a non-library shaders
Fix failure in dEQP-VK.pipeline.*.extended_dynamic_state.misc.dynamic_sample_shading_*
Fix OOB flag for vertex offset mode
Fix TeamFortress 2 crashes on launch
Fix undefined behavior when calling Util::Snprintf
  • Loading branch information
qiaojbao committed Jun 26, 2024
1 parent 3abea9d commit 5dd432a
Show file tree
Hide file tree
Showing 36 changed files with 918 additions and 441 deletions.
2 changes: 1 addition & 1 deletion cmake/XglVersions.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ include_guard()
# This will become the value of PAL_CLIENT_INTERFACE_MAJOR_VERSION. It describes the version of the PAL interface
# that the ICD supports. PAL uses this value to enable backwards-compatibility for older interface versions.
# It must be updated on each PAL promotion after handling all of the interface changes described in palLib.h.
set(ICD_PAL_CLIENT_MAJOR_VERSION "878")
set(ICD_PAL_CLIENT_MAJOR_VERSION "880")

# This will become the value of GPUOPEN_CLIENT_INTERFACE_MAJOR_VERSION if ICD_GPUOPEN_DEVMODE_BUILD=1.
# It describes the interface version of the gpuopen shared module (part of PAL) that the ICD supports.
Expand Down
4 changes: 2 additions & 2 deletions icd/Loader/LunarG/Lnx/amd-icd.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,13 @@
"file_format_version": "1.0.0",
"ICD": {
"library_path": "@AMDVLK_INSTALL_PATH@/amdvlk@[email protected]",
"api_version": "1.3.285"
"api_version": "1.3.287"
},
"layer": {
"name": "VK_LAYER_AMD_switchable_graphics_@ISABITS@",
"type": "GLOBAL",
"library_path": "@AMDVLK_INSTALL_PATH@/amdvlk@[email protected]",
"api_version": "1.3.285",
"api_version": "1.3.287",
"implementation_version": "1",
"description": "AMD switchable graphics layer",
"functions": {
Expand Down
1 change: 1 addition & 0 deletions icd/api/app_shader_optimizer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1166,6 +1166,7 @@ void ShaderOptimizer::BuildAppProfileGeneric()
{
const AppProfile appProfile = m_pDevice->GetAppProfile();
const Pal::GpuType gpuType = m_pDevice->VkPhysicalDevice(DefaultDeviceIndex)->PalProperties().gpuType;
const Pal::AsicRevision asicRevision = m_pDevice->VkPhysicalDevice(DefaultDeviceIndex)->PalProperties().revision;

uint32 i = 0;
}
Expand Down
4 changes: 3 additions & 1 deletion icd/api/compiler_solution_llpc.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -459,6 +459,7 @@ VkResult CompilerSolutionLlpc::CreateGraphicsShaderBinary(
int64_t startTime = Util::GetPerfCpuTime();

hasher.Update(pCreateInfo->libraryHash[gplType]);
hasher.Update(PipelineCompilerTypeLlpc);
hasher.Update(m_pPhysicalDevice->GetSettingsLoader()->GetSettingsHash());
hasher.Finalize(cacheId.bytes);

Expand Down Expand Up @@ -1203,7 +1204,8 @@ void CompilerSolutionLlpc::BuildPipelineInternalBufferData(
if (needUberFetchShaderBuffer)
{
uint32_t uberFetchShaderInternalDataSize = pCompiler->BuildUberFetchShaderInternalData(
pVertexInput, pCreateInfo->pipelineInfo.dynamicVertexStride, pInternalBufferInfo->pData);
pVertexInput, pCreateInfo->pipelineInfo.dynamicVertexStride,
pCreateInfo->pipelineInfo.useSoftwareVertexBufferDescriptors, pInternalBufferInfo->pData);

auto pBufferEntry = &pInternalBufferInfo->internalBufferEntries[0];
pBufferEntry->userDataOffset = uberFetchConstBufRegBase;
Expand Down
154 changes: 113 additions & 41 deletions icd/api/graphics_pipeline_common.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,12 @@ constexpr uint64_t PrsDynamicStatesMask = 0
// - VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE
// - VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE
// - VK_DYNAMIC_STATE_STENCIL_OP
// - VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT
// - VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT
// - VK_DYNAMIC_STATE_SAMPLE_MASK_EXT
// - VK_DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXT
// - VK_DYNAMIC_STATE_ALPHA_TO_ONE_ENABLE_EXT
// - VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT
constexpr uint64_t FgsDynamicStatesMask = 0
| (1ULL << static_cast<uint32_t>(DynamicStatesInternal::DepthBounds))
| (1ULL << static_cast<uint32_t>(DynamicStatesInternal::StencilCompareMask))
Expand All @@ -130,7 +136,13 @@ constexpr uint64_t FgsDynamicStatesMask = 0
| (1ULL << static_cast<uint32_t>(DynamicStatesInternal::DepthCompareOp))
| (1ULL << static_cast<uint32_t>(DynamicStatesInternal::DepthBoundsTestEnable))
| (1ULL << static_cast<uint32_t>(DynamicStatesInternal::StencilTestEnable))
| (1ULL << static_cast<uint32_t>(DynamicStatesInternal::StencilOp));
| (1ULL << static_cast<uint32_t>(DynamicStatesInternal::StencilOp))
| (1ULL << static_cast<uint32_t>(DynamicStatesInternal::SampleLocations))
| (1ULL << static_cast<uint32_t>(DynamicStatesInternal::SampleLocationsEnable))
| (1ULL << static_cast<uint32_t>(DynamicStatesInternal::SampleMask))
| (1ULL << static_cast<uint32_t>(DynamicStatesInternal::AlphaToCoverageEnable))
| (1ULL << static_cast<uint32_t>(DynamicStatesInternal::AlphaToOneEnable))
| (1ULL << static_cast<uint32_t>(DynamicStatesInternal::RasterizationSamples));

// =====================================================================================================================
// The dynamic states of Fragment Output Interface section
Expand All @@ -148,6 +160,7 @@ constexpr uint64_t FgsDynamicStatesMask = 0
// - VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT (not available)
// - VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT (not available)
// - VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT (not available)
// - VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR
constexpr uint64_t FoiDynamicStatesMask = 0
| (1ULL << static_cast<uint32_t>(DynamicStatesInternal::BlendConstants))
| (1ULL << static_cast<uint32_t>(DynamicStatesInternal::SampleLocations))
Expand All @@ -161,7 +174,8 @@ constexpr uint64_t FoiDynamicStatesMask = 0
| (1ULL << static_cast<uint32_t>(DynamicStatesInternal::ColorBlendEnable))
| (1ULL << static_cast<uint32_t>(DynamicStatesInternal::ColorBlendEquation))
| (1ULL << static_cast<uint32_t>(DynamicStatesInternal::ColorWriteMask))
| (1ULL << static_cast<uint32_t>(DynamicStatesInternal::SampleLocationsEnable));
| (1ULL << static_cast<uint32_t>(DynamicStatesInternal::SampleLocationsEnable))
| (1ULL << static_cast<uint32_t>(DynamicStatesInternal::FragmentShadingRateStateKhr));

// =====================================================================================================================
// Helper function used to check whether a specific dynamic state is set
Expand Down Expand Up @@ -625,7 +639,7 @@ uint64_t GraphicsPipelineCommon::GetDynamicStateFlags(
dynamicState |= fgsMask & (1ULL << static_cast<uint32_t>(DynamicStatesInternal::StencilReference));
break;
case VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR:
dynamicState |= fgsMask &
dynamicState |= (fgsMask | foiMask) &
(1ULL << static_cast<uint32_t>(DynamicStatesInternal::FragmentShadingRateStateKhr));
break;
case VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE:
Expand All @@ -651,24 +665,27 @@ uint64_t GraphicsPipelineCommon::GetDynamicStateFlags(
dynamicState |= foiMask & (1ULL << static_cast<uint32_t>(DynamicStatesInternal::BlendConstants));
break;
case VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT:
dynamicState |= foiMask & (1ULL << static_cast<uint32_t>(DynamicStatesInternal::SampleLocations));
dynamicState |= (fgsMask | foiMask) &
(1ULL << static_cast<uint32_t>(DynamicStatesInternal::SampleLocations));
break;
case VK_DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT:
dynamicState |= foiMask & (1ULL << static_cast<uint32_t>(DynamicStatesInternal::ColorWriteEnable));
break;
case VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT:
dynamicState |= foiMask &
dynamicState |= (fgsMask | foiMask) &
(1ULL << static_cast<uint32_t>(DynamicStatesInternal::RasterizationSamples));
break;
case VK_DYNAMIC_STATE_SAMPLE_MASK_EXT:
dynamicState |= foiMask & (1ULL << static_cast<uint32_t>(DynamicStatesInternal::SampleMask));
dynamicState |= (fgsMask | foiMask) &
(1ULL << static_cast<uint32_t>(DynamicStatesInternal::SampleMask));
break;
case VK_DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXT:
dynamicState |= foiMask &
dynamicState |= (fgsMask | foiMask) &
(1ULL << static_cast<uint32_t>(DynamicStatesInternal::AlphaToCoverageEnable));
break;
case VK_DYNAMIC_STATE_ALPHA_TO_ONE_ENABLE_EXT:
dynamicState |= foiMask & (1ULL << static_cast<uint32_t>(DynamicStatesInternal::AlphaToOneEnable));
dynamicState |= (fgsMask | foiMask) &
(1ULL << static_cast<uint32_t>(DynamicStatesInternal::AlphaToOneEnable));
break;
case VK_DYNAMIC_STATE_LOGIC_OP_ENABLE_EXT:
dynamicState |= foiMask & (1ULL << static_cast<uint32_t>(DynamicStatesInternal::LogicOpEnable));
Expand All @@ -683,7 +700,7 @@ uint64_t GraphicsPipelineCommon::GetDynamicStateFlags(
dynamicState |= foiMask & (1ULL << static_cast<uint32_t>(DynamicStatesInternal::ColorWriteMask));
break;
case VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT:
dynamicState |= foiMask &
dynamicState |= (fgsMask | foiMask) &
(1ULL << static_cast<uint32_t>(DynamicStatesInternal::SampleLocationsEnable));
break;
case VK_DYNAMIC_STATE_LOGIC_OP_EXT:
Expand All @@ -701,6 +718,7 @@ uint64_t GraphicsPipelineCommon::GetDynamicStateFlags(

// =====================================================================================================================
void GraphicsPipelineCommon::ExtractLibraryInfo(
const Device* pDevice,
const VkGraphicsPipelineCreateInfo* pCreateInfo,
const GraphicsPipelineExtStructs& extStructs,
VkPipelineCreateFlags2KHR flags,
Expand Down Expand Up @@ -762,6 +780,43 @@ void GraphicsPipelineCommon::ExtractLibraryInfo(
}
}
}

if ((pLibInfo->flags.isLibrary == false) &&
(pLibInfo->pPreRasterizationShaderLib != nullptr) ||
(pLibInfo->pFragmentShaderLib != nullptr))
{
uint64_t preRasterHash = 0;
uint64_t fragmentHash = 0;
if (pLibInfo->pPreRasterizationShaderLib != nullptr)
{
preRasterHash = pLibInfo->pPreRasterizationShaderLib->
GetPipelineBinaryCreateInfo().libraryHash[GraphicsLibraryPreRaster];
}
if (pLibInfo->pFragmentShaderLib != nullptr)
{
fragmentHash = pLibInfo->pFragmentShaderLib->
GetPipelineBinaryCreateInfo().libraryHash[GraphicsLibraryFragment];
}

PipelineCompilerType compilerType = pDevice->GetCompiler(DefaultDeviceIndex)->
CheckCompilerType<Vkgc::GraphicsPipelineBuildInfo>(nullptr, preRasterHash, fragmentHash);

if (pLibInfo->pPreRasterizationShaderLib != nullptr)
{
if (compilerType != pLibInfo->pPreRasterizationShaderLib->GetPipelineBinaryCreateInfo().compilerType)
{
pLibInfo->pPreRasterizationShaderLib = pLibInfo->pPreRasterizationShaderLib->GetAltLibrary();
}
}

if (pLibInfo->pFragmentShaderLib != nullptr)
{
if (compilerType != pLibInfo->pFragmentShaderLib->GetPipelineBinaryCreateInfo().compilerType)
{
pLibInfo->pFragmentShaderLib = pLibInfo->pFragmentShaderLib->GetAltLibrary();
}
}
}
}
}

Expand Down Expand Up @@ -829,8 +884,11 @@ VkResult GraphicsPipelineCommon::Create(

if ((flags & VK_PIPELINE_CREATE_LIBRARY_BIT_KHR) != 0)
{
result = GraphicsPipelineLibrary::Create(
pDevice, pPipelineCache, pCreateInfo, extStructs, flags, pAllocator, pPipeline);
uint32_t compilerMask = pDevice->GetCompiler(DefaultDeviceIndex)->GetCompilerCollectionMask();
{
result = GraphicsPipelineLibrary::Create(
pDevice, pPipelineCache, pCreateInfo, extStructs, flags, 0, pAllocator, pPipeline);
}
}
else
{
Expand Down Expand Up @@ -994,21 +1052,6 @@ static void BuildRasterizationState(
pInfo->pipeline.rsState.shadeMode = Pal::ShadeMode::Flat;
pInfo->pipeline.rsState.rasterizeLastLinePixel = 0;

// Pipeline Binning Override
switch (pDevice->GetPipelineBinningMode())
{
case PipelineBinningModeEnable:
pInfo->pipeline.rsState.binningOverride = Pal::BinningOverride::Enable;
break;
case PipelineBinningModeDisable:
pInfo->pipeline.rsState.binningOverride = Pal::BinningOverride::Disable;
break;
case PipelineBinningModeDefault:
default:
pInfo->pipeline.rsState.binningOverride = Pal::BinningOverride::Default;
break;
}

if (pRs != nullptr)
{
VK_ASSERT(pRs->sType == VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO);
Expand Down Expand Up @@ -2153,18 +2196,23 @@ static void BuildExecutablePipelineState(

// =====================================================================================================================
void GraphicsPipelineCommon::BuildPipelineObjectCreateInfo(
const Device* pDevice,
const VkGraphicsPipelineCreateInfo* pIn,
const GraphicsPipelineExtStructs& extStructs,
VkPipelineCreateFlags2KHR flags,
const PipelineOptimizerKey* pOptimizerKey,
const PipelineMetadata* pBinMeta,
GraphicsPipelineObjectCreateInfo* pInfo)
const Device* pDevice,
const VkGraphicsPipelineCreateInfo* pIn,
const GraphicsPipelineExtStructs& extStructs,
const GraphicsPipelineLibraryInfo& libInfo,
VkPipelineCreateFlags2KHR flags,
const PipelineOptimizerKey* pOptimizerKey,
const PipelineMetadata* pBinMeta,
GraphicsPipelineObjectCreateInfo* pInfo,
const GraphicsPipelineBinaryCreateInfo* pBinaryCreateInfo)
{
VK_ASSERT(pBinMeta != nullptr);

GraphicsPipelineLibraryInfo libInfo;
ExtractLibraryInfo(pIn, extStructs, flags, &libInfo);
pInfo->numTargets = 0;
for (uint32_t i = 0; i < MaxColorTargets; ++i)
{
pInfo->numTargets += pBinaryCreateInfo->pipelineInfo.cbState.target[i].channelWriteMask ? 1 : 0;
}

bool hasMesh = false;
#if VKI_RAY_TRACING
Expand Down Expand Up @@ -2242,6 +2290,34 @@ void GraphicsPipelineCommon::BuildPipelineObjectCreateInfo(
{
CopyFragmentOutputInterfaceState(libInfo.pFragmentOutputInterfaceLib, pInfo);
}

// Pipeline Binning Override
switch (pDevice->GetPipelineBinningMode())
{
case PipelineBinningModeEnable:
pInfo->pipeline.rsState.binningOverride = Pal::BinningOverride::Enable;
break;
case PipelineBinningModeDisable:
pInfo->pipeline.rsState.binningOverride = Pal::BinningOverride::Disable;
break;
case PipelineBinningModeDefault:
default:
pInfo->pipeline.rsState.binningOverride = Pal::BinningOverride::Default;
break;
}

// Override binning setting only when the shader has MRT >= 2
if (pInfo->numTargets >= 2)
{
if (pDevice->GetRuntimeSettings().binningOverridePbbForMrt == BinningOverridePbbForMrtEnable)
{
pInfo->pipeline.rsState.binningOverride = Pal::BinningOverride::Enable;
}
else if (pDevice->GetRuntimeSettings().binningOverridePbbForMrt == BinningOverridePbbForMrtDisable)
{
pInfo->pipeline.rsState.binningOverride = Pal::BinningOverride::Disable;
}
}
}

if (libInfo.flags.isLibrary == false)
Expand All @@ -2265,14 +2341,12 @@ void GraphicsPipelineCommon::GeneratePipelineOptimizerKey(
const Device* pDevice,
const VkGraphicsPipelineCreateInfo* pCreateInfo,
const GraphicsPipelineExtStructs& extStructs,
const GraphicsPipelineLibraryInfo& libInfo,
VkPipelineCreateFlags2KHR flags,
const GraphicsPipelineShaderStageInfo* pShaderStageInfo,
ShaderOptimizerKey* pShaderKeys,
PipelineOptimizerKey* pPipelineKey)
{
GraphicsPipelineLibraryInfo libInfo;
GraphicsPipelineCommon::ExtractLibraryInfo(pCreateInfo, extStructs, flags, &libInfo);

pPipelineKey->shaderCount = VK_ARRAY_SIZE(pShaderStageInfo->stages);
pPipelineKey->pShaders = pShaderKeys;

Expand Down Expand Up @@ -2940,16 +3014,14 @@ void GraphicsPipelineCommon::BuildApiHash(
const VkGraphicsPipelineCreateInfo* pCreateInfo,
VkPipelineCreateFlags2KHR flags,
const GraphicsPipelineExtStructs& extStructs,
const GraphicsPipelineLibraryInfo& libInfo,
const GraphicsPipelineBinaryCreateInfo& binaryCreateInfo,
uint64_t* pApiHash,
Util::MetroHash::Hash* pElfHash)
{
Util::MetroHash128 elfHasher;
Util::MetroHash128 apiHasher;

GraphicsPipelineLibraryInfo libInfo;
GraphicsPipelineCommon::ExtractLibraryInfo(pCreateInfo, extStructs, flags, &libInfo);

uint64_t dynamicStateFlags = GetDynamicStateFlags(pCreateInfo->pDynamicState, &libInfo);
elfHasher.Update(dynamicStateFlags);

Expand Down
Loading

0 comments on commit 5dd432a

Please sign in to comment.