Add FromAPI / ToAPI helpers for dawn_native

Helps to avoid explicitly using reinterpret_cast

Change-Id: I4df0e7094c7d8460385c6f23dac529ace9df9bdc
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/67605
Auto-Submit: Austin Eng <enga@chromium.org>
Reviewed-by: Loko Kung <lokokung@google.com>
Commit-Queue: Austin Eng <enga@chromium.org>
This commit is contained in:
Austin Eng 2021-10-27 19:07:37 +00:00 committed by Dawn LUCI CQ
parent 346b58cfba
commit 3faa478ed2
10 changed files with 77 additions and 18 deletions

View File

@ -818,6 +818,10 @@ class MultiGeneratorFromDawnJSON(Generator):
FileRender('dawn_native/ValidationUtils.cpp',
'src/dawn_native/ValidationUtils_autogen.cpp',
frontend_params))
renders.append(
FileRender('dawn_native/dawn_platform.h',
'src/dawn_native/dawn_platform_autogen.h',
frontend_params))
renders.append(
FileRender('dawn_native/wgpu_structs.h',
'src/dawn_native/wgpu_structs_autogen.h',

View File

@ -0,0 +1,64 @@
//* Copyright 2021 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.
#ifndef DAWNNATIVE_DAWN_PLATFORM_AUTOGEN_H_
#define DAWNNATIVE_DAWN_PLATFORM_AUTOGEN_H_
#include "dawn/webgpu_cpp.h"
#include "dawn_native/Forward.h"
// Use our autogenerated version of the wgpu structures that point to dawn_native object types
// (wgpu::Buffer is dawn_native::BufferBase*)
#include <dawn_native/wgpu_structs_autogen.h>
namespace dawn_native {
{% for type in by_category["structure"] %}
inline const {{as_cType(type.name)}}* ToAPI(const {{as_cppType(type.name)}}* rhs) {
return reinterpret_cast<const {{as_cType(type.name)}}*>(rhs);
}
inline {{as_cType(type.name)}}* ToAPI({{as_cppType(type.name)}}* rhs) {
return reinterpret_cast<{{as_cType(type.name)}}*>(rhs);
}
inline const {{as_cppType(type.name)}}* FromAPI(const {{as_cType(type.name)}}* rhs) {
return reinterpret_cast<const {{as_cppType(type.name)}}*>(rhs);
}
inline {{as_cppType(type.name)}}* FromAPI({{as_cType(type.name)}}* rhs) {
return reinterpret_cast<{{as_cppType(type.name)}}*>(rhs);
}
{% endfor %}
{% for type in by_category["object"] %}
inline const {{as_cType(type.name)}}Impl* ToAPI(const {{as_cppType(type.name)}}Base* rhs) {
return reinterpret_cast<const {{as_cType(type.name)}}Impl*>(rhs);
}
inline {{as_cType(type.name)}}Impl* ToAPI({{as_cppType(type.name)}}Base* rhs) {
return reinterpret_cast<{{as_cType(type.name)}}Impl*>(rhs);
}
inline const {{as_cppType(type.name)}}Base* FromAPI(const {{as_cType(type.name)}}Impl* rhs) {
return reinterpret_cast<const {{as_cppType(type.name)}}Base*>(rhs);
}
inline {{as_cppType(type.name)}}Base* FromAPI({{as_cType(type.name)}}Impl* rhs) {
return reinterpret_cast<{{as_cppType(type.name)}}Base*>(rhs);
}
{% endfor %}
}
#endif // DAWNNATIVE_DAWN_PLATFORM_AUTOGEN_H_

View File

@ -105,6 +105,7 @@ dawn_json_generator("dawn_native_utils_gen") {
"src/dawn_native/ChainUtils_autogen.h",
"src/dawn_native/ChainUtils_autogen.cpp",
"src/dawn_native/ProcTable.cpp",
"src/dawn_native/dawn_platform_autogen.h",
"src/dawn_native/wgpu_structs_autogen.h",
"src/dawn_native/wgpu_structs_autogen.cpp",
"src/dawn_native/ValidationUtils_autogen.h",

View File

@ -103,9 +103,6 @@ namespace dawn_native {
uint64_t mDebugGroupStackSize = 0;
};
// For the benefit of template generation.
using CommandEncoderBase = CommandEncoder;
} // namespace dawn_native
#endif // DAWNNATIVE_COMMANDENCODER_H_

View File

@ -69,9 +69,6 @@ namespace dawn_native {
Ref<CommandEncoder> mCommandEncoder;
};
// For the benefit of template generation.
using ComputePassEncoderBase = ComputePassEncoder;
} // namespace dawn_native
#endif // DAWNNATIVE_COMPUTEPASSENCODER_H_

View File

@ -59,6 +59,13 @@ namespace dawn_native {
struct Format;
// Aliases for frontend-only types.
using CommandEncoderBase = CommandEncoder;
using ComputePassEncoderBase = ComputePassEncoder;
using RenderBundleEncoderBase = RenderBundleEncoder;
using RenderPassEncoderBase = RenderPassEncoder;
using SurfaceBase = Surface;
} // namespace dawn_native
#endif // DAWNNATIVE_FORWARD_H_

View File

@ -49,9 +49,6 @@ namespace dawn_native {
EncodingContext mBundleEncodingContext;
};
// For the benefit of template generation.
using RenderBundleEncoderBase = RenderBundleEncoder;
} // namespace dawn_native
#endif // DAWNNATIVE_RENDERBUNDLEENCODER_H_

View File

@ -82,9 +82,6 @@ namespace dawn_native {
bool mOcclusionQueryActive = false;
};
// For the benefit of template generation.
using RenderPassEncoderBase = RenderPassEncoder;
} // namespace dawn_native
#endif // DAWNNATIVE_RENDERPASSENCODER_H_

View File

@ -105,9 +105,6 @@ namespace dawn_native {
const absl::FormatConversionSpec& spec,
absl::FormatSink* s);
// For the benefit of template generation.
using SurfaceBase = Surface;
} // namespace dawn_native
#endif // DAWNNATIVE_SURFACE_H_

View File

@ -18,9 +18,7 @@
// Use webgpu_cpp to have the enum and bitfield definitions
#include <dawn/webgpu_cpp.h>
// Use our autogenerated version of the wgpu structures that point to dawn_native object types
// (wgpu::Buffer is dawn_native::BufferBase*)
#include <dawn_native/wgpu_structs_autogen.h>
#include <dawn_native/dawn_platform_autogen.h>
namespace dawn_native {
// Extra buffer usages