mirror of
https://github.com/encounter/dawn-cmake.git
synced 2025-12-19 01:46:35 +00:00
Ensure all wire child objects are destroyed before their device
Destroying a device will implicit destroy all its child objects. Attempting to use a child object after results in a fatal error. Bug: dawn:384 Change-Id: I43c27c92cacde759be83cca79ac890f41bac3927 Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/37002 Commit-Queue: Austin Eng <enga@chromium.org> Reviewed-by: Corentin Wallez <cwallez@chromium.org> Reviewed-by: Jiawei Shao <jiawei.shao@intel.com>
This commit is contained in:
committed by
Commit Bot service account
parent
0562802757
commit
8ba0a01d1e
@@ -59,23 +59,32 @@ namespace dawn_wire { namespace server {
|
||||
}
|
||||
|
||||
bool Server::DoDeviceCreateReadyComputePipeline(
|
||||
WGPUDevice cDevice,
|
||||
ObjectId deviceId,
|
||||
uint64_t requestSerial,
|
||||
ObjectHandle pipelineObjectHandle,
|
||||
const WGPUComputePipelineDescriptor* descriptor) {
|
||||
auto* device = DeviceObjects().Get(deviceId);
|
||||
if (device == nullptr) {
|
||||
return false;
|
||||
}
|
||||
|
||||
auto* resultData = ComputePipelineObjects().Allocate(pipelineObjectHandle.id);
|
||||
if (resultData == nullptr) {
|
||||
return false;
|
||||
}
|
||||
|
||||
resultData->generation = pipelineObjectHandle.generation;
|
||||
resultData->device = device;
|
||||
if (!TrackDeviceChild(device, ObjectType::ComputePipeline, pipelineObjectHandle.id)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
auto userdata = MakeUserdata<CreateReadyPipelineUserData>();
|
||||
userdata->requestSerial = requestSerial;
|
||||
userdata->pipelineObjectID = pipelineObjectHandle.id;
|
||||
|
||||
mProcs.deviceCreateReadyComputePipeline(
|
||||
cDevice, descriptor,
|
||||
device->handle, descriptor,
|
||||
ForwardToServer<decltype(&Server::OnCreateReadyComputePipelineCallback)>::Func<
|
||||
&Server::OnCreateReadyComputePipelineCallback>(),
|
||||
userdata.release());
|
||||
@@ -116,23 +125,32 @@ namespace dawn_wire { namespace server {
|
||||
SerializeCommand(cmd);
|
||||
}
|
||||
|
||||
bool Server::DoDeviceCreateReadyRenderPipeline(WGPUDevice cDevice,
|
||||
bool Server::DoDeviceCreateReadyRenderPipeline(ObjectId deviceId,
|
||||
uint64_t requestSerial,
|
||||
ObjectHandle pipelineObjectHandle,
|
||||
const WGPURenderPipelineDescriptor* descriptor) {
|
||||
auto* device = DeviceObjects().Get(deviceId);
|
||||
if (device == nullptr) {
|
||||
return false;
|
||||
}
|
||||
|
||||
auto* resultData = RenderPipelineObjects().Allocate(pipelineObjectHandle.id);
|
||||
if (resultData == nullptr) {
|
||||
return false;
|
||||
}
|
||||
|
||||
resultData->generation = pipelineObjectHandle.generation;
|
||||
resultData->device = device;
|
||||
if (!TrackDeviceChild(device, ObjectType::RenderPipeline, pipelineObjectHandle.id)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
auto userdata = MakeUserdata<CreateReadyPipelineUserData>();
|
||||
userdata->requestSerial = requestSerial;
|
||||
userdata->pipelineObjectID = pipelineObjectHandle.id;
|
||||
|
||||
mProcs.deviceCreateReadyRenderPipeline(
|
||||
cDevice, descriptor,
|
||||
device->handle, descriptor,
|
||||
ForwardToServer<decltype(&Server::OnCreateReadyRenderPipelineCallback)>::Func<
|
||||
&Server::OnCreateReadyRenderPipelineCallback>(),
|
||||
userdata.release());
|
||||
|
||||
Reference in New Issue
Block a user