Commit b52733ed authored by Austin Eng's avatar Austin Eng Committed by Commit Bot

WebGPU: Add CHECKs for fatal error conditions in GPU->Renderer commands

Bug: 951558
Change-Id: I9692746c89e7a4af6d69864d1efadee3014fdb35
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2530752Reviewed-by: default avatarKai Ninomiya <kainino@chromium.org>
Commit-Queue: Austin Eng <enga@chromium.org>
Cr-Commit-Position: refs/heads/master@{#826479}
parent c0e73fce
...@@ -422,21 +422,14 @@ void WebGPUImplementation::OnGpuControlReturnData( ...@@ -422,21 +422,14 @@ void WebGPUImplementation::OnGpuControlReturnData(
"WebGPUImplementation::OnGpuControlReturnData", "bytes", "WebGPUImplementation::OnGpuControlReturnData", "bytes",
data.size()); data.size());
if (data.size() <= sizeof(cmds::DawnReturnDataHeader)) { CHECK_GT(data.size(), sizeof(cmds::DawnReturnDataHeader));
// TODO(jiawei.shao@intel.com): Lose the context.
NOTREACHED();
return;
}
const cmds::DawnReturnDataHeader& dawnReturnDataHeader = const cmds::DawnReturnDataHeader& dawnReturnDataHeader =
*reinterpret_cast<const cmds::DawnReturnDataHeader*>(data.data()); *reinterpret_cast<const cmds::DawnReturnDataHeader*>(data.data());
switch (dawnReturnDataHeader.return_data_type) { switch (dawnReturnDataHeader.return_data_type) {
case DawnReturnDataType::kDawnCommands: { case DawnReturnDataType::kDawnCommands: {
if (data.size() < sizeof(cmds::DawnReturnCommandsInfo)) { CHECK_GE(data.size(), sizeof(cmds::DawnReturnCommandsInfo));
// TODO(jiawei.shao@intel.com): Lose the context.
NOTREACHED();
break;
}
const cmds::DawnReturnCommandsInfo* dawn_return_commands_info = const cmds::DawnReturnCommandsInfo* dawn_return_commands_info =
reinterpret_cast<const cmds::DawnReturnCommandsInfo*>(data.data()); reinterpret_cast<const cmds::DawnReturnCommandsInfo*>(data.data());
...@@ -444,26 +437,19 @@ void WebGPUImplementation::OnGpuControlReturnData( ...@@ -444,26 +437,19 @@ void WebGPUImplementation::OnGpuControlReturnData(
dawn_return_commands_info->header.device_client_id; dawn_return_commands_info->header.device_client_id;
WebGPUCommandSerializer* command_serializer = WebGPUCommandSerializer* command_serializer =
GetCommandSerializerWithDeviceClientID(device_client_id); GetCommandSerializerWithDeviceClientID(device_client_id);
if (!command_serializer) { CHECK(command_serializer);
// TODO(jiawei.shao@intel.com): Lose the context.
NOTREACHED(); // TODO(enga): Instead of a CHECK, this could generate a device lost
break; // event on just that device. It doesn't seem worth doing right now
} // since a failure here is likely not recoverable.
if (!command_serializer->HandleCommands( CHECK(command_serializer->HandleCommands(
reinterpret_cast<const char*>( reinterpret_cast<const char*>(
dawn_return_commands_info->deserialized_buffer), dawn_return_commands_info->deserialized_buffer),
data.size() - offsetof(cmds::DawnReturnCommandsInfo, data.size() -
deserialized_buffer))) { offsetof(cmds::DawnReturnCommandsInfo, deserialized_buffer)));
// TODO(enga): Lose the context.
NOTREACHED();
}
} break; } break;
case DawnReturnDataType::kRequestedDawnAdapterProperties: { case DawnReturnDataType::kRequestedDawnAdapterProperties: {
if (data.size() < sizeof(cmds::DawnReturnAdapterInfo)) { CHECK_GE(data.size(), sizeof(cmds::DawnReturnAdapterInfo));
// TODO(jiawei.shao@intel.com): Lose the context.
NOTREACHED();
break;
}
const cmds::DawnReturnAdapterInfo* returned_adapter_info = const cmds::DawnReturnAdapterInfo* returned_adapter_info =
reinterpret_cast<const cmds::DawnReturnAdapterInfo*>(data.data()); reinterpret_cast<const cmds::DawnReturnAdapterInfo*>(data.data());
...@@ -472,11 +458,8 @@ void WebGPUImplementation::OnGpuControlReturnData( ...@@ -472,11 +458,8 @@ void WebGPUImplementation::OnGpuControlReturnData(
returned_adapter_info->header.request_adapter_serial; returned_adapter_info->header.request_adapter_serial;
auto request_callback_iter = auto request_callback_iter =
request_adapter_callback_map_.find(request_adapter_serial); request_adapter_callback_map_.find(request_adapter_serial);
if (request_callback_iter == request_adapter_callback_map_.end()) { CHECK(request_callback_iter != request_adapter_callback_map_.end());
// TODO(jiawei.shao@intel.com): Lose the context.
NOTREACHED();
break;
}
auto& request_callback = request_callback_iter->second; auto& request_callback = request_callback_iter->second;
GLuint adapter_service_id = GLuint adapter_service_id =
returned_adapter_info->header.adapter_service_id; returned_adapter_info->header.adapter_service_id;
...@@ -499,11 +482,7 @@ void WebGPUImplementation::OnGpuControlReturnData( ...@@ -499,11 +482,7 @@ void WebGPUImplementation::OnGpuControlReturnData(
request_adapter_callback_map_.erase(request_callback_iter); request_adapter_callback_map_.erase(request_callback_iter);
} break; } break;
case DawnReturnDataType::kRequestedDeviceReturnInfo: { case DawnReturnDataType::kRequestedDeviceReturnInfo: {
if (data.size() < sizeof(cmds::DawnReturnRequestDeviceInfo)) { CHECK_GE(data.size(), sizeof(cmds::DawnReturnRequestDeviceInfo));
// TODO(jiawei.shao@intel.com): Lose the context.
NOTREACHED();
break;
}
const cmds::DawnReturnRequestDeviceInfo* returned_request_device_info = const cmds::DawnReturnRequestDeviceInfo* returned_request_device_info =
reinterpret_cast<const cmds::DawnReturnRequestDeviceInfo*>( reinterpret_cast<const cmds::DawnReturnRequestDeviceInfo*>(
...@@ -513,11 +492,8 @@ void WebGPUImplementation::OnGpuControlReturnData( ...@@ -513,11 +492,8 @@ void WebGPUImplementation::OnGpuControlReturnData(
returned_request_device_info->device_client_id; returned_request_device_info->device_client_id;
auto request_callback_iter = auto request_callback_iter =
request_device_callback_map_.find(device_client_id); request_device_callback_map_.find(device_client_id);
if (request_callback_iter == request_device_callback_map_.end()) { CHECK(request_callback_iter != request_device_callback_map_.end());
// TODO(jiawei.shao@intel.com): Lose the context.
NOTREACHED();
break;
}
auto& request_callback = request_callback_iter->second; auto& request_callback = request_callback_iter->second;
bool is_request_device_success = bool is_request_device_success =
returned_request_device_info->is_request_device_success; returned_request_device_info->is_request_device_success;
...@@ -531,9 +507,7 @@ void WebGPUImplementation::OnGpuControlReturnData( ...@@ -531,9 +507,7 @@ void WebGPUImplementation::OnGpuControlReturnData(
request_device_callback_map_.erase(request_callback_iter); request_device_callback_map_.erase(request_callback_iter);
} break; } break;
default: default:
// TODO(jiawei.shao@intel.com): Lose the context.
NOTREACHED(); NOTREACHED();
break;
} }
#endif #endif
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment