dawn::wire::client::ReturnToAPI take a Ref<T>&& to match dawn::native
Bug: 344963953
Change-Id: I9808c875fc62ae6ee22e70fd75c52ca4e9fac994
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/197196
Auto-Submit: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Austin Eng <enga@chromium.org>
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Loko Kung <lokokung@google.com>
diff --git a/generator/templates/dawn/wire/client/ApiProcs.cpp b/generator/templates/dawn/wire/client/ApiProcs.cpp
index 45a8510..5a28ecd 100644
--- a/generator/templates/dawn/wire/client/ApiProcs.cpp
+++ b/generator/templates/dawn/wire/client/ApiProcs.cpp
@@ -30,6 +30,7 @@
#include <string>
#include <type_traits>
#include <vector>
+#include <utility>
#include "dawn/wire/client/Client.h"
#include "dawn/wire/client/webgpu.h"
diff --git a/src/dawn/wire/client/Adapter.cpp b/src/dawn/wire/client/Adapter.cpp
index 68b9ebd..ad02eab 100644
--- a/src/dawn/wire/client/Adapter.cpp
+++ b/src/dawn/wire/client/Adapter.cpp
@@ -85,12 +85,16 @@
// Callback needs to happen before device lost handling to ensure resolution order.
if (mCallback) {
+ Ref<Device> device = mDevice;
mCallback(mStatus,
- mStatus == WGPURequestDeviceStatus_Success ? ReturnToAPI(mDevice) : nullptr,
+ mStatus == WGPURequestDeviceStatus_Success ? ReturnToAPI(std::move(device))
+ : nullptr,
mMessage ? mMessage->c_str() : nullptr, mUserdata1.ExtractAsDangling());
} else if (mCallback2) {
+ Ref<Device> device = mDevice;
mCallback2(mStatus,
- mStatus == WGPURequestDeviceStatus_Success ? ReturnToAPI(mDevice) : nullptr,
+ mStatus == WGPURequestDeviceStatus_Success ? ReturnToAPI(std::move(device))
+ : nullptr,
mMessage ? mMessage->c_str() : nullptr, mUserdata1.ExtractAsDangling(),
mUserdata2.ExtractAsDangling());
}
diff --git a/src/dawn/wire/client/Client.cpp b/src/dawn/wire/client/Client.cpp
index 35c2aed..b9b8e29 100644
--- a/src/dawn/wire/client/Client.cpp
+++ b/src/dawn/wire/client/Client.cpp
@@ -105,7 +105,7 @@
ReservedBuffer result;
result.handle = buffer->GetWireHandle();
result.deviceHandle = FromAPI(device)->GetWireHandle();
- result.buffer = ReturnToAPI(buffer);
+ result.buffer = ReturnToAPI(std::move(buffer));
return result;
}
@@ -115,7 +115,7 @@
ReservedTexture result;
result.handle = texture->GetWireHandle();
result.deviceHandle = FromAPI(device)->GetWireHandle();
- result.texture = ReturnToAPI(texture);
+ result.texture = ReturnToAPI(std::move(texture));
return result;
}
@@ -126,7 +126,7 @@
ReservedSwapChain result;
result.handle = swapChain->GetWireHandle();
result.deviceHandle = FromAPI(device)->GetWireHandle();
- result.swapchain = ReturnToAPI(swapChain);
+ result.swapchain = ReturnToAPI(std::move(swapChain));
return result;
}
@@ -142,7 +142,7 @@
ReservedInstance result;
result.handle = instance->GetWireHandle();
- result.instance = ReturnToAPI(instance);
+ result.instance = ReturnToAPI(std::move(instance));
return result;
}
diff --git a/src/dawn/wire/client/Device.cpp b/src/dawn/wire/client/Device.cpp
index 6c2f64d..527f358 100644
--- a/src/dawn/wire/client/Device.cpp
+++ b/src/dawn/wire/client/Device.cpp
@@ -128,10 +128,11 @@
mMessage = "A valid external Instance reference no longer exists.";
}
- mCallback(
- mStatus,
- mStatus == WGPUCreatePipelineAsyncStatus_Success ? ReturnToAPI(mPipeline) : nullptr,
- mMessage ? mMessage->c_str() : nullptr, userdata1, userdata2);
+ mCallback(mStatus,
+ mStatus == WGPUCreatePipelineAsyncStatus_Success
+ ? ReturnToAPI(std::move(mPipeline))
+ : nullptr,
+ mMessage ? mMessage->c_str() : nullptr, userdata1, userdata2);
}
using Callback = decltype(std::declval<CallbackInfo>().callback);
@@ -495,7 +496,8 @@
client->SerializeCommand(cmd);
}
- return ReturnToAPI(mQueue);
+ Ref<Queue> queue = mQueue;
+ return ReturnToAPI(std::move(queue));
}
template <typename Event, typename Cmd, typename CallbackInfo, typename Descriptor>
diff --git a/src/dawn/wire/client/Instance.cpp b/src/dawn/wire/client/Instance.cpp
index 3689139..f322d0d 100644
--- a/src/dawn/wire/client/Instance.cpp
+++ b/src/dawn/wire/client/Instance.cpp
@@ -100,14 +100,16 @@
if (mCallback) {
mCallback(mStatus,
- mStatus == WGPURequestAdapterStatus_Success ? ReturnToAPI(mAdapter) : nullptr,
+ mStatus == WGPURequestAdapterStatus_Success ? ReturnToAPI(std::move(mAdapter))
+ : nullptr,
mMessage ? mMessage->c_str() : nullptr, mUserdata1.ExtractAsDangling());
} else {
- mCallback2(
- mStatus,
- mStatus == WGPURequestAdapterStatus_Success ? ReturnToAPI(mAdapter) : nullptr,
- mMessage ? mMessage->c_str() : nullptr, mUserdata1.ExtractAsDangling(),
- mUserdata2.ExtractAsDangling());
+ mCallback2(mStatus,
+ mStatus == WGPURequestAdapterStatus_Success
+ ? ReturnToAPI(std::move(mAdapter))
+ : nullptr,
+ mMessage ? mMessage->c_str() : nullptr, mUserdata1.ExtractAsDangling(),
+ mUserdata2.ExtractAsDangling());
}
}
diff --git a/src/dawn/wire/client/ObjectBase.h b/src/dawn/wire/client/ObjectBase.h
index 467e9a2..99121a6 100644
--- a/src/dawn/wire/client/ObjectBase.h
+++ b/src/dawn/wire/client/ObjectBase.h
@@ -112,7 +112,7 @@
};
template <typename T>
-auto ReturnToAPI(Ref<T> r) {
+auto ReturnToAPI(Ref<T>&& r) {
return ToAPI(r.Detach());
}
diff --git a/src/dawn/wire/client/Surface.cpp b/src/dawn/wire/client/Surface.cpp
index 00d5f8d..d43cefd 100644
--- a/src/dawn/wire/client/Surface.cpp
+++ b/src/dawn/wire/client/Surface.cpp
@@ -27,6 +27,8 @@
#include "dawn/wire/client/Surface.h"
+#include <utility>
+
#include "dawn/common/Log.h"
#include "dawn/common/Platform.h"
#include "dawn/wire/client/Client.h"
@@ -85,7 +87,7 @@
// cmd.result = texture->GetWireHandle(); // TODO(dawn:2320): Feed surfaceTexture to cmd
wireClient->SerializeCommand(cmd);
- surfaceTexture->texture = ReturnToAPI(texture);
+ surfaceTexture->texture = ReturnToAPI(std::move(texture));
}
} // namespace dawn::wire::client
diff --git a/src/dawn/wire/client/SwapChain.cpp b/src/dawn/wire/client/SwapChain.cpp
index b0691d0..4eb4970 100644
--- a/src/dawn/wire/client/SwapChain.cpp
+++ b/src/dawn/wire/client/SwapChain.cpp
@@ -27,6 +27,8 @@
#include "dawn/wire/client/SwapChain.h"
+#include <utility>
+
#include "dawn/wire/client/Client.h"
#include "dawn/wire/client/Device.h"
#include "dawn/wire/client/Texture.h"
@@ -62,7 +64,7 @@
cmd.result = texture->GetWireHandle();
wireClient->SerializeCommand(cmd);
- return ReturnToAPI(texture);
+ return ReturnToAPI(std::move(texture));
}
} // namespace dawn::wire::client