Skip to content

Commit 941605f

Browse files
Remove the use of recursion.
1 parent 11b8d8c commit 941605f

1 file changed

Lines changed: 29 additions & 5 deletions

File tree

lib/API/Device.cpp

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -105,8 +105,35 @@ offloadtest::createDefaultDepthStencilTarget(Device &Dev, uint32_t Width,
105105
return Dev.createTexture("DepthStencil", Desc);
106106
}
107107

108+
// This is a separate function because recursion is not allowed in this code
109+
// base.
110+
static llvm::Expected<std::unique_ptr<offloadtest::Buffer>>
111+
createUploadBufferWithData(Device &Dev, std::string Name, const void *Data,
112+
size_t SizeInBytes) {
113+
114+
// Create Upload buffer
115+
const BufferCreateDesc UploadDesc = BufferCreateDesc::uploadBuffer();
116+
const std::string UploadBufferName = Name + " (Upload Buffer)";
117+
118+
auto UploadBufferOrErr =
119+
Dev.createBuffer(UploadBufferName, UploadDesc, SizeInBytes);
120+
if (!BufferOrErr)
121+
return BufferOrErr.takeError();
122+
auto UploadBuffer = std::move(*BufferOrErr);
123+
124+
// Copy data over
125+
auto MappedPtrOrErr = Buffer->map();
126+
if (!MappedPtrOrErr)
127+
return MappedPtrOrErr.takeError();
128+
void *MappedPtr = *MappedPtrOrErr;
129+
memcpy(MappedPtr, Data, SizeInBytes);
130+
Buffer->unmap();
131+
132+
return std::move(UploadBuffer);
133+
}
134+
108135
llvm::Expected<std::unique_ptr<offloadtest::Buffer>>
109-
offloadtest::createBufferWithData(
136+
offloadtest::createUploadBufferWithData(
110137
Device &Dev, std::string Name, const BufferCreateDesc &Desc,
111138
const void *Data, size_t SizeInBytes, ComputeEncoder *Encoder,
112139
std::unique_ptr<offloadtest::Buffer> *OutUploadBuffer) {
@@ -121,10 +148,7 @@ offloadtest::createBufferWithData(
121148
"An upload buffer is required to create a GpuOnly buffer with data.");
122149

123150
// Create Upload buffer
124-
const BufferCreateDesc UploadDesc = BufferCreateDesc::uploadBuffer();
125-
const std::string UploadBufferName = Name + " (Upload Buffer)";
126-
auto UploadBufferOrErr = createBufferWithData(
127-
Dev, UploadBufferName, UploadDesc, Data, SizeInBytes, nullptr, nullptr);
151+
auto UploadBufferOrErr = createUploadBuffer(Dev, Name, Data, SizeInBytes);
128152
if (!UploadBufferOrErr)
129153
return UploadBufferOrErr.takeError();
130154
*OutUploadBuffer = std::move(*UploadBufferOrErr);

0 commit comments

Comments
 (0)