Wire: Add support for nullptr objects as arguments
BUG=dawn:5 Change-Id: I84c80796e9bdfbcf59fafdd38d33ab2101a1d795 Reviewed-on: https://dawn-review.googlesource.com/1541 Commit-Queue: Corentin Wallez <cwallez@chromium.org> Reviewed-by: Kai Ninomiya <kainino@chromium.org>
This commit is contained in:
parent
82fbccbd78
commit
386b8889bd
|
@ -215,6 +215,9 @@ namespace dawn_wire {
|
||||||
// Implementation of the ObjectIdProvider interface
|
// Implementation of the ObjectIdProvider interface
|
||||||
{% for type in by_category["object"] %}
|
{% for type in by_category["object"] %}
|
||||||
ObjectId GetId({{as_cType(type.name)}} object) const override {
|
ObjectId GetId({{as_cType(type.name)}} object) const override {
|
||||||
|
if (object == nullptr) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
return reinterpret_cast<{{as_wireType(type)}}>(object)->id;
|
return reinterpret_cast<{{as_wireType(type)}}>(object)->id;
|
||||||
}
|
}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
|
@ -358,6 +358,11 @@ namespace dawn_wire {
|
||||||
// Implementation of the ObjectIdResolver interface
|
// Implementation of the ObjectIdResolver interface
|
||||||
{% for type in by_category["object"] %}
|
{% for type in by_category["object"] %}
|
||||||
DeserializeResult GetFromId(ObjectId id, {{as_cType(type.name)}}* out) const override {
|
DeserializeResult GetFromId(ObjectId id, {{as_cType(type.name)}}* out) const override {
|
||||||
|
if (id == 0) {
|
||||||
|
*out = nullptr;
|
||||||
|
return DeserializeResult::Success;
|
||||||
|
}
|
||||||
|
|
||||||
auto data = mKnown{{type.name.CamelCase()}}.Get(id);
|
auto data = mKnown{{type.name.CamelCase()}}.Get(id);
|
||||||
if (data == nullptr) {
|
if (data == nullptr) {
|
||||||
return DeserializeResult::FatalError;
|
return DeserializeResult::FatalError;
|
||||||
|
|
|
@ -328,7 +328,7 @@ TEST_F(WireTests, CStringArgument) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Test that the wire is able to send objects as value arguments
|
// Test that the wire is able to send objects as value arguments
|
||||||
TEST_F(WireTests, DISABLED_ObjectAsValueArgument) {
|
TEST_F(WireTests, ObjectAsValueArgument) {
|
||||||
// Create pipeline
|
// Create pipeline
|
||||||
dawnComputePipelineDescriptor pipelineDesc;
|
dawnComputePipelineDescriptor pipelineDesc;
|
||||||
pipelineDesc.nextInChain = nullptr;
|
pipelineDesc.nextInChain = nullptr;
|
||||||
|
@ -485,6 +485,46 @@ TEST_F(WireTests, StructureOfStructureArrayArgument) {
|
||||||
FlushClient();
|
FlushClient();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Test passing nullptr instead of objects - object as value version
|
||||||
|
TEST_F(WireTests, NullptrAsValue) {
|
||||||
|
dawnCommandBufferBuilder builder = dawnDeviceCreateCommandBufferBuilder(device);
|
||||||
|
dawnComputePassEncoder pass = dawnCommandBufferBuilderBeginComputePass(builder);
|
||||||
|
dawnComputePassEncoderSetComputePipeline(pass, nullptr);
|
||||||
|
|
||||||
|
dawnCommandBufferBuilder apiBuilder = api.GetNewCommandBufferBuilder();
|
||||||
|
EXPECT_CALL(api, DeviceCreateCommandBufferBuilder(apiDevice))
|
||||||
|
.WillOnce(Return(apiBuilder));
|
||||||
|
|
||||||
|
dawnComputePassEncoder apiPass = api.GetNewComputePassEncoder();
|
||||||
|
EXPECT_CALL(api, CommandBufferBuilderBeginComputePass(apiBuilder))
|
||||||
|
.WillOnce(Return(apiPass));
|
||||||
|
|
||||||
|
EXPECT_CALL(api, ComputePassEncoderSetComputePipeline(apiPass, nullptr))
|
||||||
|
.Times(1);
|
||||||
|
|
||||||
|
FlushClient();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Test passing nullptr instead of objects - array of objects version
|
||||||
|
TEST_F(WireTests, NullptrInArray) {
|
||||||
|
dawnBindGroupLayout nullBGL = nullptr;
|
||||||
|
|
||||||
|
dawnPipelineLayoutDescriptor descriptor;
|
||||||
|
descriptor.nextInChain = nullptr;
|
||||||
|
descriptor.numBindGroupLayouts = 1;
|
||||||
|
descriptor.bindGroupLayouts = &nullBGL;
|
||||||
|
|
||||||
|
dawnDeviceCreatePipelineLayout(device, &descriptor);
|
||||||
|
EXPECT_CALL(api, DeviceCreatePipelineLayout(apiDevice, MatchesLambda([](const dawnPipelineLayoutDescriptor* desc) -> bool {
|
||||||
|
return desc->nextInChain == nullptr &&
|
||||||
|
desc->numBindGroupLayouts == 1 &&
|
||||||
|
desc->bindGroupLayouts[0] == nullptr;
|
||||||
|
})))
|
||||||
|
.WillOnce(Return(nullptr));
|
||||||
|
|
||||||
|
FlushClient();
|
||||||
|
}
|
||||||
|
|
||||||
// Test that the server doesn't forward calls to error objects or with error objects
|
// Test that the server doesn't forward calls to error objects or with error objects
|
||||||
// Also test that when GetResult is called on an error builder, the error callback is fired
|
// Also test that when GetResult is called on an error builder, the error callback is fired
|
||||||
// TODO(cwallez@chromium.org): This test is disabled because the introduction of encoders breaks
|
// TODO(cwallez@chromium.org): This test is disabled because the introduction of encoders breaks
|
||||||
|
|
Loading…
Reference in New Issue