Skip to content

Commit 8cacae1

Browse files
Fixes to multi-device *Items and DrawPacketBuilder (o3de#17535)
Fixes to multi-device *Items and DrawPacketBuilder Co-authored-by: Joerg H. Mueller <[email protected]> Co-authored-by: Martin Winter <[email protected]> Signed-off-by: Martin Winter <[email protected]>
1 parent 76d4255 commit 8cacae1

File tree

4 files changed

+44
-7
lines changed

4 files changed

+44
-7
lines changed

Gems/Atom/RHI/Code/Include/Atom/RHI/MultiDeviceDispatchItem.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -128,11 +128,11 @@ namespace AZ::RHI
128128

129129
//! Array of shader resource groups to bind (count must match m_shaderResourceGroupCount).
130130
void SetShaderResourceGroups(
131-
const AZStd::span<const MultiDeviceShaderResourceGroup*> shaderResourceGroups, uint8_t shaderResourceGroupCount)
131+
const AZStd::span<const MultiDeviceShaderResourceGroup*> shaderResourceGroups)
132132
{
133133
for (auto& [deviceIndex, dispatchItem] : m_deviceDispatchItems)
134134
{
135-
dispatchItem.m_shaderResourceGroupCount = shaderResourceGroupCount;
135+
dispatchItem.m_shaderResourceGroupCount = static_cast<uint8_t>(shaderResourceGroups.size());
136136
for (int i = 0; i < dispatchItem.m_shaderResourceGroupCount; ++i)
137137
{
138138
dispatchItem.m_shaderResourceGroups[i] = shaderResourceGroups[i]->GetDeviceShaderResourceGroup(deviceIndex).get();

Gems/Atom/RHI/Code/Include/Atom/RHI/MultiDeviceDispatchRaysItem.h

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -55,13 +55,13 @@ namespace AZ::RHI
5555
}
5656

5757
//! The number of rays to cast
58-
void SetDimensions(uint32_t width, uint32_t height, uint32_t depth)
58+
void SetDimensionsDirect(uint32_t width, uint32_t height, uint32_t depth)
5959
{
6060
for (auto& [deviceIndex, dispatchRaysItem] : m_deviceDispatchRaysItems)
6161
{
62-
dispatchRaysItem.m_width = width;
63-
dispatchRaysItem.m_height = height;
64-
dispatchRaysItem.m_depth = depth;
62+
dispatchRaysItem.m_arguments.m_direct.m_width = width;
63+
dispatchRaysItem.m_arguments.m_direct.m_height = height;
64+
dispatchRaysItem.m_arguments.m_direct.m_depth = depth;
6565
}
6666
}
6767

@@ -70,7 +70,7 @@ namespace AZ::RHI
7070
{
7171
for (auto& [deviceIndex, dispatchRaysItem] : m_deviceDispatchRaysItems)
7272
{
73-
dispatchRaysItem.m_rayTracingPipelineState = rayTracingPipelineState->GetDevicePipelineState(deviceIndex).get();
73+
dispatchRaysItem.m_rayTracingPipelineState = rayTracingPipelineState->GetDeviceRayTracingPipelineState(deviceIndex).get();
7474
}
7575
}
7676

Gems/Atom/RHI/Code/Include/Atom/RHI/MultiDeviceDrawPacketBuilder.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,10 @@ namespace AZ::RHI
7676
}
7777
}
7878

79+
MultiDeviceDrawPacketBuilder(const MultiDeviceDrawPacketBuilder& other);
80+
MultiDeviceDrawPacketBuilder& operator=(const MultiDeviceDrawPacketBuilder& other);
81+
AZ_DISABLE_MOVE(MultiDeviceDrawPacketBuilder)
82+
7983
// NOTE: This is configurable; just used to control the amount of memory held by the builder.
8084
static const size_t DrawItemCountMax = 16;
8185

Gems/Atom/RHI/Code/Source/RHI/MultiDeviceDrawPacketBuilder.cpp

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,38 @@ namespace AZ::RHI
3939
m_drawFilterMask };
4040
}
4141

42+
MultiDeviceDrawPacketBuilder::MultiDeviceDrawPacketBuilder(const MultiDeviceDrawPacketBuilder& other)
43+
{
44+
m_deviceMask = other.m_deviceMask;
45+
46+
m_drawRequests = other.m_drawRequests;
47+
48+
m_drawPacketInFlight = aznew MultiDeviceDrawPacket;
49+
if (other.m_drawPacketInFlight)
50+
{
51+
m_drawPacketInFlight->m_drawListMask = other.m_drawPacketInFlight->m_drawListMask;
52+
}
53+
54+
m_deviceDrawPacketBuilders = other.m_deviceDrawPacketBuilders;
55+
}
56+
57+
MultiDeviceDrawPacketBuilder& MultiDeviceDrawPacketBuilder::operator=(const MultiDeviceDrawPacketBuilder& other)
58+
{
59+
m_deviceMask = other.m_deviceMask;
60+
61+
m_drawRequests = other.m_drawRequests;
62+
63+
m_drawPacketInFlight = aznew MultiDeviceDrawPacket;
64+
if (other.m_drawPacketInFlight)
65+
{
66+
m_drawPacketInFlight->m_drawListMask = other.m_drawPacketInFlight->m_drawListMask;
67+
}
68+
69+
m_deviceDrawPacketBuilders = other.m_deviceDrawPacketBuilders;
70+
71+
return *this;
72+
}
73+
4274
void MultiDeviceDrawPacketBuilder::Begin(IAllocator* allocator)
4375
{
4476
AZ_Error(
@@ -189,6 +221,7 @@ namespace AZ::RHI
189221
m_drawPacketInFlight = aznew MultiDeviceDrawPacket;
190222

191223
auto drawRequestCount{ original->m_drawListTags.size() };
224+
m_drawPacketInFlight->m_drawListMask = original->m_drawListMask;
192225
m_drawPacketInFlight->m_drawListTags.resize_no_construct(drawRequestCount);
193226
m_drawPacketInFlight->m_drawFilterMasks.resize_no_construct(drawRequestCount);
194227
m_drawPacketInFlight->m_drawItemSortKeys.resize_no_construct(drawRequestCount);

0 commit comments

Comments
 (0)