mirror of
https://github.com/encounter/dawn-cmake.git
synced 2025-12-14 15:46:28 +00:00
Implement GPUBufferDescriptor.mappedAtCreation.
This CL: - Adds mappedAtCreation to dawn.json - Changes dawn_native to implement CreateBufferMapped in terms of mappedAtCreation. - Duplicates all the CreateBufferMappedTests to mappedAtCreation tests (both validation and end2end). - Implements dawn_wire's mappedAtCreation in terms of CreateBufferMapped. The reversal in dawn_wire will be done in a follow-up CL. Bug: dawn:445 Change-Id: I70b9fa729b1402524a6b993c3f288987eb65c6c4 Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/24083 Commit-Queue: Corentin Wallez <cwallez@chromium.org> Reviewed-by: Kai Ninomiya <kainino@chromium.org>
This commit is contained in:
committed by
Commit Bot service account
parent
cf77d75573
commit
b2ea1915d4
@@ -303,24 +303,19 @@ namespace dawn_native { namespace opengl {
|
||||
ASSERT(bytesPerRow % GetFormat().blockByteSize == 0);
|
||||
ASSERT(GetHeight() % GetFormat().blockHeight == 0);
|
||||
|
||||
dawn_native::BufferDescriptor descriptor;
|
||||
dawn_native::BufferDescriptor descriptor = {};
|
||||
descriptor.mappedAtCreation = true;
|
||||
descriptor.usage = wgpu::BufferUsage::CopySrc;
|
||||
descriptor.size = bytesPerRow * (GetHeight() / GetFormat().blockHeight);
|
||||
if (descriptor.size > std::numeric_limits<uint32_t>::max()) {
|
||||
return DAWN_OUT_OF_MEMORY_ERROR("Unable to allocate buffer.");
|
||||
}
|
||||
descriptor.nextInChain = nullptr;
|
||||
descriptor.usage = wgpu::BufferUsage::CopySrc | wgpu::BufferUsage::MapWrite;
|
||||
|
||||
// TODO(natlee@microsoft.com): use Dynamic Uplaoder here for temp buffer
|
||||
Ref<Buffer> srcBuffer = ToBackend(device->CreateBuffer(&descriptor));
|
||||
// Call release here to prevent memory leak since CreateBuffer will up the ref count to
|
||||
// 1, then assigning to Ref<Buffer> ups the ref count to 2. Release will reduce the ref
|
||||
// count and ensure it to reach 0 when out of use.
|
||||
srcBuffer->Release();
|
||||
Ref<Buffer> srcBuffer = AcquireRef(ToBackend(device->CreateBuffer(&descriptor)));
|
||||
|
||||
// Fill the buffer with clear color
|
||||
uint8_t* clearBuffer = nullptr;
|
||||
DAWN_TRY(srcBuffer->MapAtCreation(&clearBuffer));
|
||||
memset(clearBuffer, clearColor, descriptor.size);
|
||||
memset(srcBuffer->GetMappedRange(), clearColor, descriptor.size);
|
||||
srcBuffer->Unmap();
|
||||
|
||||
// Bind buffer and texture, and make the buffer to texture copy
|
||||
|
||||
Reference in New Issue
Block a user