mirror of
https://github.com/encounter/dawn-cmake.git
synced 2025-05-15 03:41:34 +00:00
This was used to make the distinction between native-only methods that were those manipulating "natively defined" types, and the rest. Now that all "natively defined" objects are "callback" instead this name didn't make sense. The only relevant thing is that in C there are the Reference and Release methods that don't appear in dawn.json and shouldn't be exposed on C++ objects. Hence most of the native_methods() calls in the templates are updated to be c_methods() calls except for the webgpu_cpp templates that use type.methods directly. BUG=dawn:22 Change-Id: I65c160b8b8a829e4728862c65bc67268a46f445e Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/13902 Commit-Queue: Corentin Wallez <cwallez@chromium.org> Reviewed-by: Jiawei Shao <jiawei.shao@intel.com>
161 lines
6.8 KiB
C++
161 lines
6.8 KiB
C++
//* Copyright 2017 The Dawn Authors
|
|
//*
|
|
//* Licensed under the Apache License, Version 2.0 (the "License");
|
|
//* you may not use this file except in compliance with the License.
|
|
//* You may obtain a copy of the License at
|
|
//*
|
|
//* http://www.apache.org/licenses/LICENSE-2.0
|
|
//*
|
|
//* Unless required by applicable law or agreed to in writing, software
|
|
//* distributed under the License is distributed on an "AS IS" BASIS,
|
|
//* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
//* See the License for the specific language governing permissions and
|
|
//* limitations under the License.
|
|
|
|
#include "mock_webgpu.h"
|
|
|
|
using namespace testing;
|
|
|
|
namespace {
|
|
{% for type in by_category["object"] %}
|
|
{% for method in c_methods(type) if len(method.arguments) < 10 %}
|
|
{{as_cType(method.return_type.name)}} Forward{{as_MethodSuffix(type.name, method.name)}}(
|
|
{{-as_cType(type.name)}} self
|
|
{%- for arg in method.arguments -%}
|
|
, {{as_annotated_cType(arg)}}
|
|
{%- endfor -%}
|
|
) {
|
|
auto object = reinterpret_cast<ProcTableAsClass::Object*>(self);
|
|
return object->procs->{{as_MethodSuffix(type.name, method.name)}}(self
|
|
{%- for arg in method.arguments -%}
|
|
, {{as_varName(arg.name)}}
|
|
{%- endfor -%}
|
|
);
|
|
}
|
|
{% endfor %}
|
|
|
|
{% endfor %}
|
|
}
|
|
|
|
ProcTableAsClass::~ProcTableAsClass() {
|
|
}
|
|
|
|
void ProcTableAsClass::GetProcTableAndDevice(DawnProcTable* table, WGPUDevice* device) {
|
|
*device = GetNewDevice();
|
|
|
|
{% for type in by_category["object"] %}
|
|
{% for method in c_methods(type) if len(method.arguments) < 10 %}
|
|
table->{{as_varName(type.name, method.name)}} = reinterpret_cast<{{as_cProc(type.name, method.name)}}>(Forward{{as_MethodSuffix(type.name, method.name)}});
|
|
{% endfor %}
|
|
{% endfor %}
|
|
}
|
|
|
|
void ProcTableAsClass::DeviceSetUncapturedErrorCallback(WGPUDevice self,
|
|
WGPUErrorCallback callback,
|
|
void* userdata) {
|
|
auto object = reinterpret_cast<ProcTableAsClass::Object*>(self);
|
|
object->deviceErrorCallback = callback;
|
|
object->userdata1 = userdata;
|
|
|
|
OnDeviceSetUncapturedErrorCallback(self, callback, userdata);
|
|
}
|
|
|
|
bool ProcTableAsClass::DevicePopErrorScope(WGPUDevice self,
|
|
WGPUErrorCallback callback,
|
|
void* userdata) {
|
|
return OnDevicePopErrorScopeCallback(self, callback, userdata);
|
|
}
|
|
|
|
void ProcTableAsClass::DeviceCreateBufferMappedAsync(WGPUDevice self,
|
|
const WGPUBufferDescriptor* descriptor,
|
|
WGPUBufferCreateMappedCallback callback,
|
|
void* userdata) {
|
|
auto object = reinterpret_cast<ProcTableAsClass::Object*>(self);
|
|
object->createBufferMappedCallback = callback;
|
|
object->userdata1 = userdata;
|
|
|
|
OnDeviceCreateBufferMappedAsyncCallback(self, descriptor, callback, userdata);
|
|
}
|
|
|
|
void ProcTableAsClass::BufferMapReadAsync(WGPUBuffer self,
|
|
WGPUBufferMapReadCallback callback,
|
|
void* userdata) {
|
|
auto object = reinterpret_cast<ProcTableAsClass::Object*>(self);
|
|
object->mapReadCallback = callback;
|
|
object->userdata1 = userdata;
|
|
|
|
OnBufferMapReadAsyncCallback(self, callback, userdata);
|
|
}
|
|
|
|
void ProcTableAsClass::BufferMapWriteAsync(WGPUBuffer self,
|
|
WGPUBufferMapWriteCallback callback,
|
|
void* userdata) {
|
|
auto object = reinterpret_cast<ProcTableAsClass::Object*>(self);
|
|
object->mapWriteCallback = callback;
|
|
object->userdata1 = userdata;
|
|
|
|
OnBufferMapWriteAsyncCallback(self, callback, userdata);
|
|
}
|
|
|
|
void ProcTableAsClass::FenceOnCompletion(WGPUFence self,
|
|
uint64_t value,
|
|
WGPUFenceOnCompletionCallback callback,
|
|
void* userdata) {
|
|
auto object = reinterpret_cast<ProcTableAsClass::Object*>(self);
|
|
object->fenceOnCompletionCallback = callback;
|
|
object->userdata1 = userdata;
|
|
|
|
OnFenceOnCompletionCallback(self, value, callback, userdata);
|
|
}
|
|
|
|
void ProcTableAsClass::CallDeviceErrorCallback(WGPUDevice device,
|
|
WGPUErrorType type,
|
|
const char* message) {
|
|
auto object = reinterpret_cast<ProcTableAsClass::Object*>(device);
|
|
object->deviceErrorCallback(type, message, object->userdata1);
|
|
}
|
|
void ProcTableAsClass::CallCreateBufferMappedCallback(WGPUDevice device,
|
|
WGPUBufferMapAsyncStatus status,
|
|
WGPUCreateBufferMappedResult result) {
|
|
auto object = reinterpret_cast<ProcTableAsClass::Object*>(device);
|
|
object->createBufferMappedCallback(status, result, object->userdata1);
|
|
}
|
|
void ProcTableAsClass::CallMapReadCallback(WGPUBuffer buffer,
|
|
WGPUBufferMapAsyncStatus status,
|
|
const void* data,
|
|
uint64_t dataLength) {
|
|
auto object = reinterpret_cast<ProcTableAsClass::Object*>(buffer);
|
|
object->mapReadCallback(status, data, dataLength, object->userdata1);
|
|
}
|
|
|
|
void ProcTableAsClass::CallMapWriteCallback(WGPUBuffer buffer,
|
|
WGPUBufferMapAsyncStatus status,
|
|
void* data,
|
|
uint64_t dataLength) {
|
|
auto object = reinterpret_cast<ProcTableAsClass::Object*>(buffer);
|
|
object->mapWriteCallback(status, data, dataLength, object->userdata1);
|
|
}
|
|
|
|
void ProcTableAsClass::CallFenceOnCompletionCallback(WGPUFence fence,
|
|
WGPUFenceCompletionStatus status) {
|
|
auto object = reinterpret_cast<ProcTableAsClass::Object*>(fence);
|
|
object->fenceOnCompletionCallback(status, object->userdata1);
|
|
}
|
|
|
|
{% for type in by_category["object"] %}
|
|
{{as_cType(type.name)}} ProcTableAsClass::GetNew{{type.name.CamelCase()}}() {
|
|
mObjects.emplace_back(new Object);
|
|
mObjects.back()->procs = this;
|
|
return reinterpret_cast<{{as_cType(type.name)}}>(mObjects.back().get());
|
|
}
|
|
{% endfor %}
|
|
|
|
MockProcTable::MockProcTable() {
|
|
}
|
|
|
|
void MockProcTable::IgnoreAllReleaseCalls() {
|
|
{% for type in by_category["object"] %}
|
|
EXPECT_CALL(*this, {{as_MethodSuffix(type.name, Name("release"))}}(_)).Times(AnyNumber());
|
|
{% endfor %}
|
|
}
|