Skip to content

Commit dcfe0e4

Browse files
Store PipelineState in a unique_ptr.
1 parent c6b3293 commit dcfe0e4

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
@@ -351,7 +351,7 @@ class MTLDevice : public offloadtest::Device {
351351
std::shared_ptr<MTLBuffer> FrameBufferReadback;
352352
std::shared_ptr<MTLTexture> DepthStencil;
353353
std::unique_ptr<MTLCommandBuffer> CB;
354-
std::shared_ptr<PipelineState> Pipeline;
354+
std::unique_ptr<PipelineState> Pipeline;
355355
std::unique_ptr<offloadtest::Fence> Fence;
356356
};
357357

@@ -768,7 +768,7 @@ class MTLDevice : public offloadtest::Device {
768768
return MTLCommandBuffer::create(GraphicsQueue.Queue);
769769
}
770770

771-
llvm::Expected<std::shared_ptr<PipelineState>>
771+
llvm::Expected<std::unique_ptr<PipelineState>>
772772
createPipelineCs(llvm::StringRef Name,
773773
const BindingsDesc & /*unused on metal*/,
774774
ShaderContainer CS) override {
@@ -799,10 +799,10 @@ class MTLDevice : public offloadtest::Device {
799799
if (Error)
800800
return toError(Error);
801801

802-
return std::make_shared<MTLPipelineState>(Name, PSO);
802+
return std::make_unique<MTLPipelineState>(Name, PSO);
803803
}
804804

805-
llvm::Expected<std::shared_ptr<PipelineState>>
805+
llvm::Expected<std::unique_ptr<PipelineState>>
806806
createPipelineVsPs(llvm::StringRef Name,
807807
const BindingsDesc & /*unused on metal*/,
808808
llvm::ArrayRef<InputLayoutDesc> InputLayout,
@@ -904,7 +904,7 @@ class MTLDevice : public offloadtest::Device {
904904
if (Error)
905905
return toError(Error);
906906

907-
return std::make_shared<MTLPipelineState>(Name, PSO);
907+
return std::make_unique<MTLPipelineState>(Name, PSO);
908908
}
909909

910910
llvm::Error executeProgram(Pipeline &P) override {
@@ -952,7 +952,7 @@ class MTLDevice : public offloadtest::Device {
952952
createPipelineCs("Compute Pipeline State", Bindings, CS);
953953
if (!PipelineStateOrErr)
954954
return PipelineStateOrErr.takeError();
955-
IS.Pipeline = *PipelineStateOrErr;
955+
IS.Pipeline = std::move(*PipelineStateOrErr);
956956
llvm::outs() << "Compute Pipeline created.\n";
957957

958958
if (auto Err = createComputeCommands(P, IS))
@@ -995,7 +995,7 @@ class MTLDevice : public offloadtest::Device {
995995
"Graphics Pipeline State", Bindings, InputLayout, RTFormats, VS, PS);
996996
if (!PipelineStateOrErr)
997997
return PipelineStateOrErr.takeError();
998-
IS.Pipeline = *PipelineStateOrErr;
998+
IS.Pipeline = std::move(*PipelineStateOrErr);
999999

10001000
if (auto Err = createGraphicsCommands(P, IS))
10011001
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)