ATOM-17132 Image builder failed to build some images after preset was fixed (#6900)

The issue was because the preset reload was only happened in CreateJobs but not ProcessJobs. But these two functions might be called from different AssetBuilder. The fix is to add preset reload for Processjobs too.
There was another change to add debug device name for streaming image.

Signed-off-by: Qing Tao <55564570+VickyAtAZ@users.noreply.github.com>
monroegm-disable-blank-issue-2
Qing Tao 4 years ago committed by GitHub
parent aa18deef5d
commit c9ee1f7871
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -226,6 +226,14 @@ namespace ImageProcessingAtom
MultiplatformTextureSettings settings;
PlatformNameList platformsList = BuilderSettingManager::Instance()->GetPlatformList();
PresetName suggestedPreset = BuilderSettingManager::Instance()->GetSuggestedPreset(imageFilepath);
// If the suggested preset doesn't exist (or was failed to be loaded), return empty texture settings
if (BuilderSettingManager::Instance()->GetPreset(suggestedPreset) == nullptr)
{
AZ_Error("Image Processing", false, "Failed to find suggested preset [%s]", suggestedPreset.GetCStr());
return settings;
}
for (PlatformName& platform : platformsList)
{
TextureSettings textureSettings;

@ -241,8 +241,7 @@ namespace ImageProcessingAtom
// Reload preset if it was changed
ImageProcessingAtom::BuilderSettingManager::Instance()->ReloadPreset(presetName);
AZStd::string_view filePath;
auto presetSettings = BuilderSettingManager::Instance()->GetPreset(presetName, /*default platform*/"", &filePath);
auto presetSettings = BuilderSettingManager::Instance()->GetPreset(presetName, /*default platform*/"");
AssetBuilderSDK::SourceFileDependency sourceFileDependency;
sourceFileDependency.m_sourceDependencyType = AssetBuilderSDK::SourceFileDependency::SourceFileDependencyType::Absolute;
@ -274,6 +273,32 @@ namespace ImageProcessingAtom
}
}
void ReloadPresetIfNeeded(PresetName presetName)
{
// Reload preset if it was changed
ImageProcessingAtom::BuilderSettingManager::Instance()->ReloadPreset(presetName);
auto presetSettings = BuilderSettingManager::Instance()->GetPreset(presetName, /*default platform*/"");
if (presetSettings)
{
// handle special case here
// Cubemap setting may reference some other presets
if (presetSettings->m_cubemapSetting)
{
if (presetSettings->m_cubemapSetting->m_generateIBLDiffuse && !presetSettings->m_cubemapSetting->m_iblDiffusePreset.IsEmpty())
{
ImageProcessingAtom::BuilderSettingManager::Instance()->ReloadPreset(presetSettings->m_cubemapSetting->m_iblDiffusePreset);
}
if (presetSettings->m_cubemapSetting->m_generateIBLSpecular && !presetSettings->m_cubemapSetting->m_iblSpecularPreset.IsEmpty())
{
ImageProcessingAtom::BuilderSettingManager::Instance()->ReloadPreset(presetSettings->m_cubemapSetting->m_iblSpecularPreset);
}
}
}
}
// this happens early on in the file scanning pass
// this function should consistently always create the same jobs, and should do no checking whether the job is up to date or not - just be consistent.
void ImageBuilderWorker::CreateJobs(const AssetBuilderSDK::CreateJobsRequest& request, AssetBuilderSDK::CreateJobsResponse& response)
@ -336,6 +361,11 @@ namespace ImageProcessingAtom
// Do conversion and get exported file's path
if (needConversion)
{
// Handles preset changes
auto presetName = GetImagePreset(request.m_fullPath);
ReloadPresetIfNeeded(presetName);
AZ_TracePrintf(AssetBuilderSDK::InfoWindow, "Performing image conversion: %s\n", request.m_fullPath.c_str());
ImageConvertProcess* process = CreateImageConvertProcess(request.m_fullPath, request.m_tempDirPath,
request.m_jobDescription.GetPlatformIdentifier(), response.m_outputProducts);

@ -143,11 +143,6 @@ namespace AZ
RHI::ResultCode resultCode = RHI::ResultCode::Success;
const ImageMipChainAsset& mipChainTailAsset = imageAsset.GetTailMipChain();
#ifdef AZ_RPI_STREAMING_IMAGE_DEBUG_LOG
m_image->SetName(Name(imageAsset.GetHint().c_str()));
AZ_TracePrintf("StreamingImage", "Init image [%s]\n", m_image->GetName().data());
#endif
{
RHI::StreamingImageInitRequest initRequest;
@ -193,6 +188,13 @@ namespace AZ
m_rhiPool = rhiPool;
m_pool = pool;
m_pool->AttachImage(this);
// Set rhi image name
m_image->SetName(Name(m_imageAsset.GetHint()));
#ifdef AZ_RPI_STREAMING_IMAGE_DEBUG_LOG
AZ_TracePrintf("StreamingImage", "Init image [%s]\n", m_image->GetName().data());
#endif
#if defined (AZ_RPI_STREAMING_IMAGE_HOT_RELOADING)
BusConnect(imageAsset.GetId());

Loading…
Cancel
Save