Skip to content

Commit

Permalink
Add Delete* overrides
Browse files Browse the repository at this point in the history
castholm committed Mar 2, 2024
1 parent 00dee3e commit a4f3a0f
Showing 3 changed files with 196 additions and 78 deletions.
24 changes: 12 additions & 12 deletions zigglgen/api_registry.zig
Original file line number Diff line number Diff line change
@@ -6245,8 +6245,8 @@ pub const Command = struct {
Clear,
ClearAccum,
ClearAccumxOES,
ClearBufferfi,
ClearBufferfv,
ClearBufferfi,
ClearBufferiv,
ClearBufferuiv,
ClearBufferData,
@@ -6267,8 +6267,8 @@ pub const Command = struct {
ClearNamedBufferDataEXT,
ClearNamedBufferSubData,
ClearNamedBufferSubDataEXT,
ClearNamedFramebufferfi,
ClearNamedFramebufferfv,
ClearNamedFramebufferfi,
ClearNamedFramebufferiv,
ClearNamedFramebufferuiv,
ClearPixelLocalStorageuiEXT,
@@ -17997,21 +17997,21 @@ pub const commands = [_]Command{
.return_type_expr = &.{.void},
},
.{
.name = .ClearBufferfi,
.name = .ClearBufferfv,
.params = &.{
.{ .name = "buffer", .type_expr = &.{.{ .type = .@"enum" }} },
.{ .name = "drawbuffer", .type_expr = &.{.{ .type = .int }} },
.{ .name = "depth", .type_expr = &.{.{ .type = .float }} },
.{ .name = "stencil", .type_expr = &.{.{ .type = .int }} },
.{ .name = "value", .type_expr = &.{ .@"*", .@"const", .{ .type = .float } } },
},
.return_type_expr = &.{.void},
},
.{
.name = .ClearBufferfv,
.name = .ClearBufferfi,
.params = &.{
.{ .name = "buffer", .type_expr = &.{.{ .type = .@"enum" }} },
.{ .name = "drawbuffer", .type_expr = &.{.{ .type = .int }} },
.{ .name = "value", .type_expr = &.{ .@"*", .@"const", .{ .type = .float } } },
.{ .name = "depth", .type_expr = &.{.{ .type = .float }} },
.{ .name = "stencil", .type_expr = &.{.{ .type = .int }} },
},
.return_type_expr = &.{.void},
},
@@ -18205,23 +18205,23 @@ pub const commands = [_]Command{
.return_type_expr = &.{.void},
},
.{
.name = .ClearNamedFramebufferfi,
.name = .ClearNamedFramebufferfv,
.params = &.{
.{ .name = "framebuffer", .type_expr = &.{.{ .type = .uint }} },
.{ .name = "buffer", .type_expr = &.{.{ .type = .@"enum" }} },
.{ .name = "drawbuffer", .type_expr = &.{.{ .type = .int }} },
.{ .name = "depth", .type_expr = &.{.{ .type = .float }} },
.{ .name = "stencil", .type_expr = &.{.{ .type = .int }} },
.{ .name = "value", .type_expr = &.{ .@"*", .@"const", .{ .type = .float } } },
},
.return_type_expr = &.{.void},
},
.{
.name = .ClearNamedFramebufferfv,
.name = .ClearNamedFramebufferfi,
.params = &.{
.{ .name = "framebuffer", .type_expr = &.{.{ .type = .uint }} },
.{ .name = "buffer", .type_expr = &.{.{ .type = .@"enum" }} },
.{ .name = "drawbuffer", .type_expr = &.{.{ .type = .int }} },
.{ .name = "value", .type_expr = &.{ .@"*", .@"const", .{ .type = .float } } },
.{ .name = "depth", .type_expr = &.{.{ .type = .float }} },
.{ .name = "stencil", .type_expr = &.{.{ .type = .int }} },
},
.return_type_expr = &.{.void},
},
247 changes: 182 additions & 65 deletions zigglgen/generator.zig
Original file line number Diff line number Diff line change
@@ -853,26 +853,69 @@ fn formatTypeExpr(

fn getTypeValue(@"type": registry.Type.Name) []const u8 {
return switch (@"type") {
.DEBUGPROC, .DEBUGPROCARB, .DEBUGPROCKHR => "*const fn (source: @\"enum\", @\"type\": @\"enum\", id: uint, severity: @\"enum\", length: sizei, message: [*:0]const char, userParam: ?*const anyopaque) callconv(APIENTRY) void",
.DEBUGPROCAMD => "*const fn (id: uint, category: @\"enum\", severity: @\"enum\", length: sizei, message: [*:0]const char, userParam: ?*anyopaque) callconv(APIENTRY) void",
.VULKANPROCNV => "*const fn () callconv(APIENTRY) void",
.bitfield, .@"enum", .uint => "c_uint",
.boolean, .char, .charARB, .ubyte => "u8",
.byte => "i8",
.cl_context, .cl_event, .eglClientBufferEXT, .eglImageOES, .sync => "*opaque {}",
.clampd, .double => "f64",
.clampf, .float => "f32",
.clampx, .fixed => "i32",
.half, .halfARB, .ushort => "u16",
.halfNV => "c_ushort",
.handleARB => "if (builtin.os.tag.isDarwin()) *allowzero anyopaque else u32",
.int, .sizei => "c_int",
.int64, .int64EXT => "i64",
.intptr, .intptrARB, .sizeiptr, .sizeiptrARB => "isize",
.short => "i16",
.uint64, .uint64EXT => "u64",
.vdpauSurfaceNV => "intptr",
.khrplatform, .void => unreachable,
.DEBUGPROC,
.DEBUGPROCARB,
.DEBUGPROCKHR,
=> "*const fn (source: @\"enum\", @\"type\": @\"enum\", id: uint, severity: @\"enum\", length: sizei, message: [*:0]const char, userParam: ?*const anyopaque) callconv(APIENTRY) void",
.DEBUGPROCAMD,
=> "*const fn (id: uint, category: @\"enum\", severity: @\"enum\", length: sizei, message: [*:0]const char, userParam: ?*anyopaque) callconv(APIENTRY) void",
.VULKANPROCNV,
=> "*const fn () callconv(APIENTRY) void",
.bitfield,
.@"enum",
.uint,
=> "c_uint",
.boolean,
.char,
.charARB,
.ubyte,
=> "u8",
.byte,
=> "i8",
.cl_context,
.cl_event,
.eglClientBufferEXT,
.eglImageOES,
.sync,
=> "*opaque {}",
.clampd,
.double,
=> "f64",
.clampf,
.float,
=> "f32",
.clampx,
.fixed,
=> "i32",
.half,
.halfARB,
.ushort,
=> "u16",
.halfNV,
=> "c_ushort",
.handleARB,
=> "if (builtin.os.tag.isDarwin()) *allowzero anyopaque else u32",
.int,
.sizei,
=> "c_int",
.int64,
.int64EXT,
=> "i64",
.intptr,
.intptrARB,
.sizeiptr,
.sizeiptrARB,
=> "isize",
.short,
=> "i16",
.uint64,
.uint64EXT,
=> "u64",
.vdpauSurfaceNV,
=> "intptr",
.khrplatform,
.void,
=> unreachable,
};
}

@@ -952,7 +995,8 @@ fn paramOverride(command: registry.Command.Name, param_index: usize) ?struct {
0 => .{ .name = "sync_", .type_expr = "sync" },
else => null,
},
.CreateSyncFromCLeventARB => switch (param_index) {
.CreateSyncFromCLeventARB,
=> switch (param_index) {
0 => .{ .name = "context", .type_expr = "cl_context" },
1 => .{ .name = "event", .type_expr = "cl_event" },
else => null,
@@ -962,53 +1006,54 @@ fn paramOverride(command: registry.Command.Name, param_index: usize) ?struct {
.DebugMessageCallbackARB,
.DebugMessageCallbackKHR,
=> |tag| switch (param_index) {
0 => .{ .name = "callback", .type_expr = "?" ++ switch (tag) {
.DebugMessageCallbackAMD => "DEBUGPROCAMD",
.DebugMessageCallbackARB => "DEBUGPROCARB",
.DebugMessageCallbackKHR => "DEBUGPROCKHR",
else => "DEBUGPROC",
} },
else => null,
},
.DeleteSync,
.DeleteSyncAPPLE,
.IsSync,
.IsSyncAPPLE,
=> switch (param_index) {
0 => .{ .name = "sync_", .type_expr = "?sync" },
else => null,
},
.DrawElements => switch (param_index) {
3 => .{ .name = "indices", .type_expr = "usize" },
else => null,
},
.EGLImageTargetRenderbufferStorageOES,
.EGLImageTargetTexStorageEXT,
.EGLImageTargetTexture2DOES,
.EGLImageTargetTextureStorageEXT,
=> switch (param_index) {
1 => .{ .name = "image", .type_expr = "eglImageOES" },
0 => .{
.name = "callback",
.type_expr = "?" ++ switch (tag) {
.DebugMessageCallbackAMD => "DEBUGPROCAMD",
.DebugMessageCallbackARB => "DEBUGPROCARB",
.DebugMessageCallbackKHR => "DEBUGPROCKHR",
else => "DEBUGPROC",
},
},
else => null,
},
.DeleteBuffers,
.DeleteBuffersARB,
.GenBuffers,
.GenBuffersARB,
=> switch (param_index) {
1 => .{ .name = "buffers", .type_expr = "[*]uint" },
else => null,
},
.DeleteFramebuffers,
.DeleteFramebuffersEXT,
.DeleteFramebuffersOES,
.GenFramebuffers,
.GenFramebuffersEXT,
.GenFramebuffersOES,
=> switch (param_index) {
1 => .{ .name = "framebuffers", .type_expr = "[*]uint" },
else => null,
},
.DeleteProgramPipelines,
.DeleteProgramPipelinesEXT,
.GenProgramPipelines,
.GenProgramPipelinesEXT,
=> switch (param_index) {
1 => .{ .name = "pipelines", .type_expr = "[*]uint" },
else => null,
},
.DeleteProgramsARB,
.DeleteProgramsNV,
=> switch (param_index) {
1 => .{ .name = "programs", .type_expr = "[*]uint" },
else => null,
},
.DeleteQueries,
.DeleteQueriesARB,
.DeleteQueriesEXT,
.DeleteTransformFeedbacks,
.DeleteTransformFeedbacksNV,
.GenQueries,
.GenQueriesARB,
.GenQueriesEXT,
@@ -1018,39 +1063,73 @@ fn paramOverride(command: registry.Command.Name, param_index: usize) ?struct {
1 => .{ .name = "ids", .type_expr = "[*]uint" },
else => null,
},
.DeleteRenderbuffers,
.DeleteRenderbuffersEXT,
.DeleteRenderbuffersOES,
.GenRenderbuffers,
.GenRenderbuffersEXT,
.GenRenderbuffersOES,
=> switch (param_index) {
1 => .{ .name = "renderbuffers", .type_expr = "[*]uint" },
else => null,
},
.GenSamplers => switch (param_index) {
.DeleteSamplers,
.GenSamplers,
=> switch (param_index) {
1 => .{ .name = "samplers", .type_expr = "[*]uint" },
else => null,
},
.DeleteSync,
.DeleteSyncAPPLE,
.IsSync,
.IsSyncAPPLE,
=> switch (param_index) {
0 => .{ .name = "sync_", .type_expr = "?sync" },
else => null,
},
.DeleteTextures,
.DeleteTexturesEXT,
.GenTextures,
.GenTexturesEXT,
=> switch (param_index) {
1 => .{ .name = "textures", .type_expr = "[*]uint" },
else => null,
},
.DeleteVertexArrays,
.DeleteVertexArraysAPPLE,
.DeleteVertexArraysOES,
.GenVertexArrays,
.GenVertexArraysAPPLE,
.GenVertexArraysOES,
=> switch (param_index) {
1 => .{ .name = "arrays", .type_expr = "[*]uint" },
else => null,
},
.DrawElements,
=> switch (param_index) {
3 => .{ .name = "indices", .type_expr = "usize" },
else => null,
},
.EGLImageTargetRenderbufferStorageOES,
.EGLImageTargetTexStorageEXT,
.EGLImageTargetTexture2DOES,
.EGLImageTargetTextureStorageEXT,
=> switch (param_index) {
1 => .{ .name = "image", .type_expr = "eglImageOES" },
else => null,
},
inline .GetAttribLocation,
.GetAttribLocationARB,
.GetUniformLocation,
.GetUniformLocationARB,
=> |tag| switch (param_index) {
1 => .{ .name = "name", .type_expr = "[*:0]const " ++ switch (tag) {
.GetAttribLocationARB, .GetUniformLocationARB => "charARB",
else => "char",
} },
1 => .{
.name = "name",
.type_expr = "[*:0]const " ++ switch (tag) {
.GetAttribLocationARB, .GetUniformLocationARB => "charARB",
else => "char",
},
},
else => null,
},
.GetBooleani_v,
@@ -1059,18 +1138,26 @@ fn paramOverride(command: registry.Command.Name, param_index: usize) ?struct {
2 => .{ .name = "data", .type_expr = "[*]boolean" },
else => null,
},
.GetBooleanv => switch (param_index) {
.GetBooleanv,
=> switch (param_index) {
1 => .{ .name = "data", .type_expr = "[*]boolean" },
else => null,
},
.GetDoublei_v,
.GetDoublei_vEXT,
.GetDoubleIndexedvEXT,
=> switch (param_index) {
2 => .{ .name = if (command == .GetDoublei_vEXT) "params" else "data", .type_expr = "[*]double" },
2 => .{
.name = switch (command) {
.GetDoublei_vEXT => "params",
else => "data",
},
.type_expr = "[*]double",
},
else => null,
},
.GetDoublev => switch (param_index) {
.GetDoublev,
=> switch (param_index) {
1 => .{ .name = "data", .type_expr = "[*]double" },
else => null,
},
@@ -1080,22 +1167,36 @@ fn paramOverride(command: registry.Command.Name, param_index: usize) ?struct {
.GetFloati_vOES,
.GetFloatIndexedvEXT,
=> switch (param_index) {
2 => .{ .name = if (command == .GetFloati_vEXT) "params" else "data", .type_expr = "[*]float" },
2 => .{
.name = switch (command) {
.GetFloati_vEXT => "params",
else => "data",
},
.type_expr = "[*]float",
},
else => null,
},
.GetFloatv => switch (param_index) {
.GetFloatv,
=> switch (param_index) {
1 => .{ .name = "data", .type_expr = "[*]float" },
else => null,
},
.GetInteger64i_v => switch (param_index) {
.GetInteger64i_v,
=> switch (param_index) {
2 => .{ .name = "data", .type_expr = "[*]int64" },
else => null,
},
.GetInteger64v,
.GetInteger64vAPPLE,
.GetInteger64vEXT,
=> switch (param_index) {
1 => .{ .name = if (command == .GetInteger64vAPPLE) "params" else "data", .type_expr = "[*]int64" },
1 => .{
.name = switch (command) {
.GetInteger64vAPPLE => "params",
else => "data",
},
.type_expr = "[*]int64",
},
else => null,
},
.GetIntegeri_v,
@@ -1105,7 +1206,8 @@ fn paramOverride(command: registry.Command.Name, param_index: usize) ?struct {
2 => .{ .name = "data", .type_expr = "[*]int" },
else => null,
},
.GetIntegerv => switch (param_index) {
.GetIntegerv,
=> switch (param_index) {
1 => .{ .name = "data", .type_expr = "[*]int" },
else => null,
},
@@ -1122,7 +1224,8 @@ fn paramOverride(command: registry.Command.Name, param_index: usize) ?struct {
2 => .{ .name = "param", .type_expr = "*int" },
else => null,
},
.GetShaderPrecisionFormat => switch (param_index) {
.GetShaderPrecisionFormat,
=> switch (param_index) {
2 => .{ .name = "range", .type_expr = "*int" },
3 => .{ .name = "precision", .type_expr = "*int" },
else => null,
@@ -1131,17 +1234,30 @@ fn paramOverride(command: registry.Command.Name, param_index: usize) ?struct {
.GetShaderSourceARB,
=> |tag| switch (param_index) {
2 => .{ .name = "length", .type_expr = "?*sizei" },
3 => .{ .name = "source", .type_expr = "[*]" ++ if (tag == .GetShaderSourceARB) "charARB" else "char" },
3 => .{
.name = "source",
.type_expr = "[*]" ++ switch (tag) {
.GetShaderSourceARB => "charARB",
else => "char",
},
},
else => null,
},
.GetVkProcAddrNV => switch (param_index) {
.GetVkProcAddrNV,
=> switch (param_index) {
0 => .{ .name = "name", .type_expr = "[*:0]const char" },
else => null,
},
inline .ShaderSource,
.ShaderSourceARB,
=> |tag| switch (param_index) {
2 => .{ .name = "strings", .type_expr = "[*]const [*]const " ++ if (tag == .GetShaderSourceARB) "charARB" else "char" },
2 => .{
.name = "strings",
.type_expr = "[*]const [*]const " ++ switch (tag) {
.GetShaderSourceARB => "charARB",
else => "char",
},
},
3 => .{ .name = "lengths", .type_expr = "?[*]const int" },
else => null,
},
@@ -1184,7 +1300,8 @@ fn returnTypeOverride(command: registry.Command.Name) ?struct {
.GetString,
.GetStringi,
=> .{ .type_expr = "?[*:0]const ubyte" },
.GetVkProcAddrNV => .{ .type_expr = "?VULKANPROCNV" },
.GetVkProcAddrNV,
=> .{ .type_expr = "?VULKANPROCNV" },
else => null,
};
}
3 changes: 2 additions & 1 deletion zigglgen/updateApiRegistry.ps1
Original file line number Diff line number Diff line change
@@ -398,10 +398,11 @@ function commandSortKey ([string] $str) {
x(?<!Box|Index|Matrix|Tex|Vertex)|
h(?<!Depth|Finish|Flush|Length|Path|Push|Through|Width)|
f|
fi|
d(?<!Advanced|Blend|Coord|Enabled|End|Fixed|Indexed|Keyed)
)?
(?<array>
i(?<!Fini)|
i(?<!Bufferfi|Fini|Framebufferfi)|
v|
i_v
)?

0 comments on commit a4f3a0f

Please sign in to comment.