Configure the namespace of native implementation in api.json
Make ValidationUtils flexible for other generation. BUG=dawn:1201 Change-Id: I42ccbd3d9c2fe37abec4b8f7eb395583dbe1dc8d Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/72980 Reviewed-by: Austin Eng <enga@chromium.org> Commit-Queue: Junwei Fu <junwei.fu@intel.com>
This commit is contained in:
parent
8921987f08
commit
a2241d402e
|
@ -22,6 +22,7 @@
|
||||||
"c_prefix": "WGPU",
|
"c_prefix": "WGPU",
|
||||||
"namespace": "wgpu",
|
"namespace": "wgpu",
|
||||||
"proc_table_prefix": "Dawn",
|
"proc_table_prefix": "Dawn",
|
||||||
|
"native_namespace": "dawn native",
|
||||||
"copyright_year": "2019"
|
"copyright_year": "2019"
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
|
@ -29,7 +29,9 @@ The `"_metadata"` key in the JSON file is used by flexible templates for generat
|
||||||
- `"namespace"` a string, the namespace of C++ wrapper
|
- `"namespace"` a string, the namespace of C++ wrapper
|
||||||
- `"c_prefix"` (optional) a string, the prefix of C function and data type, it will default to upper-case of `"namespace"` if it's not provided.
|
- `"c_prefix"` (optional) a string, the prefix of C function and data type, it will default to upper-case of `"namespace"` if it's not provided.
|
||||||
- `"proc_table_prefix"` a string, the prefix of proc table.
|
- `"proc_table_prefix"` a string, the prefix of proc table.
|
||||||
- `"copyright_year"` (optional) a string, templates will use the the year of copyright.
|
- `"impl_dir"` a string, the directory of API implementation
|
||||||
|
- `"native_namespace"` a string, the namespace of native implementation
|
||||||
|
- `"copyright_year"` (optional) a string, templates will use the year of copyright.
|
||||||
|
|
||||||
The basic schema is that every entry is a thing with a `"category"` key what determines the sub-schema to apply to that thing. Categories and their sub-shema are defined below. Several parts of the schema use the concept of "record" which is a list of "record members" which are a combination of a type, a name and other metadata. For example the list of arguments of a function is a record. The list of structure members is a record. This combined concept is useful for the dawn_wire generator to generate code for structure and function calls in a very similar way.
|
The basic schema is that every entry is a thing with a `"category"` key what determines the sub-schema to apply to that thing. Categories and their sub-shema are defined below. Several parts of the schema use the concept of "record" which is a list of "record members" which are a combination of a type, a name and other metadata. For example the list of arguments of a function is a record. The list of structure members is a record. This combined concept is useful for the dawn_wire generator to generate code for structure and function calls in a very similar way.
|
||||||
|
|
||||||
|
|
|
@ -29,6 +29,8 @@ class Metadata:
|
||||||
self.namespace = metadata['namespace']
|
self.namespace = metadata['namespace']
|
||||||
self.c_prefix = metadata.get('c_prefix', self.namespace.upper())
|
self.c_prefix = metadata.get('c_prefix', self.namespace.upper())
|
||||||
self.proc_table_prefix = metadata['proc_table_prefix']
|
self.proc_table_prefix = metadata['proc_table_prefix']
|
||||||
|
self.impl_dir = metadata.get('impl_dir', '')
|
||||||
|
self.native_namespace = metadata['native_namespace']
|
||||||
self.copyright_year = metadata.get('copyright_year', None)
|
self.copyright_year = metadata.get('copyright_year', None)
|
||||||
|
|
||||||
|
|
||||||
|
@ -856,13 +858,15 @@ class MultiGeneratorFromDawnJSON(Generator):
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
|
impl_dir = metadata.impl_dir + '/' if metadata.impl_dir else ''
|
||||||
|
native_dir = impl_dir + Name(metadata.native_namespace).snake_case()
|
||||||
renders.append(
|
renders.append(
|
||||||
FileRender('dawn_native/ValidationUtils.h',
|
FileRender('dawn_native/ValidationUtils.h',
|
||||||
'src/dawn_native/ValidationUtils_autogen.h',
|
'src/' + native_dir + '/ValidationUtils_autogen.h',
|
||||||
frontend_params))
|
frontend_params))
|
||||||
renders.append(
|
renders.append(
|
||||||
FileRender('dawn_native/ValidationUtils.cpp',
|
FileRender('dawn_native/ValidationUtils.cpp',
|
||||||
'src/dawn_native/ValidationUtils_autogen.cpp',
|
'src/' + native_dir + '/ValidationUtils_autogen.cpp',
|
||||||
frontend_params))
|
frontend_params))
|
||||||
renders.append(
|
renders.append(
|
||||||
FileRender('dawn_native/dawn_platform.h',
|
FileRender('dawn_native/dawn_platform.h',
|
||||||
|
|
|
@ -12,15 +12,19 @@
|
||||||
//* See the License for the specific language governing permissions and
|
//* See the License for the specific language governing permissions and
|
||||||
//* limitations under the License.
|
//* limitations under the License.
|
||||||
|
|
||||||
#include "dawn_native/ValidationUtils_autogen.h"
|
{% set native_namespace = Name(metadata.native_namespace).snake_case() %}
|
||||||
|
{% set impl_dir = metadata.impl_dir + "/" if metadata.impl_dir else "" %}
|
||||||
|
{% set native_dir = impl_dir + native_namespace %}
|
||||||
|
#include "{{native_dir}}/ValidationUtils_autogen.h"
|
||||||
|
|
||||||
namespace dawn_native {
|
namespace {{native_namespace}} {
|
||||||
|
|
||||||
|
{% set namespace = metadata.namespace %}
|
||||||
{% for type in by_category["enum"] %}
|
{% for type in by_category["enum"] %}
|
||||||
MaybeError Validate{{type.name.CamelCase()}}(wgpu::{{as_cppType(type.name)}} value) {
|
MaybeError Validate{{type.name.CamelCase()}}({{namespace}}::{{as_cppType(type.name)}} value) {
|
||||||
switch (value) {
|
switch (value) {
|
||||||
{% for value in type.values if value.valid %}
|
{% for value in type.values if value.valid %}
|
||||||
case wgpu::{{as_cppType(type.name)}}::{{as_cppEnum(value.name)}}:
|
case {{namespace}}::{{as_cppType(type.name)}}::{{as_cppEnum(value.name)}}:
|
||||||
return {};
|
return {};
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
default:
|
default:
|
||||||
|
@ -31,8 +35,8 @@ namespace dawn_native {
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
||||||
{% for type in by_category["bitmask"] %}
|
{% for type in by_category["bitmask"] %}
|
||||||
MaybeError Validate{{type.name.CamelCase()}}(wgpu::{{as_cppType(type.name)}} value) {
|
MaybeError Validate{{type.name.CamelCase()}}({{namespace}}::{{as_cppType(type.name)}} value) {
|
||||||
if ((value & static_cast<wgpu::{{as_cppType(type.name)}}>(~{{type.full_mask}})) == 0) {
|
if ((value & static_cast<{{namespace}}::{{as_cppType(type.name)}}>(~{{type.full_mask}})) == 0) {
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
return DAWN_VALIDATION_ERROR("Invalid value for {{as_cType(type.name)}}");
|
return DAWN_VALIDATION_ERROR("Invalid value for {{as_cType(type.name)}}");
|
||||||
|
@ -40,4 +44,4 @@ namespace dawn_native {
|
||||||
|
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
||||||
} // namespace dawn_native
|
} // namespace {{native_namespace}}
|
||||||
|
|
|
@ -15,17 +15,22 @@
|
||||||
#ifndef BACKEND_VALIDATIONUTILS_H_
|
#ifndef BACKEND_VALIDATIONUTILS_H_
|
||||||
#define BACKEND_VALIDATIONUTILS_H_
|
#define BACKEND_VALIDATIONUTILS_H_
|
||||||
|
|
||||||
#include "dawn/webgpu_cpp.h"
|
{% set api = metadata.api.lower() %}
|
||||||
|
#include "dawn/{{api}}_cpp.h"
|
||||||
|
|
||||||
#include "dawn_native/Error.h"
|
{% set native_namespace = Name(metadata.native_namespace).snake_case() %}
|
||||||
|
{% set impl_dir = metadata.impl_dir + "/" if metadata.impl_dir else "" %}
|
||||||
|
{% set native_dir = impl_dir + native_namespace %}
|
||||||
|
#include "{{native_dir}}/Error.h"
|
||||||
|
|
||||||
namespace dawn_native {
|
namespace {{native_namespace}} {
|
||||||
|
|
||||||
// Helper functions to check the value of enums and bitmasks
|
// Helper functions to check the value of enums and bitmasks
|
||||||
{% for type in by_category["enum"] + by_category["bitmask"] %}
|
{% for type in by_category["enum"] + by_category["bitmask"] %}
|
||||||
MaybeError Validate{{type.name.CamelCase()}}(wgpu::{{as_cppType(type.name)}} value);
|
{% set namespace = metadata.namespace %}
|
||||||
|
MaybeError Validate{{type.name.CamelCase()}}({{namespace}}::{{as_cppType(type.name)}} value);
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
||||||
} // namespace dawn_native
|
} // namespace {{native_namespace}}
|
||||||
|
|
||||||
#endif // BACKEND_VALIDATIONUTILS_H_
|
#endif // BACKEND_VALIDATIONUTILS_H_
|
||||||
|
|
Loading…
Reference in New Issue