|
@@ -470,106 +470,51 @@ namespace AZ
|
|
|
AZ_Error("DiffuseProbeGrid", m_prepareSrg.get(), "Failed to create Prepare shader resource group");
|
|
|
}
|
|
|
|
|
|
- RHI::ShaderInputBufferIndex bufferIndex;
|
|
|
- RHI::ShaderInputConstantIndex constantIndex;
|
|
|
+ m_prepareSrg->SetBufferView(m_renderData->m_prepareSrgGridDataNameIndex, m_gridDataBuffer->GetBufferView(m_renderData->m_gridDataBufferViewDescriptor).get());
|
|
|
+ m_prepareSrg->SetConstant(m_renderData->m_prepareSrgGridDataInitializedNameIndex, m_gridDataInitialized);
|
|
|
+ m_prepareSrg->SetConstant(m_renderData->m_prepareSrgProbeGridOriginNameIndex, m_transform.GetTranslation());
|
|
|
+ m_prepareSrg->SetConstant(m_renderData->m_prepareSrgProbeGridRotationNameIndex, m_transform.GetRotation());
|
|
|
+ m_prepareSrg->SetConstant(m_renderData->m_prepareSrgProbeGridProbeRayRotationNameIndex, m_probeRayRotation);
|
|
|
+ m_prepareSrg->SetConstant(m_renderData->m_prepareSrgProbeGridMovementTypeNameIndex, (uint32_t)m_scrolling);
|
|
|
+ m_prepareSrg->SetConstant(m_renderData->m_prepareSrgProbeGridProbeSpacingNameIndex, m_probeSpacing);
|
|
|
|
|
|
- bufferIndex = layout->FindShaderInputBufferIndex(AZ::Name("m_gridData"));
|
|
|
- m_prepareSrg->SetBufferView(bufferIndex, m_gridDataBuffer->GetBufferView(m_renderData->m_gridDataBufferViewDescriptor).get());
|
|
|
-
|
|
|
- constantIndex = layout->FindShaderInputConstantIndex(AZ::Name("m_gridDataInitialized"));
|
|
|
- m_prepareSrg->SetConstant(constantIndex, m_gridDataInitialized);
|
|
|
-
|
|
|
- constantIndex = layout->FindShaderInputConstantIndex(AZ::Name("m_probeGrid.origin"));
|
|
|
- m_prepareSrg->SetConstant(constantIndex, m_transform.GetTranslation());
|
|
|
-
|
|
|
- // pass identity for the rotation when scrolling is enabled
|
|
|
- constantIndex = layout->FindShaderInputConstantIndex(AZ::Name("m_probeGrid.rotation"));
|
|
|
- m_prepareSrg->SetConstant(constantIndex, m_transform.GetRotation());
|
|
|
-
|
|
|
- constantIndex = layout->FindShaderInputConstantIndex(AZ::Name("m_probeGrid.probeRayRotation"));
|
|
|
- m_prepareSrg->SetConstant(constantIndex, m_probeRayRotation);
|
|
|
-
|
|
|
- constantIndex = layout->FindShaderInputConstantIndex(AZ::Name("m_probeGrid.movementType"));
|
|
|
- m_prepareSrg->SetConstant(constantIndex, (uint32_t)m_scrolling);
|
|
|
-
|
|
|
- constantIndex = layout->FindShaderInputConstantIndex(AZ::Name("m_probeGrid.probeSpacing"));
|
|
|
- m_prepareSrg->SetConstant(constantIndex, m_probeSpacing);
|
|
|
-
|
|
|
- constantIndex = layout->FindShaderInputConstantIndex(AZ::Name("m_probeGrid.probeCounts"));
|
|
|
uint32_t probeGridCounts[3];
|
|
|
probeGridCounts[0] = m_probeCountX;
|
|
|
probeGridCounts[1] = m_probeCountY;
|
|
|
probeGridCounts[2] = m_probeCountZ;
|
|
|
- m_prepareSrg->SetConstantRaw(constantIndex, &probeGridCounts[0], sizeof(probeGridCounts));
|
|
|
-
|
|
|
- constantIndex = layout->FindShaderInputConstantIndex(AZ::Name("m_probeGrid.probeNumRays"));
|
|
|
- m_prepareSrg->SetConstant(constantIndex, GetNumRaysPerProbe().m_rayCount);
|
|
|
-
|
|
|
- constantIndex = layout->FindShaderInputConstantIndex(AZ::Name("m_probeGrid.probeNumIrradianceTexels"));
|
|
|
- m_prepareSrg->SetConstant(constantIndex, DefaultNumIrradianceTexels);
|
|
|
-
|
|
|
- constantIndex = layout->FindShaderInputConstantIndex(AZ::Name("m_probeGrid.probeNumDistanceTexels"));
|
|
|
- m_prepareSrg->SetConstant(constantIndex, DefaultNumDistanceTexels);
|
|
|
-
|
|
|
- constantIndex = layout->FindShaderInputConstantIndex(AZ::Name("m_probeGrid.probeHysteresis"));
|
|
|
- m_prepareSrg->SetConstant(constantIndex, m_probeHysteresis);
|
|
|
+ m_prepareSrg->SetConstantRaw(m_renderData->m_prepareSrgProbeGridProbeCountsNameIndex, &probeGridCounts[0], sizeof(probeGridCounts));
|
|
|
|
|
|
- constantIndex = layout->FindShaderInputConstantIndex(AZ::Name("m_probeGrid.probeMaxRayDistance"));
|
|
|
- m_prepareSrg->SetConstant(constantIndex, m_probeMaxRayDistance);
|
|
|
+ m_prepareSrg->SetConstant(m_renderData->m_prepareSrgProbeGridProbeNumRaysNameIndex, GetNumRaysPerProbe().m_rayCount);
|
|
|
+ m_prepareSrg->SetConstant(m_renderData->m_prepareSrgProbeGridProbeNumIrradianceTexelsNameIndex, DefaultNumIrradianceTexels);
|
|
|
+ m_prepareSrg->SetConstant(m_renderData->m_prepareSrgProbeGridProbeNumDistanceTexelsNameIndex, DefaultNumDistanceTexels);
|
|
|
+ m_prepareSrg->SetConstant(m_renderData->m_prepareSrgProbeGridProbeHysteresisNameIndex, m_probeHysteresis);
|
|
|
+ m_prepareSrg->SetConstant(m_renderData->m_prepareSrgProbeGridProbeMaxRayDistanceNameIndex, m_probeMaxRayDistance);
|
|
|
|
|
|
// scale the normal bias based on the grid density to reduce artifacts on thin geometry, less density results in more bias
|
|
|
float scaledNormalBias = m_normalBias + 0.15f * (m_probeSpacing.GetMaxElement() / 2.0f);
|
|
|
- constantIndex = layout->FindShaderInputConstantIndex(AZ::Name("m_probeGrid.probeNormalBias"));
|
|
|
- m_prepareSrg->SetConstant(constantIndex, scaledNormalBias);
|
|
|
+ m_prepareSrg->SetConstant(m_renderData->m_prepareSrgProbeGridProbeNormalBiasNameIndex, scaledNormalBias);
|
|
|
|
|
|
- constantIndex = layout->FindShaderInputConstantIndex(AZ::Name("m_probeGrid.probeViewBias"));
|
|
|
- m_prepareSrg->SetConstant(constantIndex, m_viewBias);
|
|
|
+ m_prepareSrg->SetConstant(m_renderData->m_prepareSrgProbeGridProbeViewBiasNameIndex, m_viewBias);
|
|
|
|
|
|
// scale the probe distance exponent based on the grid density to reduce artifacts on thin geometry
|
|
|
static const float MinProbeDistanceExponent = 50.0f;
|
|
|
float scaledProbeDistanceExponent = AZStd::max(m_probeDistanceExponent * (m_probeSpacing.GetMaxElement() / 1.5f), MinProbeDistanceExponent);
|
|
|
- constantIndex = layout->FindShaderInputConstantIndex(AZ::Name("m_probeGrid.probeDistanceExponent"));
|
|
|
- m_prepareSrg->SetConstant(constantIndex, scaledProbeDistanceExponent);
|
|
|
-
|
|
|
- constantIndex = layout->FindShaderInputConstantIndex(AZ::Name("m_probeGrid.probeIrradianceThreshold"));
|
|
|
- m_prepareSrg->SetConstant(constantIndex, m_probeIrradianceThreshold);
|
|
|
-
|
|
|
- constantIndex = layout->FindShaderInputConstantIndex(AZ::Name("m_probeGrid.probeBrightnessThreshold"));
|
|
|
- m_prepareSrg->SetConstant(constantIndex, m_probeBrightnessThreshold);
|
|
|
-
|
|
|
- constantIndex = layout->FindShaderInputConstantIndex(AZ::Name("m_probeGrid.probeIrradianceEncodingGamma"));
|
|
|
- m_prepareSrg->SetConstant(constantIndex, m_probeIrradianceEncodingGamma);
|
|
|
-
|
|
|
- constantIndex = layout->FindShaderInputConstantIndex(AZ::Name("m_probeGrid.probeRandomRayBackfaceThreshold"));
|
|
|
- m_prepareSrg->SetConstant(constantIndex, m_probeRandomRayBackfaceThreshold);
|
|
|
-
|
|
|
- constantIndex = layout->FindShaderInputConstantIndex(AZ::Name("m_probeGrid.probeFixedRayBackfaceThreshold"));
|
|
|
- m_prepareSrg->SetConstant(constantIndex, m_probeFixedRayBackfaceThreshold);
|
|
|
-
|
|
|
- constantIndex = layout->FindShaderInputConstantIndex(AZ::Name("m_probeGrid.probeMinFrontfaceDistance"));
|
|
|
- m_prepareSrg->SetConstant(constantIndex, m_probeMinFrontfaceDistance);
|
|
|
-
|
|
|
- constantIndex = layout->FindShaderInputConstantIndex(AZ::Name("m_probeGrid.probeScrollOffsets"));
|
|
|
- m_prepareSrg->SetConstant(constantIndex, Vector3::CreateZero());
|
|
|
-
|
|
|
- constantIndex = layout->FindShaderInputConstantIndex(AZ::Name("m_probeGrid.probeRayDataFormat"));
|
|
|
- m_prepareSrg->SetConstant(constantIndex, 1);
|
|
|
-
|
|
|
- constantIndex = layout->FindShaderInputConstantIndex(AZ::Name("m_probeGrid.probeIrradianceFormat"));
|
|
|
- m_prepareSrg->SetConstant(constantIndex, 1);
|
|
|
-
|
|
|
- constantIndex = layout->FindShaderInputConstantIndex(AZ::Name("m_probeGrid.probeRelocationEnabled"));
|
|
|
- m_prepareSrg->SetConstant(constantIndex, true);
|
|
|
-
|
|
|
- constantIndex = layout->FindShaderInputConstantIndex(AZ::Name("m_probeGrid.probeClassificationEnabled"));
|
|
|
- m_prepareSrg->SetConstant(constantIndex, true);
|
|
|
-
|
|
|
- constantIndex = layout->FindShaderInputConstantIndex(AZ::Name("m_probeGrid.probeScrollClear[0]"));
|
|
|
- m_prepareSrg->SetConstant(constantIndex, false);
|
|
|
- constantIndex = layout->FindShaderInputConstantIndex(AZ::Name("m_probeGrid.probeScrollClear[1]"));
|
|
|
- m_prepareSrg->SetConstant(constantIndex, false);
|
|
|
- constantIndex = layout->FindShaderInputConstantIndex(AZ::Name("m_probeGrid.probeScrollClear[2]"));
|
|
|
- m_prepareSrg->SetConstant(constantIndex, false);
|
|
|
+ m_prepareSrg->SetConstant(m_renderData->m_prepareSrgProbeGridProbeDistanceExponentNameIndex, scaledProbeDistanceExponent);
|
|
|
+
|
|
|
+ m_prepareSrg->SetConstant(m_renderData->m_prepareSrgProbeGridProbeIrradianceThresholdNameIndex, m_probeIrradianceThreshold);
|
|
|
+ m_prepareSrg->SetConstant(m_renderData->m_prepareSrgProbeGridProbeBrightnessThresholdNameIndex, m_probeBrightnessThreshold);
|
|
|
+ m_prepareSrg->SetConstant(m_renderData->m_prepareSrgProbeGridProbeIrradianceEncodingGammaNameIndex, m_probeIrradianceEncodingGamma);
|
|
|
+ m_prepareSrg->SetConstant(m_renderData->m_prepareSrgProbeGridProbeRandomRayBackfaceThresholdNameIndex, m_probeRandomRayBackfaceThreshold);
|
|
|
+ m_prepareSrg->SetConstant(m_renderData->m_prepareSrgProbeGridProbeFixedRayBackfaceThresholdNameIndex, m_probeFixedRayBackfaceThreshold);
|
|
|
+ m_prepareSrg->SetConstant(m_renderData->m_prepareSrgProbeGridProbeMinFrontfaceDistanceNameIndex, m_probeMinFrontfaceDistance);
|
|
|
+ m_prepareSrg->SetConstant(m_renderData->m_prepareSrgProbeGridProbeScrollOffsetsNameIndex, Vector3::CreateZero());
|
|
|
+ m_prepareSrg->SetConstant(m_renderData->m_prepareSrgProbeGridProbeRayDataFormatNameIndex, 1);
|
|
|
+ m_prepareSrg->SetConstant(m_renderData->m_prepareSrgProbeGridProbeIrradianceFormatNameIndex, 1);
|
|
|
+ m_prepareSrg->SetConstant(m_renderData->m_prepareSrgProbeGridProbeRelocationEnabledNameIndex, true);
|
|
|
+ m_prepareSrg->SetConstant(m_renderData->m_prepareSrgProbeGridProbeClassificationEnabledNameIndex, true);
|
|
|
+ m_prepareSrg->SetConstant(m_renderData->m_prepareSrgProbeGridProbeScrollClear0NameIndex, false);
|
|
|
+ m_prepareSrg->SetConstant(m_renderData->m_prepareSrgProbeGridProbeScrollClear1NameIndex, false);
|
|
|
+ m_prepareSrg->SetConstant(m_renderData->m_prepareSrgProbeGridProbeScrollClear2NameIndex, false);
|
|
|
|
|
|
m_gridDataInitialized = true;
|
|
|
}
|
|
@@ -582,49 +527,18 @@ namespace AZ
|
|
|
AZ_Error("DiffuseProbeGrid", m_rayTraceSrg.get(), "Failed to create RayTrace shader resource group");
|
|
|
}
|
|
|
|
|
|
- const RHI::ShaderResourceGroupLayout* srgLayout = m_rayTraceSrg->GetLayout();
|
|
|
- RHI::ShaderInputConstantIndex constantIndex;
|
|
|
- RHI::ShaderInputImageIndex imageIndex;
|
|
|
- RHI::ShaderInputBufferIndex bufferIndex;
|
|
|
-
|
|
|
- // grid data
|
|
|
- bufferIndex = srgLayout->FindShaderInputBufferIndex(AZ::Name("m_gridData"));
|
|
|
- m_rayTraceSrg->SetBufferView(bufferIndex, m_gridDataBuffer->GetBufferView(m_renderData->m_gridDataBufferViewDescriptor).get());
|
|
|
-
|
|
|
- // probe raytrace
|
|
|
- imageIndex = srgLayout->FindShaderInputImageIndex(AZ::Name("m_probeRayTrace"));
|
|
|
- m_rayTraceSrg->SetImageView(imageIndex, m_rayTraceImage[m_currentImageIndex]->GetImageView(m_renderData->m_probeRayTraceImageViewDescriptor).get());
|
|
|
-
|
|
|
- // probe irradiance
|
|
|
- imageIndex = srgLayout->FindShaderInputImageIndex(AZ::Name("m_probeIrradiance"));
|
|
|
- m_rayTraceSrg->SetImageView(imageIndex, m_irradianceImage[m_currentImageIndex]->GetImageView(m_renderData->m_probeIrradianceImageViewDescriptor).get());
|
|
|
-
|
|
|
- // probe distance
|
|
|
- imageIndex = srgLayout->FindShaderInputImageIndex(AZ::Name("m_probeDistance"));
|
|
|
- m_rayTraceSrg->SetImageView(imageIndex, m_distanceImage[m_currentImageIndex]->GetImageView(m_renderData->m_probeDistanceImageViewDescriptor).get());
|
|
|
-
|
|
|
- // probe data
|
|
|
- imageIndex = srgLayout->FindShaderInputImageIndex(AZ::Name("m_probeData"));
|
|
|
- m_rayTraceSrg->SetImageView(imageIndex, m_probeDataImage[m_currentImageIndex]->GetImageView(m_renderData->m_probeDataImageViewDescriptor).get());
|
|
|
-
|
|
|
- // grid settings
|
|
|
- constantIndex = srgLayout->FindShaderInputConstantIndex(Name("m_ambientMultiplier"));
|
|
|
- m_rayTraceSrg->SetConstant(constantIndex, m_ambientMultiplier);
|
|
|
-
|
|
|
- constantIndex = srgLayout->FindShaderInputConstantIndex(Name("m_giShadows"));
|
|
|
- m_rayTraceSrg->SetConstant(constantIndex, m_giShadows);
|
|
|
-
|
|
|
- constantIndex = srgLayout->FindShaderInputConstantIndex(Name("m_useDiffuseIbl"));
|
|
|
- m_rayTraceSrg->SetConstant(constantIndex, m_useDiffuseIbl);
|
|
|
-
|
|
|
- constantIndex = srgLayout->FindShaderInputConstantIndex(Name("m_frameUpdateCount"));
|
|
|
- m_rayTraceSrg->SetConstant(constantIndex, m_frameUpdateCount);
|
|
|
-
|
|
|
- constantIndex = srgLayout->FindShaderInputConstantIndex(Name("m_frameUpdateIndex"));
|
|
|
- m_rayTraceSrg->SetConstant(constantIndex, m_frameUpdateIndex);
|
|
|
-
|
|
|
- constantIndex = srgLayout->FindShaderInputConstantIndex(Name("m_transparencyMode"));
|
|
|
- m_rayTraceSrg->SetConstant(constantIndex, aznumeric_cast<uint32_t>(m_transparencyMode));
|
|
|
+ m_rayTraceSrg->SetBufferView(m_renderData->m_rayTraceSrgGridDataNameIndex, m_gridDataBuffer->GetBufferView(m_renderData->m_gridDataBufferViewDescriptor).get());
|
|
|
+ m_rayTraceSrg->SetImageView(m_renderData->m_rayTraceSrgProbeRayTraceNameIndex, m_rayTraceImage[m_currentImageIndex]->GetImageView(m_renderData->m_probeRayTraceImageViewDescriptor).get());
|
|
|
+ m_rayTraceSrg->SetImageView(m_renderData->m_rayTraceSrgProbeIrradianceNameIndex, m_irradianceImage[m_currentImageIndex]->GetImageView(m_renderData->m_probeIrradianceImageViewDescriptor).get());
|
|
|
+ m_rayTraceSrg->SetImageView(m_renderData->m_rayTraceSrgProbeDistanceNameIndex, m_distanceImage[m_currentImageIndex]->GetImageView(m_renderData->m_probeDistanceImageViewDescriptor).get());
|
|
|
+ m_rayTraceSrg->SetImageView(m_renderData->m_rayTraceSrgProbeDataNameIndex, m_probeDataImage[m_currentImageIndex]->GetImageView(m_renderData->m_probeDataImageViewDescriptor).get());
|
|
|
+ m_rayTraceSrg->SetConstant(m_renderData->m_rayTraceSrgAmbientMultiplierNameIndex, m_ambientMultiplier);
|
|
|
+ m_rayTraceSrg->SetConstant(m_renderData->m_rayTraceSrgGiShadowsNameIndex, m_giShadows);
|
|
|
+ m_rayTraceSrg->SetConstant(m_renderData->m_rayTraceSrgUseDiffuseIblNameIndex, m_useDiffuseIbl);
|
|
|
+ m_rayTraceSrg->SetConstant(m_renderData->m_rayTraceSrgFrameUpdateCountNameIndex, m_frameUpdateCount);
|
|
|
+ m_rayTraceSrg->SetConstant(m_renderData->m_rayTraceSrgFrameUpdateIndexNameIndex, m_frameUpdateIndex);
|
|
|
+ m_rayTraceSrg->SetConstant(m_renderData->m_rayTraceSrgTransparencyModeNameIndex, aznumeric_cast<uint32_t>(m_transparencyMode));
|
|
|
+ m_rayTraceSrg->SetConstant(m_renderData->m_rayTraceSrgEmissiveMultiplierNameIndex, m_emissiveMultiplier);
|
|
|
}
|
|
|
|
|
|
void DiffuseProbeGrid::UpdateBlendIrradianceSrg(const Data::Instance<RPI::Shader>& shader, const RHI::Ptr<RHI::ShaderResourceGroupLayout>& layout)
|
|
@@ -635,28 +549,12 @@ namespace AZ
|
|
|
AZ_Error("DiffuseProbeGrid", m_blendIrradianceSrg.get(), "Failed to create BlendIrradiance shader resource group");
|
|
|
}
|
|
|
|
|
|
- const RHI::ShaderResourceGroupLayout* srgLayout = m_blendIrradianceSrg->GetLayout();
|
|
|
- RHI::ShaderInputConstantIndex constantIndex;
|
|
|
- RHI::ShaderInputImageIndex imageIndex;
|
|
|
- RHI::ShaderInputBufferIndex bufferIndex;
|
|
|
-
|
|
|
- bufferIndex = srgLayout->FindShaderInputBufferIndex(AZ::Name("m_gridData"));
|
|
|
- m_blendIrradianceSrg->SetBufferView(bufferIndex, m_gridDataBuffer->GetBufferView(m_renderData->m_gridDataBufferViewDescriptor).get());
|
|
|
-
|
|
|
- imageIndex = srgLayout->FindShaderInputImageIndex(AZ::Name("m_probeRayTrace"));
|
|
|
- m_blendIrradianceSrg->SetImageView(imageIndex, m_rayTraceImage[m_currentImageIndex]->GetImageView(m_renderData->m_probeRayTraceImageViewDescriptor).get());
|
|
|
-
|
|
|
- imageIndex = srgLayout->FindShaderInputImageIndex(AZ::Name("m_probeIrradiance"));
|
|
|
- m_blendIrradianceSrg->SetImageView(imageIndex, m_irradianceImage[m_currentImageIndex]->GetImageView(m_renderData->m_probeIrradianceImageViewDescriptor).get());
|
|
|
-
|
|
|
- imageIndex = srgLayout->FindShaderInputImageIndex(AZ::Name("m_probeData"));
|
|
|
- m_blendIrradianceSrg->SetImageView(imageIndex, m_probeDataImage[m_currentImageIndex]->GetImageView(m_renderData->m_probeDataImageViewDescriptor).get());
|
|
|
-
|
|
|
- constantIndex = srgLayout->FindShaderInputConstantIndex(Name("m_frameUpdateCount"));
|
|
|
- m_blendIrradianceSrg->SetConstant(constantIndex, m_frameUpdateCount);
|
|
|
-
|
|
|
- constantIndex = srgLayout->FindShaderInputConstantIndex(Name("m_frameUpdateIndex"));
|
|
|
- m_blendIrradianceSrg->SetConstant(constantIndex, m_frameUpdateIndex);
|
|
|
+ m_blendIrradianceSrg->SetBufferView(m_renderData->m_blendIrradianceSrgGridDataNameIndex, m_gridDataBuffer->GetBufferView(m_renderData->m_gridDataBufferViewDescriptor).get());
|
|
|
+ m_blendIrradianceSrg->SetImageView(m_renderData->m_blendIrradianceSrgProbeRayTraceNameIndex, m_rayTraceImage[m_currentImageIndex]->GetImageView(m_renderData->m_probeRayTraceImageViewDescriptor).get());
|
|
|
+ m_blendIrradianceSrg->SetImageView(m_renderData->m_blendIrradianceSrgProbeIrradianceNameIndex, m_irradianceImage[m_currentImageIndex]->GetImageView(m_renderData->m_probeIrradianceImageViewDescriptor).get());
|
|
|
+ m_blendIrradianceSrg->SetImageView(m_renderData->m_blendIrradianceSrgProbeDataNameIndex, m_probeDataImage[m_currentImageIndex]->GetImageView(m_renderData->m_probeDataImageViewDescriptor).get());
|
|
|
+ m_blendIrradianceSrg->SetConstant(m_renderData->m_blendIrradianceSrgFrameUpdateCountNameIndex, m_frameUpdateCount);
|
|
|
+ m_blendIrradianceSrg->SetConstant(m_renderData->m_blendIrradianceSrgFrameUpdateIndexNameIndex, m_frameUpdateIndex);
|
|
|
}
|
|
|
|
|
|
void DiffuseProbeGrid::UpdateBlendDistanceSrg(const Data::Instance<RPI::Shader>& shader, const RHI::Ptr<RHI::ShaderResourceGroupLayout>& layout)
|
|
@@ -667,28 +565,12 @@ namespace AZ
|
|
|
AZ_Error("DiffuseProbeGrid", m_blendDistanceSrg.get(), "Failed to create BlendDistance shader resource group");
|
|
|
}
|
|
|
|
|
|
- const RHI::ShaderResourceGroupLayout* srgLayout = m_blendDistanceSrg->GetLayout();
|
|
|
- RHI::ShaderInputConstantIndex constantIndex;
|
|
|
- RHI::ShaderInputImageIndex imageIndex;
|
|
|
- RHI::ShaderInputBufferIndex bufferIndex;
|
|
|
-
|
|
|
- bufferIndex = srgLayout->FindShaderInputBufferIndex(AZ::Name("m_gridData"));
|
|
|
- m_blendDistanceSrg->SetBufferView(bufferIndex, m_gridDataBuffer->GetBufferView(m_renderData->m_gridDataBufferViewDescriptor).get());
|
|
|
-
|
|
|
- imageIndex = srgLayout->FindShaderInputImageIndex(AZ::Name("m_probeRayTrace"));
|
|
|
- m_blendDistanceSrg->SetImageView(imageIndex, m_rayTraceImage[m_currentImageIndex]->GetImageView(m_renderData->m_probeRayTraceImageViewDescriptor).get());
|
|
|
-
|
|
|
- imageIndex = srgLayout->FindShaderInputImageIndex(AZ::Name("m_probeDistance"));
|
|
|
- m_blendDistanceSrg->SetImageView(imageIndex, m_distanceImage[m_currentImageIndex]->GetImageView(m_renderData->m_probeDistanceImageViewDescriptor).get());
|
|
|
-
|
|
|
- imageIndex = srgLayout->FindShaderInputImageIndex(AZ::Name("m_probeData"));
|
|
|
- m_blendDistanceSrg->SetImageView(imageIndex, m_probeDataImage[m_currentImageIndex]->GetImageView(m_renderData->m_probeDataImageViewDescriptor).get());
|
|
|
-
|
|
|
- constantIndex = srgLayout->FindShaderInputConstantIndex(Name("m_frameUpdateCount"));
|
|
|
- m_blendDistanceSrg->SetConstant(constantIndex, m_frameUpdateCount);
|
|
|
-
|
|
|
- constantIndex = srgLayout->FindShaderInputConstantIndex(Name("m_frameUpdateIndex"));
|
|
|
- m_blendDistanceSrg->SetConstant(constantIndex, m_frameUpdateIndex);
|
|
|
+ m_blendDistanceSrg->SetBufferView(m_renderData->m_blendDistanceSrgGridDataNameIndex, m_gridDataBuffer->GetBufferView(m_renderData->m_gridDataBufferViewDescriptor).get());
|
|
|
+ m_blendDistanceSrg->SetImageView(m_renderData->m_blendDistanceSrgProbeRayTraceNameIndex, m_rayTraceImage[m_currentImageIndex]->GetImageView(m_renderData->m_probeRayTraceImageViewDescriptor).get());
|
|
|
+ m_blendDistanceSrg->SetImageView(m_renderData->m_blendDistanceSrgProbeDistanceNameIndex, m_distanceImage[m_currentImageIndex]->GetImageView(m_renderData->m_probeDistanceImageViewDescriptor).get());
|
|
|
+ m_blendDistanceSrg->SetImageView(m_renderData->m_blendDistanceSrgProbeDataNameIndex, m_probeDataImage[m_currentImageIndex]->GetImageView(m_renderData->m_probeDataImageViewDescriptor).get());
|
|
|
+ m_blendDistanceSrg->SetConstant(m_renderData->m_blendDistanceSrgFrameUpdateCountNameIndex, m_frameUpdateCount);
|
|
|
+ m_blendDistanceSrg->SetConstant(m_renderData->m_blendDistanceSrgFrameUpdateIndexNameIndex, m_frameUpdateIndex);
|
|
|
}
|
|
|
|
|
|
void DiffuseProbeGrid::UpdateBorderUpdateSrgs(
|
|
@@ -703,15 +585,8 @@ namespace AZ
|
|
|
AZ_Error("DiffuseProbeGrid", m_borderUpdateRowIrradianceSrg.get(), "Failed to create BorderUpdateRowIrradiance shader resource group");
|
|
|
}
|
|
|
|
|
|
- const RHI::ShaderResourceGroupLayout* srgLayout = m_borderUpdateRowIrradianceSrg->GetLayout();
|
|
|
- RHI::ShaderInputConstantIndex constantIndex;
|
|
|
- RHI::ShaderInputImageIndex imageIndex;
|
|
|
-
|
|
|
- imageIndex = srgLayout->FindShaderInputImageIndex(AZ::Name("m_probeTexture"));
|
|
|
- m_borderUpdateRowIrradianceSrg->SetImageView(imageIndex, m_irradianceImage[m_currentImageIndex]->GetImageView(m_renderData->m_probeIrradianceImageViewDescriptor).get());
|
|
|
-
|
|
|
- constantIndex = srgLayout->FindShaderInputConstantIndex(AZ::Name("m_numTexels"));
|
|
|
- m_borderUpdateRowIrradianceSrg->SetConstant(constantIndex, DefaultNumIrradianceTexels);
|
|
|
+ m_borderUpdateRowIrradianceSrg->SetImageView(m_renderData->m_borderUpdateRowIrradianceSrgProbeTextureNameIndex, m_irradianceImage[m_currentImageIndex]->GetImageView(m_renderData->m_probeIrradianceImageViewDescriptor).get());
|
|
|
+ m_borderUpdateRowIrradianceSrg->SetConstant(m_renderData->m_borderUpdateRowIrradianceSrgNumTexelsNameIndex, DefaultNumIrradianceTexels);
|
|
|
}
|
|
|
|
|
|
// border update column irradiance
|
|
@@ -722,15 +597,8 @@ namespace AZ
|
|
|
AZ_Error("DiffuseProbeGrid", m_borderUpdateColumnIrradianceSrg.get(), "Failed to create BorderUpdateColumnRowIrradiance shader resource group");
|
|
|
}
|
|
|
|
|
|
- const RHI::ShaderResourceGroupLayout* srgLayout = m_borderUpdateColumnIrradianceSrg->GetLayout();
|
|
|
- RHI::ShaderInputConstantIndex constantIndex;
|
|
|
- RHI::ShaderInputImageIndex imageIndex;
|
|
|
-
|
|
|
- imageIndex = srgLayout->FindShaderInputImageIndex(AZ::Name("m_probeTexture"));
|
|
|
- m_borderUpdateColumnIrradianceSrg->SetImageView(imageIndex, m_irradianceImage[m_currentImageIndex]->GetImageView(m_renderData->m_probeIrradianceImageViewDescriptor).get());
|
|
|
-
|
|
|
- constantIndex = srgLayout->FindShaderInputConstantIndex(AZ::Name("m_numTexels"));
|
|
|
- m_borderUpdateColumnIrradianceSrg->SetConstant(constantIndex, DefaultNumIrradianceTexels);
|
|
|
+ m_borderUpdateColumnIrradianceSrg->SetImageView(m_renderData->m_borderUpdateColumnIrradianceSrgProbeTextureNameIndex, m_irradianceImage[m_currentImageIndex]->GetImageView(m_renderData->m_probeIrradianceImageViewDescriptor).get());
|
|
|
+ m_borderUpdateColumnIrradianceSrg->SetConstant(m_renderData->m_borderUpdateColumnIrradianceSrgNumTexelsNameIndex, DefaultNumIrradianceTexels);
|
|
|
}
|
|
|
|
|
|
// border update row distance
|
|
@@ -741,15 +609,8 @@ namespace AZ
|
|
|
AZ_Error("DiffuseProbeGrid", m_borderUpdateRowDistanceSrg.get(), "Failed to create BorderUpdateRowDistance shader resource group");
|
|
|
}
|
|
|
|
|
|
- const RHI::ShaderResourceGroupLayout* srgLayout = m_borderUpdateRowDistanceSrg->GetLayout();
|
|
|
- RHI::ShaderInputConstantIndex constantIndex;
|
|
|
- RHI::ShaderInputImageIndex imageIndex;
|
|
|
-
|
|
|
- imageIndex = srgLayout->FindShaderInputImageIndex(AZ::Name("m_probeTexture"));
|
|
|
- m_borderUpdateRowDistanceSrg->SetImageView(imageIndex, m_distanceImage[m_currentImageIndex]->GetImageView(m_renderData->m_probeDistanceImageViewDescriptor).get());
|
|
|
-
|
|
|
- constantIndex = srgLayout->FindShaderInputConstantIndex(AZ::Name("m_numTexels"));
|
|
|
- m_borderUpdateRowDistanceSrg->SetConstant(constantIndex, DefaultNumDistanceTexels);
|
|
|
+ m_borderUpdateRowDistanceSrg->SetImageView(m_renderData->m_borderUpdateRowDistanceSrgProbeTextureNameIndex, m_distanceImage[m_currentImageIndex]->GetImageView(m_renderData->m_probeDistanceImageViewDescriptor).get());
|
|
|
+ m_borderUpdateRowDistanceSrg->SetConstant(m_renderData->m_borderUpdateRowDistanceSrgNumTexelsNameIndex, DefaultNumDistanceTexels);
|
|
|
}
|
|
|
|
|
|
// border update column distance
|
|
@@ -760,15 +621,8 @@ namespace AZ
|
|
|
AZ_Error("DiffuseProbeGrid", m_borderUpdateColumnDistanceSrg.get(), "Failed to create BorderUpdateColumnRowDistance shader resource group");
|
|
|
}
|
|
|
|
|
|
- const RHI::ShaderResourceGroupLayout* srgLayout = m_borderUpdateColumnDistanceSrg->GetLayout();
|
|
|
- RHI::ShaderInputConstantIndex constantIndex;
|
|
|
- RHI::ShaderInputImageIndex imageIndex;
|
|
|
-
|
|
|
- imageIndex = srgLayout->FindShaderInputImageIndex(AZ::Name("m_probeTexture"));
|
|
|
- m_borderUpdateColumnDistanceSrg->SetImageView(imageIndex, m_distanceImage[m_currentImageIndex]->GetImageView(m_renderData->m_probeDistanceImageViewDescriptor).get());
|
|
|
-
|
|
|
- constantIndex = srgLayout->FindShaderInputConstantIndex(AZ::Name("m_numTexels"));
|
|
|
- m_borderUpdateColumnDistanceSrg->SetConstant(constantIndex, DefaultNumDistanceTexels);
|
|
|
+ m_borderUpdateColumnDistanceSrg->SetImageView(m_renderData->m_borderUpdateColumnDistanceSrgProbeTextureNameIndex, m_distanceImage[m_currentImageIndex]->GetImageView(m_renderData->m_probeDistanceImageViewDescriptor).get());
|
|
|
+ m_borderUpdateColumnDistanceSrg->SetConstant(m_renderData->m_borderUpdateColumnDistanceSrgNumTexelsNameIndex, DefaultNumDistanceTexels);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -780,25 +634,11 @@ namespace AZ
|
|
|
AZ_Error("DiffuseProbeGrid", m_relocationSrg.get(), "Failed to create Relocation shader resource group");
|
|
|
}
|
|
|
|
|
|
- const RHI::ShaderResourceGroupLayout* srgLayout = m_relocationSrg->GetLayout();
|
|
|
- RHI::ShaderInputConstantIndex constantIndex;
|
|
|
- RHI::ShaderInputImageIndex imageIndex;
|
|
|
- RHI::ShaderInputBufferIndex bufferIndex;
|
|
|
-
|
|
|
- bufferIndex = srgLayout->FindShaderInputBufferIndex(AZ::Name("m_gridData"));
|
|
|
- m_relocationSrg->SetBufferView(bufferIndex, m_gridDataBuffer->GetBufferView(m_renderData->m_gridDataBufferViewDescriptor).get());
|
|
|
-
|
|
|
- imageIndex = srgLayout->FindShaderInputImageIndex(AZ::Name("m_probeRayTrace"));
|
|
|
- m_relocationSrg->SetImageView(imageIndex, m_rayTraceImage[m_currentImageIndex]->GetImageView(m_renderData->m_probeRayTraceImageViewDescriptor).get());
|
|
|
-
|
|
|
- imageIndex = srgLayout->FindShaderInputImageIndex(AZ::Name("m_probeData"));
|
|
|
- m_relocationSrg->SetImageView(imageIndex, m_probeDataImage[m_currentImageIndex]->GetImageView(m_renderData->m_probeDataImageViewDescriptor).get());
|
|
|
-
|
|
|
- constantIndex = srgLayout->FindShaderInputConstantIndex(Name("m_frameUpdateCount"));
|
|
|
- m_relocationSrg->SetConstant(constantIndex, m_frameUpdateCount);
|
|
|
-
|
|
|
- constantIndex = srgLayout->FindShaderInputConstantIndex(Name("m_frameUpdateIndex"));
|
|
|
- m_relocationSrg->SetConstant(constantIndex, m_frameUpdateIndex);
|
|
|
+ m_relocationSrg->SetBufferView(m_renderData->m_relocationSrgGridDataNameIndex, m_gridDataBuffer->GetBufferView(m_renderData->m_gridDataBufferViewDescriptor).get());
|
|
|
+ m_relocationSrg->SetImageView(m_renderData->m_relocationSrgProbeRayTraceNameIndex, m_rayTraceImage[m_currentImageIndex]->GetImageView(m_renderData->m_probeRayTraceImageViewDescriptor).get());
|
|
|
+ m_relocationSrg->SetImageView(m_renderData->m_relocationSrgProbeDataNameIndex, m_probeDataImage[m_currentImageIndex]->GetImageView(m_renderData->m_probeDataImageViewDescriptor).get());
|
|
|
+ m_relocationSrg->SetConstant(m_renderData->m_relocationSrgFrameUpdateCountNameIndex, m_frameUpdateCount);
|
|
|
+ m_relocationSrg->SetConstant(m_renderData->m_relocationSrgFrameUpdateIndexNameIndex, m_frameUpdateIndex);
|
|
|
}
|
|
|
|
|
|
void DiffuseProbeGrid::UpdateClassificationSrg(const Data::Instance<RPI::Shader>& shader, const RHI::Ptr<RHI::ShaderResourceGroupLayout>& layout)
|
|
@@ -809,25 +649,11 @@ namespace AZ
|
|
|
AZ_Error("DiffuseProbeGrid", m_classificationSrg.get(), "Failed to create Classification shader resource group");
|
|
|
}
|
|
|
|
|
|
- const RHI::ShaderResourceGroupLayout* srgLayout = m_classificationSrg->GetLayout();
|
|
|
- RHI::ShaderInputConstantIndex constantIndex;
|
|
|
- RHI::ShaderInputImageIndex imageIndex;
|
|
|
- RHI::ShaderInputBufferIndex bufferIndex;
|
|
|
-
|
|
|
- bufferIndex = srgLayout->FindShaderInputBufferIndex(AZ::Name("m_gridData"));
|
|
|
- m_classificationSrg->SetBufferView(bufferIndex, m_gridDataBuffer->GetBufferView(m_renderData->m_gridDataBufferViewDescriptor).get());
|
|
|
-
|
|
|
- imageIndex = srgLayout->FindShaderInputImageIndex(AZ::Name("m_probeRayTrace"));
|
|
|
- m_classificationSrg->SetImageView(imageIndex, m_rayTraceImage[m_currentImageIndex]->GetImageView(m_renderData->m_probeRayTraceImageViewDescriptor).get());
|
|
|
-
|
|
|
- imageIndex = srgLayout->FindShaderInputImageIndex(AZ::Name("m_probeData"));
|
|
|
- m_classificationSrg->SetImageView(imageIndex, m_probeDataImage[m_currentImageIndex]->GetImageView(m_renderData->m_probeDataImageViewDescriptor).get());
|
|
|
-
|
|
|
- constantIndex = srgLayout->FindShaderInputConstantIndex(Name("m_frameUpdateCount"));
|
|
|
- m_classificationSrg->SetConstant(constantIndex, m_frameUpdateCount);
|
|
|
-
|
|
|
- constantIndex = srgLayout->FindShaderInputConstantIndex(Name("m_frameUpdateIndex"));
|
|
|
- m_classificationSrg->SetConstant(constantIndex, m_frameUpdateIndex);
|
|
|
+ m_classificationSrg->SetBufferView(m_renderData->m_classificationSrgGridDataNameIndex, m_gridDataBuffer->GetBufferView(m_renderData->m_gridDataBufferViewDescriptor).get());
|
|
|
+ m_classificationSrg->SetImageView(m_renderData->m_classificationSrgProbeRayTraceNameIndex, m_rayTraceImage[m_currentImageIndex]->GetImageView(m_renderData->m_probeRayTraceImageViewDescriptor).get());
|
|
|
+ m_classificationSrg->SetImageView(m_renderData->m_classificationSrgProbeDataNameIndex, m_probeDataImage[m_currentImageIndex]->GetImageView(m_renderData->m_probeDataImageViewDescriptor).get());
|
|
|
+ m_classificationSrg->SetConstant(m_renderData->m_classificationSrgFrameUpdateCountNameIndex, m_frameUpdateCount);
|
|
|
+ m_classificationSrg->SetConstant(m_renderData->m_classificationSrgFrameUpdateIndexNameIndex, m_frameUpdateIndex);
|
|
|
}
|
|
|
|
|
|
void DiffuseProbeGrid::UpdateRenderObjectSrg()
|
|
@@ -843,42 +669,21 @@ namespace AZ
|
|
|
AZ_Error("DiffuseProbeGrid", m_renderObjectSrg.get(), "Failed to create render shader resource group");
|
|
|
}
|
|
|
|
|
|
- const RHI::ShaderResourceGroupLayout* srgLayout = m_renderObjectSrg->GetLayout();
|
|
|
- RHI::ShaderInputConstantIndex constantIndex;
|
|
|
- RHI::ShaderInputImageIndex imageIndex;
|
|
|
- RHI::ShaderInputBufferIndex bufferIndex;
|
|
|
-
|
|
|
- bufferIndex = srgLayout->FindShaderInputBufferIndex(AZ::Name("m_gridData"));
|
|
|
- m_renderObjectSrg->SetBufferView(bufferIndex, m_gridDataBuffer->GetBufferView(m_renderData->m_gridDataBufferViewDescriptor).get());
|
|
|
+ m_renderObjectSrg->SetBufferView(m_renderData->m_renderSrgGridDataNameIndex, m_gridDataBuffer->GetBufferView(m_renderData->m_gridDataBufferViewDescriptor).get());
|
|
|
|
|
|
- constantIndex = srgLayout->FindShaderInputConstantIndex(Name("m_modelToWorld"));
|
|
|
AZ::Matrix3x4 modelToWorld = AZ::Matrix3x4::CreateFromTransform(m_transform) * AZ::Matrix3x4::CreateScale(m_renderExtents);
|
|
|
- m_renderObjectSrg->SetConstant(constantIndex, modelToWorld);
|
|
|
+ m_renderObjectSrg->SetConstant(m_renderData->m_renderSrgModelToWorldNameIndex, modelToWorld);
|
|
|
|
|
|
- constantIndex = srgLayout->FindShaderInputConstantIndex(Name("m_modelToWorldInverse"));
|
|
|
AZ::Matrix3x4 modelToWorldInverse = modelToWorld.GetInverseFull();
|
|
|
- m_renderObjectSrg->SetConstant(constantIndex, modelToWorldInverse);
|
|
|
+ m_renderObjectSrg->SetConstant(m_renderData->m_renderSrgModelToWorldInverseNameIndex, modelToWorldInverse);
|
|
|
|
|
|
- constantIndex = srgLayout->FindShaderInputConstantIndex(Name("m_obbHalfLengths"));
|
|
|
- m_renderObjectSrg->SetConstant(constantIndex, m_obbWs.GetHalfLengths());
|
|
|
-
|
|
|
- constantIndex = srgLayout->FindShaderInputConstantIndex(Name("m_enableDiffuseGI"));
|
|
|
- m_renderObjectSrg->SetConstant(constantIndex, m_enabled);
|
|
|
-
|
|
|
- constantIndex = srgLayout->FindShaderInputConstantIndex(Name("m_ambientMultiplier"));
|
|
|
- m_renderObjectSrg->SetConstant(constantIndex, m_ambientMultiplier);
|
|
|
-
|
|
|
- constantIndex = srgLayout->FindShaderInputConstantIndex(Name("m_edgeBlendIbl"));
|
|
|
- m_renderObjectSrg->SetConstant(constantIndex, m_edgeBlendIbl);
|
|
|
-
|
|
|
- imageIndex = srgLayout->FindShaderInputImageIndex(Name("m_probeIrradiance"));
|
|
|
- m_renderObjectSrg->SetImageView(imageIndex, GetIrradianceImage()->GetImageView(m_renderData->m_probeIrradianceImageViewDescriptor).get());
|
|
|
-
|
|
|
- imageIndex = srgLayout->FindShaderInputImageIndex(Name("m_probeDistance"));
|
|
|
- m_renderObjectSrg->SetImageView(imageIndex, GetDistanceImage()->GetImageView(m_renderData->m_probeDistanceImageViewDescriptor).get());
|
|
|
-
|
|
|
- imageIndex = srgLayout->FindShaderInputImageIndex(Name("m_probeData"));
|
|
|
- m_renderObjectSrg->SetImageView(imageIndex, GetProbeDataImage()->GetImageView(m_renderData->m_probeDataImageViewDescriptor).get());
|
|
|
+ m_renderObjectSrg->SetConstant(m_renderData->m_renderSrgObbHalfLengthsNameIndex, m_obbWs.GetHalfLengths());
|
|
|
+ m_renderObjectSrg->SetConstant(m_renderData->m_renderSrgEnableDiffuseGiNameIndex, m_enabled);
|
|
|
+ m_renderObjectSrg->SetConstant(m_renderData->m_renderSrgAmbientMultiplierNameIndex, m_ambientMultiplier);
|
|
|
+ m_renderObjectSrg->SetConstant(m_renderData->m_renderSrgEdgeBlendIblNameIndex, m_edgeBlendIbl);
|
|
|
+ m_renderObjectSrg->SetImageView(m_renderData->m_renderSrgProbeIrradianceNameIndex, GetIrradianceImage()->GetImageView(m_renderData->m_probeIrradianceImageViewDescriptor).get());
|
|
|
+ m_renderObjectSrg->SetImageView(m_renderData->m_renderSrgProbeDistanceNameIndex, GetDistanceImage()->GetImageView(m_renderData->m_probeDistanceImageViewDescriptor).get());
|
|
|
+ m_renderObjectSrg->SetImageView(m_renderData->m_renderSrgProbeDataNameIndex, GetProbeDataImage()->GetImageView(m_renderData->m_probeDataImageViewDescriptor).get());
|
|
|
|
|
|
m_updateRenderObjectSrg = false;
|
|
|
|
|
@@ -894,27 +699,13 @@ namespace AZ
|
|
|
AZ_Error("DiffuseProbeGrid", m_visualizationPrepareSrg.get(), "Failed to create VisualizationPrepare shader resource group");
|
|
|
}
|
|
|
|
|
|
- RHI::ShaderInputConstantIndex constantIndex;
|
|
|
- RHI::ShaderInputImageIndex imageIndex;
|
|
|
- RHI::ShaderInputBufferIndex bufferIndex;
|
|
|
-
|
|
|
- // TLAS instances
|
|
|
- bufferIndex = layout->FindShaderInputBufferIndex(AZ::Name("m_tlasInstances"));
|
|
|
uint32_t tlasInstancesBufferByteCount = aznumeric_cast<uint32_t>(m_visualizationTlas->GetTlasInstancesBuffer()->GetDescriptor().m_byteCount);
|
|
|
RHI::BufferViewDescriptor bufferViewDescriptor = RHI::BufferViewDescriptor::CreateStructured(0, tlasInstancesBufferByteCount / RayTracingTlasInstanceElementSize, RayTracingTlasInstanceElementSize);
|
|
|
- m_visualizationPrepareSrg->SetBufferView(bufferIndex, m_visualizationTlas->GetTlasInstancesBuffer()->GetBufferView(bufferViewDescriptor).get());
|
|
|
-
|
|
|
- // grid data
|
|
|
- bufferIndex = layout->FindShaderInputBufferIndex(AZ::Name("m_gridData"));
|
|
|
- m_visualizationPrepareSrg->SetBufferView(bufferIndex, m_gridDataBuffer->GetBufferView(m_renderData->m_gridDataBufferViewDescriptor).get());
|
|
|
-
|
|
|
- // probe data
|
|
|
- imageIndex = layout->FindShaderInputImageIndex(AZ::Name("m_probeData"));
|
|
|
- m_visualizationPrepareSrg->SetImageView(imageIndex, GetProbeDataImage()->GetImageView(m_renderData->m_probeDataImageViewDescriptor).get());
|
|
|
+ m_visualizationPrepareSrg->SetBufferView(m_renderData->m_visualizationPrepareSrgTlasInstancesNameIndex, m_visualizationTlas->GetTlasInstancesBuffer()->GetBufferView(bufferViewDescriptor).get());
|
|
|
|
|
|
- // probe sphere radius
|
|
|
- constantIndex = layout->FindShaderInputConstantIndex(Name("m_probeSphereRadius"));
|
|
|
- m_visualizationPrepareSrg->SetConstant(constantIndex, m_visualizationSphereRadius);
|
|
|
+ m_visualizationPrepareSrg->SetBufferView(m_renderData->m_visualizationPrepareSrgGridDataNameIndex, m_gridDataBuffer->GetBufferView(m_renderData->m_gridDataBufferViewDescriptor).get());
|
|
|
+ m_visualizationPrepareSrg->SetImageView(m_renderData->m_visualizationPrepareSrgProbeDataNameIndex, GetProbeDataImage()->GetImageView(m_renderData->m_probeDataImageViewDescriptor).get());
|
|
|
+ m_visualizationPrepareSrg->SetConstant(m_renderData->m_visualizationPrepareSrgProbeSphereRadiusNameIndex, m_visualizationSphereRadius);
|
|
|
}
|
|
|
|
|
|
void DiffuseProbeGrid::UpdateVisualizationRayTraceSrg(const Data::Instance<RPI::Shader>& shader, const RHI::Ptr<RHI::ShaderResourceGroupLayout>& layout, const RHI::ImageView* outputImageView)
|
|
@@ -925,40 +716,16 @@ namespace AZ
|
|
|
AZ_Error("DiffuseProbeGrid", m_visualizationRayTraceSrg.get(), "Failed to create VisualizationRayTrace shader resource group");
|
|
|
}
|
|
|
|
|
|
- RHI::ShaderInputConstantIndex constantIndex;
|
|
|
- RHI::ShaderInputImageIndex imageIndex;
|
|
|
- RHI::ShaderInputBufferIndex bufferIndex;
|
|
|
-
|
|
|
- // TLAS
|
|
|
uint32_t tlasBufferByteCount = aznumeric_cast<uint32_t>(m_visualizationTlas->GetTlasBuffer()->GetDescriptor().m_byteCount);
|
|
|
RHI::BufferViewDescriptor bufferViewDescriptor = RHI::BufferViewDescriptor::CreateRayTracingTLAS(tlasBufferByteCount);
|
|
|
+ m_visualizationRayTraceSrg->SetBufferView(m_renderData->m_visualizationRayTraceSrgTlasNameIndex, m_visualizationTlas->GetTlasBuffer()->GetBufferView(bufferViewDescriptor).get());
|
|
|
|
|
|
- bufferIndex = layout->FindShaderInputBufferIndex(AZ::Name("m_tlas"));
|
|
|
- m_visualizationRayTraceSrg->SetBufferView(bufferIndex, m_visualizationTlas->GetTlasBuffer()->GetBufferView(bufferViewDescriptor).get());
|
|
|
-
|
|
|
- // grid data
|
|
|
- bufferIndex = layout->FindShaderInputBufferIndex(AZ::Name("m_gridData"));
|
|
|
- m_visualizationRayTraceSrg->SetBufferView(bufferIndex, m_gridDataBuffer->GetBufferView(m_renderData->m_gridDataBufferViewDescriptor).get());
|
|
|
-
|
|
|
- // probe irradiance
|
|
|
- imageIndex = layout->FindShaderInputImageIndex(AZ::Name("m_probeIrradiance"));
|
|
|
- m_visualizationRayTraceSrg->SetImageView(imageIndex, GetIrradianceImage()->GetImageView(m_renderData->m_probeIrradianceImageViewDescriptor).get());
|
|
|
-
|
|
|
- // probe distance
|
|
|
- imageIndex = layout->FindShaderInputImageIndex(AZ::Name("m_probeDistance"));
|
|
|
- m_visualizationRayTraceSrg->SetImageView(imageIndex, GetDistanceImage()->GetImageView(m_renderData->m_probeDistanceImageViewDescriptor).get());
|
|
|
-
|
|
|
- // probe data
|
|
|
- imageIndex = layout->FindShaderInputImageIndex(AZ::Name("m_probeData"));
|
|
|
- m_visualizationRayTraceSrg->SetImageView(imageIndex, GetProbeDataImage()->GetImageView(m_renderData->m_probeDataImageViewDescriptor).get());
|
|
|
-
|
|
|
- // show inactive probes
|
|
|
- constantIndex = layout->FindShaderInputConstantIndex(Name("m_showInactiveProbes"));
|
|
|
- m_visualizationRayTraceSrg->SetConstant(constantIndex, m_visualizationShowInactiveProbes);
|
|
|
-
|
|
|
- // output
|
|
|
- imageIndex = layout->FindShaderInputImageIndex(AZ::Name("m_output"));
|
|
|
- m_visualizationRayTraceSrg->SetImageView(imageIndex, outputImageView);
|
|
|
+ m_visualizationRayTraceSrg->SetBufferView(m_renderData->m_visualizationRayTraceSrgGridDataNameIndex, m_gridDataBuffer->GetBufferView(m_renderData->m_gridDataBufferViewDescriptor).get());
|
|
|
+ m_visualizationRayTraceSrg->SetImageView(m_renderData->m_visualizationRayTraceSrgProbeIrradianceNameIndex, GetIrradianceImage()->GetImageView(m_renderData->m_probeIrradianceImageViewDescriptor).get());
|
|
|
+ m_visualizationRayTraceSrg->SetImageView(m_renderData->m_visualizationRayTraceSrgProbeDistanceNameIndex, GetDistanceImage()->GetImageView(m_renderData->m_probeDistanceImageViewDescriptor).get());
|
|
|
+ m_visualizationRayTraceSrg->SetImageView(m_renderData->m_visualizationRayTraceSrgProbeDataNameIndex, GetProbeDataImage()->GetImageView(m_renderData->m_probeDataImageViewDescriptor).get());
|
|
|
+ m_visualizationRayTraceSrg->SetConstant(m_renderData->m_visualizationRayTraceSrgShowInactiveProbesNameIndex, m_visualizationShowInactiveProbes);
|
|
|
+ m_visualizationRayTraceSrg->SetImageView(m_renderData->m_visualizationRayTraceSrgOutputNameIndex, outputImageView);
|
|
|
}
|
|
|
|
|
|
void DiffuseProbeGrid::UpdateQuerySrg(const Data::Instance<RPI::Shader>& shader, const RHI::Ptr<RHI::ShaderResourceGroupLayout>& layout)
|
|
@@ -969,29 +736,11 @@ namespace AZ
|
|
|
AZ_Error("DiffuseProbeGrid", m_querySrg.get(), "Failed to create Query shader resource group");
|
|
|
}
|
|
|
|
|
|
- RHI::ShaderInputConstantIndex constantIndex;
|
|
|
- RHI::ShaderInputBufferIndex bufferIndex;
|
|
|
- RHI::ShaderInputImageIndex imageIndex;
|
|
|
-
|
|
|
- // grid data
|
|
|
- bufferIndex = layout->FindShaderInputBufferIndex(AZ::Name("m_gridData"));
|
|
|
- m_querySrg->SetBufferView(bufferIndex, m_gridDataBuffer->GetBufferView(m_renderData->m_gridDataBufferViewDescriptor).get());
|
|
|
-
|
|
|
- // probe irradiance
|
|
|
- imageIndex = layout->FindShaderInputImageIndex(AZ::Name("m_probeIrradiance"));
|
|
|
- m_querySrg->SetImageView(imageIndex, GetIrradianceImage()->GetImageView(m_renderData->m_probeIrradianceImageViewDescriptor).get());
|
|
|
-
|
|
|
- // probe distance
|
|
|
- imageIndex = layout->FindShaderInputImageIndex(AZ::Name("m_probeDistance"));
|
|
|
- m_querySrg->SetImageView(imageIndex, GetDistanceImage()->GetImageView(m_renderData->m_probeDistanceImageViewDescriptor).get());
|
|
|
-
|
|
|
- // probe data
|
|
|
- imageIndex = layout->FindShaderInputImageIndex(AZ::Name("m_probeData"));
|
|
|
- m_querySrg->SetImageView(imageIndex, GetProbeDataImage()->GetImageView(m_renderData->m_probeDataImageViewDescriptor).get());
|
|
|
-
|
|
|
- // ambient multiplier
|
|
|
- constantIndex = layout->FindShaderInputConstantIndex(Name("m_ambientMultiplier"));
|
|
|
- m_querySrg->SetConstant(constantIndex, m_ambientMultiplier);
|
|
|
+ m_querySrg->SetBufferView(m_renderData->m_querySrgGridDataNameIndex, m_gridDataBuffer->GetBufferView(m_renderData->m_gridDataBufferViewDescriptor).get());
|
|
|
+ m_querySrg->SetImageView(m_renderData->m_querySrgProbeIrradianceNameIndex, GetIrradianceImage()->GetImageView(m_renderData->m_probeIrradianceImageViewDescriptor).get());
|
|
|
+ m_querySrg->SetImageView(m_renderData->m_querySrgProbeDistanceNameIndex, GetDistanceImage()->GetImageView(m_renderData->m_probeDistanceImageViewDescriptor).get());
|
|
|
+ m_querySrg->SetImageView(m_renderData->m_querySrgProbeDataNameIndex, GetProbeDataImage()->GetImageView(m_renderData->m_probeDataImageViewDescriptor).get());
|
|
|
+ m_querySrg->SetConstant(m_renderData->m_querySrgAmbientMultiplierNameIndex, m_ambientMultiplier);
|
|
|
}
|
|
|
|
|
|
void DiffuseProbeGrid::UpdateCulling()
|