Skip to content

Commit 01ee86c

Browse files
Store PipelineState in a unique_ptr.
1 parent bf87a6a commit 01ee86c

File tree

4 files changed

+24
-25
lines changed

4 files changed

+24
-25
lines changed

include/API/Device.h

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ struct DeviceConfig {
4646
bool EnableValidationLayer = false;
4747
};
4848

49-
struct DXBinding { // TODO(manon): rename
49+
struct DXBinding {
5050
uint32_t Register;
5151
uint32_t Space;
5252
};
@@ -58,7 +58,6 @@ struct InputLayoutDesc {
5858
std::optional<uint32_t> InstanceStepRate;
5959
};
6060

61-
// TODO(manon): Come up with a good name
6261
struct ResourceBindingDesc {
6362
ResourceKind Kind;
6463
DXBinding DXBinding;
@@ -132,11 +131,11 @@ class Device {
132131

133132
virtual Queue &getGraphicsQueue() = 0;
134133

135-
virtual llvm::Expected<std::shared_ptr<PipelineState>>
134+
virtual llvm::Expected<std::unique_ptr<PipelineState>>
136135
createPipelineCs(llvm::StringRef Name, const BindingsDesc &BindingsDesc,
137136
ShaderContainer CS) = 0;
138137

139-
virtual llvm::Expected<std::shared_ptr<PipelineState>>
138+
virtual llvm::Expected<std::unique_ptr<PipelineState>>
140139
createPipelineVsPs(llvm::StringRef Name, const BindingsDesc &BindingsDesc,
141140
llvm::ArrayRef<InputLayoutDesc> InputLayout,
142141
llvm::ArrayRef<Format> RTFormats, ShaderContainer VS,

lib/API/DX/Device.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -484,7 +484,7 @@ class DXDevice : public offloadtest::Device {
484484
struct InvocationState {
485485
ComPtr<ID3D12DescriptorHeap> DescHeap;
486486
std::unique_ptr<DXCommandBuffer> CB;
487-
std::shared_ptr<PipelineState> Pipeline;
487+
std::unique_ptr<PipelineState> Pipeline;
488488
std::unique_ptr<offloadtest::Fence> Fence;
489489

490490
// Resources for graphics pipelines.
@@ -632,7 +632,7 @@ class DXDevice : public offloadtest::Device {
632632
OutRootSignature);
633633
}
634634

635-
llvm::Expected<std::shared_ptr<PipelineState>>
635+
llvm::Expected<std::unique_ptr<PipelineState>>
636636
createPipelineCs(llvm::StringRef Name, const BindingsDesc &BindingsDesc,
637637
ShaderContainer CS) override {
638638
ComPtr<ID3D12RootSignature> RootSig;
@@ -657,10 +657,10 @@ class DXDevice : public offloadtest::Device {
657657
"Failed to create PSO."))
658658
return Err;
659659

660-
return std::make_shared<DXPipelineState>(Name, RootSig, PSO);
660+
return std::make_unique<DXPipelineState>(Name, RootSig, PSO);
661661
}
662662

663-
llvm::Expected<std::shared_ptr<PipelineState>>
663+
llvm::Expected<std::unique_ptr<PipelineState>>
664664
createPipelineVsPs(llvm::StringRef Name, const BindingsDesc &BindingsDesc,
665665
llvm::ArrayRef<InputLayoutDesc> InputLayout,
666666
llvm::ArrayRef<Format> RTFormats, ShaderContainer VS,
@@ -715,7 +715,7 @@ class DXDevice : public offloadtest::Device {
715715
"Failed to create graphics PSO."))
716716
return Err;
717717

718-
return std::make_shared<DXPipelineState>(Name, RootSig, PSO);
718+
return std::make_unique<DXPipelineState>(Name, RootSig, PSO);
719719
}
720720

721721
llvm::Expected<std::unique_ptr<offloadtest::Fence>>
@@ -1922,7 +1922,7 @@ class DXDevice : public offloadtest::Device {
19221922
createPipelineCs("Compute Pipeline State", BindingsDesc, CS);
19231923
if (!PipelineStateOrErr)
19241924
return PipelineStateOrErr.takeError();
1925-
State.Pipeline = *PipelineStateOrErr;
1925+
State.Pipeline = std::move(*PipelineStateOrErr);
19261926
llvm::outs() << "Compute Pipeline created.\n";
19271927
if (auto Err = createComputeCommands(P, State))
19281928
return Err;
@@ -1982,7 +1982,7 @@ class DXDevice : public offloadtest::Device {
19821982
InputLayout, RTFormats, VS, PS);
19831983
if (!PipelineStateOrErr)
19841984
return PipelineStateOrErr.takeError();
1985-
State.Pipeline = *PipelineStateOrErr;
1985+
State.Pipeline = std::move(*PipelineStateOrErr);
19861986
llvm::outs() << "Graphics Pipeline created.\n";
19871987
if (auto Err = createGraphicsCommands(P, State))
19881988
return Err;

lib/API/MTL/MTLDevice.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,7 @@ class MTLDevice : public offloadtest::Device {
199199
std::shared_ptr<MTLBuffer> FrameBufferReadback;
200200
std::shared_ptr<MTLTexture> DepthStencil;
201201
std::unique_ptr<MTLCommandBuffer> CB;
202-
std::shared_ptr<PipelineState> Pipeline;
202+
std::unique_ptr<PipelineState> Pipeline;
203203
std::unique_ptr<offloadtest::Fence> Fence;
204204
};
205205

@@ -616,7 +616,7 @@ class MTLDevice : public offloadtest::Device {
616616
return MTLCommandBuffer::create(GraphicsQueue.Queue);
617617
}
618618

619-
llvm::Expected<std::shared_ptr<PipelineState>>
619+
llvm::Expected<std::unique_ptr<PipelineState>>
620620
createPipelineCs(llvm::StringRef Name,
621621
const BindingsDesc & /*unused on metal*/,
622622
ShaderContainer CS) override {
@@ -647,10 +647,10 @@ class MTLDevice : public offloadtest::Device {
647647
if (Error)
648648
return toError(Error);
649649

650-
return std::make_shared<MTLPipelineState>(Name, PSO);
650+
return std::make_unique<MTLPipelineState>(Name, PSO);
651651
}
652652

653-
llvm::Expected<std::shared_ptr<PipelineState>>
653+
llvm::Expected<std::unique_ptr<PipelineState>>
654654
createPipelineVsPs(llvm::StringRef Name,
655655
const BindingsDesc & /*unused on metal*/,
656656
llvm::ArrayRef<InputLayoutDesc> InputLayout,
@@ -752,7 +752,7 @@ class MTLDevice : public offloadtest::Device {
752752
if (Error)
753753
return toError(Error);
754754

755-
return std::make_shared<MTLPipelineState>(Name, PSO);
755+
return std::make_unique<MTLPipelineState>(Name, PSO);
756756
}
757757

758758
llvm::Error executeProgram(Pipeline &P) override {
@@ -800,7 +800,7 @@ class MTLDevice : public offloadtest::Device {
800800
createPipelineCs("Compute Pipeline State", Bindings, CS);
801801
if (!PipelineStateOrErr)
802802
return PipelineStateOrErr.takeError();
803-
IS.Pipeline = *PipelineStateOrErr;
803+
IS.Pipeline = std::move(*PipelineStateOrErr);
804804
llvm::outs() << "Compute Pipeline created.\n";
805805

806806
if (auto Err = createComputeCommands(P, IS))
@@ -843,7 +843,7 @@ class MTLDevice : public offloadtest::Device {
843843
"Graphics Pipeline State", Bindings, InputLayout, RTFormats, VS, PS);
844844
if (!PipelineStateOrErr)
845845
return PipelineStateOrErr.takeError();
846-
IS.Pipeline = *PipelineStateOrErr;
846+
IS.Pipeline = std::move(*PipelineStateOrErr);
847847

848848
if (auto Err = createGraphicsCommands(P, IS))
849849
return Err;

lib/API/VK/Device.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -637,7 +637,7 @@ class VulkanDevice : public offloadtest::Device {
637637
VkDescriptorPool Pool = VK_NULL_HANDLE;
638638

639639
std::unique_ptr<Fence> Fence;
640-
std::shared_ptr<PipelineState> Pipeline;
640+
std::unique_ptr<PipelineState> Pipeline;
641641

642642
// FrameBuffer associated data for offscreen rendering.
643643
VkFramebuffer FrameBuffer = VK_NULL_HANDLE;
@@ -872,7 +872,7 @@ class VulkanDevice : public offloadtest::Device {
872872
return Module;
873873
}
874874

875-
llvm::Expected<std::shared_ptr<PipelineState>>
875+
llvm::Expected<std::unique_ptr<PipelineState>>
876876
createPipelineCs(llvm::StringRef Name, const BindingsDesc &BindingsDesc,
877877
ShaderContainer CS) override {
878878
llvm::SmallVector<VkDescriptorSetLayout> SetLayouts;
@@ -942,11 +942,11 @@ class VulkanDevice : public offloadtest::Device {
942942
// No longer need shader modules after pipeline compilation.
943943
vkDestroyShaderModule(Device, CSModule, nullptr);
944944

945-
return std::make_shared<VulkanPipelineState>(
945+
return std::make_unique<VulkanPipelineState>(
946946
Name, Device, Pipeline, PipelineLayout, std::move(SetLayouts));
947947
}
948948

949-
llvm::Expected<std::shared_ptr<PipelineState>>
949+
llvm::Expected<std::unique_ptr<PipelineState>>
950950
createPipelineVsPs(llvm::StringRef Name, const BindingsDesc &BindingsDesc,
951951
llvm::ArrayRef<InputLayoutDesc> InputLayout,
952952
llvm::ArrayRef<Format> RTFormats, ShaderContainer VS,
@@ -1165,7 +1165,7 @@ class VulkanDevice : public offloadtest::Device {
11651165
for (auto *M : ShaderModules)
11661166
vkDestroyShaderModule(Device, M, nullptr);
11671167

1168-
return std::make_shared<VulkanPipelineState>(
1168+
return std::make_unique<VulkanPipelineState>(
11691169
Name, Device, Pipeline, PipelineLayout, std::move(SetLayouts));
11701170
}
11711171

@@ -2703,7 +2703,7 @@ class VulkanDevice : public offloadtest::Device {
27032703
createPipelineCs("Compute Pipeline State", BindingsDesc, CS);
27042704
if (!PipelineStateOrErr)
27052705
return PipelineStateOrErr.takeError();
2706-
State.Pipeline = *PipelineStateOrErr;
2706+
State.Pipeline = std::move(*PipelineStateOrErr);
27072707
llvm::outs() << "Compute Pipeline created.\n";
27082708
} else {
27092709
ShaderContainer VS = {};
@@ -2747,7 +2747,7 @@ class VulkanDevice : public offloadtest::Device {
27472747
InputLayout, RTFormats, VS, PS);
27482748
if (!PipelineStateOrErr)
27492749
return PipelineStateOrErr.takeError();
2750-
State.Pipeline = *PipelineStateOrErr;
2750+
State.Pipeline = std::move(*PipelineStateOrErr);
27512751
llvm::outs() << "Graphics Pipeline created.\n";
27522752
}
27532753

0 commit comments

Comments
 (0)