Minor formatting cleanup
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
/*
|
||||
/*
|
||||
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
|
||||
* its licensors.
|
||||
*
|
||||
|
||||
@@ -399,13 +399,17 @@ namespace AZ
|
||||
{
|
||||
if(RHI::CheckBitsAny(srgResourcesVisInfo.m_constantDataStageMask, RHI::ShaderStageMask::Compute))
|
||||
{
|
||||
resourcesToMakeResidentCompute[MTLResourceUsageRead].m_resourceArray[resourcesToMakeResidentCompute[MTLResourceUsageRead].m_resourceArrayLen++] = m_constantBuffer.GetGpuAddress<id<MTLResource>>();
|
||||
uint16_t arrayIndex = resourcesToMakeResidentCompute[MTLResourceUsageRead].m_resourceArrayLen;
|
||||
resourcesToMakeResidentCompute[MTLResourceUsageRead].m_resourceArray[arrayIndex] = m_constantBuffer.GetGpuAddress<id<MTLResource>>();
|
||||
resourcesToMakeResidentCompute[MTLResourceUsageRead].m_resourceArrayLen++;
|
||||
}
|
||||
else
|
||||
{
|
||||
MTLRenderStages mtlRenderStages = GetRenderStages(srgResourcesVisInfo.m_constantDataStageMask);
|
||||
AZStd::pair <MTLResourceUsage,MTLRenderStages> key = AZStd::make_pair(MTLResourceUsageRead, mtlRenderStages);
|
||||
resourcesToMakeResidentGraphics[key].m_resourceArray[resourcesToMakeResidentGraphics[key].m_resourceArrayLen++] = m_constantBuffer.GetGpuAddress<id<MTLResource>>();
|
||||
uint16_t arrayIndex = resourcesToMakeResidentGraphics[key].m_resourceArrayLen;
|
||||
resourcesToMakeResidentGraphics[key].m_resourceArray[arrayIndex] = m_constantBuffer.GetGpuAddress<id<MTLResource>>();
|
||||
resourcesToMakeResidentGraphics[key].m_resourceArrayLen++;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -451,7 +455,9 @@ namespace AZ
|
||||
}
|
||||
}
|
||||
|
||||
void ArgumentBuffer::CollectResourcesForCompute(id<MTLCommandEncoder> encoder, const ResourceBindingsSet& resourceBindingDataSet, ComputeResourcesToMakeResidentMap& resourcesToMakeResidentMap) const
|
||||
void ArgumentBuffer::CollectResourcesForCompute(id<MTLCommandEncoder> encoder,
|
||||
const ResourceBindingsSet& resourceBindingDataSet,
|
||||
ComputeResourcesToMakeResidentMap& resourcesToMakeResidentMap) const
|
||||
{
|
||||
for (const auto& resourceBindingData : resourceBindingDataSet)
|
||||
{
|
||||
@@ -474,11 +480,16 @@ namespace AZ
|
||||
AZ_Assert(false, "Undefined Resource type");
|
||||
}
|
||||
}
|
||||
resourcesToMakeResidentMap[resourceUsage].m_resourceArray[resourcesToMakeResidentMap[resourceUsage].m_resourceArrayLen++] = resourceBindingData.m_resourcPtr->GetGpuAddress<id<MTLResource>>();
|
||||
uint16_t arrayIndex = resourcesToMakeResidentMap[resourceUsage].m_resourceArrayLen;
|
||||
resourcesToMakeResidentMap[resourceUsage].m_resourceArray[arrayIndex] = resourceBindingData.m_resourcPtr->GetGpuAddress<id<MTLResource>>();
|
||||
resourcesToMakeResidentMap[resourceUsage].m_resourceArrayLen++;
|
||||
}
|
||||
}
|
||||
|
||||
void ArgumentBuffer::CollectResourcesForGraphics(id<MTLCommandEncoder> encoder, RHI::ShaderStageMask visShaderMask, const ResourceBindingsSet& resourceBindingDataSet, GraphicsResourcesToMakeResidentMap& resourcesToMakeResidentMap) const
|
||||
void ArgumentBuffer::CollectResourcesForGraphics(id<MTLCommandEncoder> encoder,
|
||||
RHI::ShaderStageMask visShaderMask,
|
||||
const ResourceBindingsSet& resourceBindingDataSet,
|
||||
GraphicsResourcesToMakeResidentMap& resourcesToMakeResidentMap) const
|
||||
{
|
||||
|
||||
MTLRenderStages mtlRenderStages = GetRenderStages(visShaderMask);
|
||||
@@ -503,8 +514,11 @@ namespace AZ
|
||||
AZ_Assert(false, "Undefined Resource type");
|
||||
}
|
||||
}
|
||||
AZStd::pair <MTLResourceUsage,MTLRenderStages> key = AZStd::make_pair(resourceUsage, mtlRenderStages);
|
||||
resourcesToMakeResidentMap[key].m_resourceArray[resourcesToMakeResidentMap[key].m_resourceArrayLen++] = resourceBindingData.m_resourcPtr->GetGpuAddress<id<MTLResource>>();
|
||||
|
||||
AZStd::pair <MTLResourceUsage, MTLRenderStages> key = AZStd::make_pair(resourceUsage, mtlRenderStages);
|
||||
uint16_t arrayIndex = resourcesToMakeResidentMap[key].m_resourceArrayLen;
|
||||
resourcesToMakeResidentMap[key].m_resourceArray[arrayIndex] = resourceBindingData.m_resourcPtr->GetGpuAddress<id<MTLResource>>();
|
||||
resourcesToMakeResidentMap[key].m_resourceArrayLen++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -123,7 +123,7 @@ namespace AZ
|
||||
struct MetalResourceArray
|
||||
{
|
||||
AZStd::array<id <MTLResource>, MaxEntriesInArgTable> m_resourceArray;
|
||||
int m_resourceArrayLen = 0;
|
||||
uint16_t m_resourceArrayLen = 0;
|
||||
};
|
||||
//Map to cache all the resources based on the usage as we can batch all the resources for a given usage
|
||||
using ComputeResourcesToMakeResidentMap = AZStd::unordered_map<MTLResourceUsage, MetalResourceArray>;
|
||||
|
||||
@@ -347,18 +347,35 @@ namespace AZ
|
||||
//For graphics and compute encoder bind all the argument buffers
|
||||
if(m_commandEncoderType == CommandEncoderType::Render)
|
||||
{
|
||||
BindArgumentBuffers(RHI::ShaderStage::Vertex, bufferVertexRegisterIdMin, bufferVertexRegisterIdMax, mtlVertexArgBuffers, mtlVertexArgBufferOffsets);
|
||||
BindArgumentBuffers(RHI::ShaderStage::Fragment, bufferFragmentOrComputeRegisterIdMin, bufferFragmentOrComputeRegisterIdMax, mtlFragmentOrComputeArgBuffers, mtlFragmentOrComputeArgBufferOffsets);
|
||||
BindArgumentBuffers(RHI::ShaderStage::Vertex,
|
||||
bufferVertexRegisterIdMin,
|
||||
bufferVertexRegisterIdMax,
|
||||
mtlVertexArgBuffers,
|
||||
mtlVertexArgBufferOffsets);
|
||||
|
||||
BindArgumentBuffers(RHI::ShaderStage::Fragment,
|
||||
bufferFragmentOrComputeRegisterIdMin,
|
||||
bufferFragmentOrComputeRegisterIdMax,
|
||||
mtlFragmentOrComputeArgBuffers,
|
||||
mtlFragmentOrComputeArgBufferOffsets);
|
||||
}
|
||||
else if(m_commandEncoderType == CommandEncoderType::Compute)
|
||||
{
|
||||
BindArgumentBuffers(RHI::ShaderStage::Compute, bufferFragmentOrComputeRegisterIdMin, bufferFragmentOrComputeRegisterIdMax, mtlFragmentOrComputeArgBuffers, mtlFragmentOrComputeArgBufferOffsets);
|
||||
BindArgumentBuffers(RHI::ShaderStage::Compute,
|
||||
bufferFragmentOrComputeRegisterIdMin,
|
||||
bufferFragmentOrComputeRegisterIdMax,
|
||||
mtlFragmentOrComputeArgBuffers,
|
||||
mtlFragmentOrComputeArgBufferOffsets);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void CommandList::BindArgumentBuffers(RHI::ShaderStage shaderStage, uint16_t registerIdMin, uint16_t registerIdMax, MetalArgumentBufferArray& mtlArgBuffers, MetalArgumentBufferArrayOffsets mtlArgBufferOffsets)
|
||||
void CommandList::BindArgumentBuffers(RHI::ShaderStage shaderStage,
|
||||
uint16_t registerIdMin,
|
||||
uint16_t registerIdMax,
|
||||
MetalArgumentBufferArray& mtlArgBuffers,
|
||||
MetalArgumentBufferArrayOffsets mtlArgBufferOffsets)
|
||||
{
|
||||
//Metal Api only lets you bind multiple argument buffers in an array as long as there are no gaps in the array
|
||||
//In order to accomodate that we break up the calls when a gap is noticed in the array and reconfigure the NSRange.
|
||||
@@ -609,7 +626,9 @@ namespace AZ
|
||||
}
|
||||
}
|
||||
id<MTLRenderCommandEncoder> renderEncoder = GetEncoder<id<MTLRenderCommandEncoder>>();
|
||||
[renderEncoder setVertexBuffers: mtlStreamBuffers.data() offsets: mtlStreamBufferOffsets.data() withRange: range];
|
||||
[renderEncoder setVertexBuffers: mtlStreamBuffers.data()
|
||||
offsets: mtlStreamBufferOffsets.data()
|
||||
withRange: range];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user