improving GLSL_std450 support
This commit is contained in:
@@ -439,6 +439,21 @@ typedef struct
|
||||
SpvBool use_simd_vectors_specializations;
|
||||
} SpvModuleOptions;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
SpvWord local_size_x;
|
||||
SpvWord local_size_y;
|
||||
SpvWord local_size_z;
|
||||
|
||||
SpvWord geometry_invocations;
|
||||
SpvWord geometry_output_count;
|
||||
SpvWord geometry_input;
|
||||
SpvWord geometry_output;
|
||||
|
||||
SpvBool needs_derivatives;
|
||||
SpvBool has_control_barriers;
|
||||
} SpvModuleReflectionInfos;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
SpvWord id;
|
||||
@@ -507,6 +522,8 @@ typedef void* SpvRuntime;
|
||||
SPV_API SpvResult SpvInitModule(SpvModule* module, const SpvWord* source, SpvSize source_len, SpvModuleOptions options);
|
||||
SPV_API void SpvDeinitModule(SpvModule module);
|
||||
|
||||
SPV_API SpvModuleReflectionInfos SpvModuleGetReflectionInfos(SpvModule module);
|
||||
|
||||
SPV_API SpvResult SpvInitRuntime(SpvRuntime* runtime, SpvModule module, SpvImageAPI image_api);
|
||||
SPV_API void SpvDeinitRuntime(SpvRuntime runtime);
|
||||
|
||||
|
||||
@@ -6,6 +6,20 @@ const Options = extern struct {
|
||||
use_simd_vectors_specializations: ffi.SpvCBool,
|
||||
};
|
||||
|
||||
const ReflectionInfos = extern struct {
|
||||
local_size_x: ffi.SpvCWord,
|
||||
local_size_y: ffi.SpvCWord,
|
||||
local_size_z: ffi.SpvCWord,
|
||||
|
||||
geometry_invocations: ffi.SpvCWord,
|
||||
geometry_output_count: ffi.SpvCWord,
|
||||
geometry_input: ffi.SpvCWord,
|
||||
geometry_output: ffi.SpvCWord,
|
||||
|
||||
needs_derivatives: ffi.SpvCBool,
|
||||
has_control_barriers: ffi.SpvCBool,
|
||||
};
|
||||
|
||||
fn toCResult(err: spv.Module.ModuleError) ffi.Result {
|
||||
return switch (err) {
|
||||
spv.Module.ModuleError.InvalidSpirV => ffi.Result.InvalidSpirV,
|
||||
@@ -40,3 +54,17 @@ export fn SpvDeinitModule(module: *spv.Module) callconv(.c) void {
|
||||
module.deinit(allocator);
|
||||
allocator.destroy(module);
|
||||
}
|
||||
|
||||
export fn SpvModuleGetReflectionInfos(module: *spv.Module) callconv(.c) ReflectionInfos {
|
||||
return .{
|
||||
.local_size_x = module.reflection_infos.local_size_x,
|
||||
.local_size_y = module.reflection_infos.local_size_y,
|
||||
.local_size_z = module.reflection_infos.local_size_z,
|
||||
.geometry_invocations = module.reflection_infos.geometry_invocations,
|
||||
.geometry_output_count = module.reflection_infos.geometry_output_count,
|
||||
.geometry_input = module.reflection_infos.geometry_input,
|
||||
.geometry_output = module.reflection_infos.geometry_output,
|
||||
.needs_derivatives = if (module.reflection_infos.needs_derivatives) 1 else 0,
|
||||
.has_control_barriers = if (module.reflection_infos.has_control_barriers) 1 else 0,
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user