Skip to content

Commit 84cc421

Browse files
Remove the use of recursion.
1 parent 11b8d8c commit 84cc421

1 file changed

Lines changed: 29 additions & 4 deletions

File tree

lib/API/Device.cpp

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,33 @@ 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 (!UploadBufferOrErr)
121+
return UploadBufferOrErr.takeError();
122+
auto UploadBuffer = std::move(*UploadBufferOrErr);
123+
124+
// Copy data over
125+
auto MappedPtrOrErr = UploadBuffer->map();
126+
if (!MappedPtrOrErr)
127+
return MappedPtrOrErr.takeError();
128+
void *MappedPtr = *MappedPtrOrErr;
129+
memcpy(MappedPtr, Data, SizeInBytes);
130+
UploadBuffer->unmap();
131+
132+
return std::move(UploadBuffer);
133+
}
134+
108135
llvm::Expected<std::unique_ptr<offloadtest::Buffer>>
109136
offloadtest::createBufferWithData(
110137
Device &Dev, std::string Name, const BufferCreateDesc &Desc,
@@ -121,10 +148,8 @@ 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 =
152+
createUploadBufferWithData(Dev, Name, Data, SizeInBytes);
128153
if (!UploadBufferOrErr)
129154
return UploadBufferOrErr.takeError();
130155
*OutUploadBuffer = std::move(*UploadBufferOrErr);

0 commit comments

Comments
 (0)