src/sysgpu: move mach-sysgpu@d6ed118f54c4784f7ce01b70fc1b94f887fae1a8 package to here
Helps hexops/mach#1165 Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
This commit is contained in:
parent
e38a441b69
commit
e7b2ebef70
97 changed files with 51261 additions and 0 deletions
6
src/sysgpu/opengl/c.zig
Normal file
6
src/sysgpu/opengl/c.zig
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
pub usingnamespace @cImport({
|
||||
@cInclude("windows.h");
|
||||
@cInclude("GL/glcorearb.h");
|
||||
@cInclude("GL/glext.h");
|
||||
@cInclude("GL/wglext.h");
|
||||
});
|
||||
263
src/sysgpu/opengl/conv.zig
Normal file
263
src/sysgpu/opengl/conv.zig
Normal file
|
|
@ -0,0 +1,263 @@
|
|||
const sysgpu = @import("../sysgpu/main.zig");
|
||||
const utils = @import("../utils.zig");
|
||||
const c = @import("c.zig");
|
||||
|
||||
fn stencilEnable(stencil: sysgpu.StencilFaceState) bool {
|
||||
return stencil.compare != .always or stencil.fail_op != .keep or stencil.depth_fail_op != .keep or stencil.pass_op != .keep;
|
||||
}
|
||||
|
||||
pub fn glAttributeCount(format: sysgpu.VertexFormat) c.GLint {
|
||||
return switch (format) {
|
||||
.undefined => unreachable,
|
||||
.uint8x2 => 2,
|
||||
.uint8x4 => 4,
|
||||
.sint8x2 => 2,
|
||||
.sint8x4 => 4,
|
||||
.unorm8x2 => 2,
|
||||
.unorm8x4 => 4,
|
||||
.snorm8x2 => 2,
|
||||
.snorm8x4 => 4,
|
||||
.uint16x2 => 2,
|
||||
.uint16x4 => 4,
|
||||
.sint16x2 => 2,
|
||||
.sint16x4 => 4,
|
||||
.unorm16x2 => 2,
|
||||
.unorm16x4 => 4,
|
||||
.snorm16x2 => 2,
|
||||
.snorm16x4 => 4,
|
||||
.float16x2 => 2,
|
||||
.float16x4 => 4,
|
||||
.float32 => 1,
|
||||
.float32x2 => 2,
|
||||
.float32x3 => 3,
|
||||
.float32x4 => 4,
|
||||
.uint32 => 1,
|
||||
.uint32x2 => 2,
|
||||
.uint32x3 => 3,
|
||||
.uint32x4 => 4,
|
||||
.sint32 => 1,
|
||||
.sint32x2 => 2,
|
||||
.sint32x3 => 3,
|
||||
.sint32x4 => 4,
|
||||
};
|
||||
}
|
||||
|
||||
pub fn glAttributeIsNormalized(format_type: utils.FormatType) c.GLboolean {
|
||||
return switch (format_type) {
|
||||
.unorm, .unorm_srgb, .snorm => c.GL_TRUE,
|
||||
else => c.GL_FALSE,
|
||||
};
|
||||
}
|
||||
|
||||
pub fn glAttributeIsInt(format_type: utils.FormatType) bool {
|
||||
return switch (format_type) {
|
||||
.uint, .sint => true,
|
||||
else => false,
|
||||
};
|
||||
}
|
||||
|
||||
pub fn glAttributeType(format: sysgpu.VertexFormat) c.GLenum {
|
||||
return switch (format) {
|
||||
.undefined => unreachable,
|
||||
.uint8x2 => c.GL_UNSIGNED_BYTE,
|
||||
.uint8x4 => c.GL_UNSIGNED_BYTE,
|
||||
.sint8x2 => c.GL_BYTE,
|
||||
.sint8x4 => c.GL_BYTE,
|
||||
.unorm8x2 => c.GL_UNSIGNED_BYTE,
|
||||
.unorm8x4 => c.GL_UNSIGNED_BYTE,
|
||||
.snorm8x2 => c.GL_BYTE,
|
||||
.snorm8x4 => c.GL_BYTE,
|
||||
.uint16x2 => c.GL_UNSIGNED_SHORT,
|
||||
.uint16x4 => c.GL_UNSIGNED_SHORT,
|
||||
.sint16x2 => c.GL_SHORT,
|
||||
.sint16x4 => c.GL_SHORT,
|
||||
.unorm16x2 => c.GL_UNSIGNED_SHORT,
|
||||
.unorm16x4 => c.GL_UNSIGNED_SHORT,
|
||||
.snorm16x2 => c.GL_SHORT,
|
||||
.snorm16x4 => c.GL_SHORT,
|
||||
.float16x2 => c.GL_HALF_FLOAT,
|
||||
.float16x4 => c.GL_HALF_FLOAT,
|
||||
.float32 => c.GL_FLOAT,
|
||||
.float32x2 => c.GL_FLOAT,
|
||||
.float32x3 => c.GL_FLOAT,
|
||||
.float32x4 => c.GL_FLOAT,
|
||||
.uint32 => c.GL_UNSIGNED_INT,
|
||||
.uint32x2 => c.GL_UNSIGNED_INT,
|
||||
.uint32x3 => c.GL_UNSIGNED_INT,
|
||||
.uint32x4 => c.GL_UNSIGNED_INT,
|
||||
.sint32 => c.GL_INT,
|
||||
.sint32x2 => c.GL_INT,
|
||||
.sint32x3 => c.GL_INT,
|
||||
.sint32x4 => c.GL_INT,
|
||||
};
|
||||
}
|
||||
|
||||
pub fn glBlendFactor(factor: sysgpu.BlendFactor, color: bool) c.GLenum {
|
||||
return switch (factor) {
|
||||
.zero => c.GL_ZERO,
|
||||
.one => c.GL_ONE,
|
||||
.src => c.GL_SRC_COLOR,
|
||||
.one_minus_src => c.GL_ONE_MINUS_SRC_COLOR,
|
||||
.src_alpha => c.GL_SRC_ALPHA,
|
||||
.one_minus_src_alpha => c.GL_ONE_MINUS_SRC_ALPHA,
|
||||
.dst => c.GL_DST_COLOR,
|
||||
.one_minus_dst => c.GL_ONE_MINUS_DST_COLOR,
|
||||
.dst_alpha => c.GL_DST_ALPHA,
|
||||
.one_minus_dst_alpha => c.GL_ONE_MINUS_DST_ALPHA,
|
||||
.src_alpha_saturated => c.GL_SRC_ALPHA_SATURATE,
|
||||
.constant => if (color) c.GL_CONSTANT_COLOR else c.GL_CONSTANT_ALPHA,
|
||||
.one_minus_constant => if (color) c.GL_ONE_MINUS_CONSTANT_COLOR else c.GL_ONE_MINUS_CONSTANT_ALPHA,
|
||||
.src1 => c.GL_SRC1_COLOR,
|
||||
.one_minus_src1 => c.GL_ONE_MINUS_SRC1_COLOR,
|
||||
.src1_alpha => c.GL_SRC1_ALPHA,
|
||||
.one_minus_src1_alpha => c.GL_ONE_MINUS_SRC1_ALPHA,
|
||||
};
|
||||
}
|
||||
|
||||
pub fn glBlendOp(op: sysgpu.BlendOperation) c.GLenum {
|
||||
return switch (op) {
|
||||
.add => c.GL_FUNC_ADD,
|
||||
.subtract => c.GL_FUNC_SUBTRACT,
|
||||
.reverse_subtract => c.GL_FUNC_REVERSE_SUBTRACT,
|
||||
.min => c.GL_MIN,
|
||||
.max => c.GL_MAX,
|
||||
};
|
||||
}
|
||||
|
||||
//pub fn glBufferDataUsage(usage: sysgpu.Buffer.UsageFlags, mapped_at_creation: sysgpu.Bool32) c.GLenum {}
|
||||
|
||||
pub fn glBufferStorageFlags(usage: sysgpu.Buffer.UsageFlags, mapped_at_creation: sysgpu.Bool32) c.GLbitfield {
|
||||
var flags: c.GLbitfield = 0;
|
||||
if (mapped_at_creation == .true)
|
||||
flags |= c.GL_MAP_WRITE_BIT;
|
||||
if (usage.map_read)
|
||||
flags |= c.GL_MAP_PERSISTENT_BIT | c.GL_MAP_READ_BIT;
|
||||
if (usage.map_write)
|
||||
flags |= c.GL_MAP_PERSISTENT_BIT | c.GL_MAP_COHERENT_BIT | c.GL_MAP_WRITE_BIT;
|
||||
return flags;
|
||||
}
|
||||
|
||||
pub fn glCompareFunc(func: sysgpu.CompareFunction) c.GLenum {
|
||||
return switch (func) {
|
||||
.undefined => unreachable,
|
||||
.never => c.GL_NEVER,
|
||||
.less => c.GL_LESS,
|
||||
.less_equal => c.GL_LEQUAL,
|
||||
.greater => c.GL_GREATER,
|
||||
.greater_equal => c.GL_GEQUAL,
|
||||
.equal => c.GL_EQUAL,
|
||||
.not_equal => c.GL_NOTEQUAL,
|
||||
.always => c.GL_ALWAYS,
|
||||
};
|
||||
}
|
||||
|
||||
pub fn glCullEnabled(cull_mode: sysgpu.CullMode) bool {
|
||||
return switch (cull_mode) {
|
||||
.none => false,
|
||||
else => true,
|
||||
};
|
||||
}
|
||||
|
||||
pub fn glCullFace(cull_mode: sysgpu.CullMode) c.GLenum {
|
||||
return switch (cull_mode) {
|
||||
.none => c.GL_BACK,
|
||||
.front => c.GL_FRONT,
|
||||
.back => c.GL_BACK,
|
||||
};
|
||||
}
|
||||
|
||||
pub fn glDepthMask(ds: *const sysgpu.DepthStencilState) c.GLboolean {
|
||||
return if (ds.depth_write_enabled == .true) c.GL_TRUE else c.GL_FALSE;
|
||||
}
|
||||
|
||||
pub fn glDepthTestEnabled(ds: *const sysgpu.DepthStencilState) bool {
|
||||
return ds.depth_compare != .always or ds.depth_write_enabled == .true;
|
||||
}
|
||||
|
||||
pub fn glFrontFace(front_face: sysgpu.FrontFace) c.GLenum {
|
||||
return switch (front_face) {
|
||||
.ccw => c.GL_CCW,
|
||||
.cw => c.GL_CW,
|
||||
};
|
||||
}
|
||||
|
||||
pub fn glIndexType(format: sysgpu.IndexFormat) c.GLenum {
|
||||
return switch (format) {
|
||||
.undefined => unreachable,
|
||||
.uint16 => c.GL_UNSIGNED_SHORT,
|
||||
.uint32 => c.GL_UNSIGNED_INT,
|
||||
};
|
||||
}
|
||||
|
||||
pub fn glIndexElementSize(format: sysgpu.IndexFormat) usize {
|
||||
return switch (format) {
|
||||
.undefined => unreachable,
|
||||
.uint16 => 2,
|
||||
.uint32 => 4,
|
||||
};
|
||||
}
|
||||
|
||||
pub fn glMapAccess(usage: sysgpu.Buffer.UsageFlags, mapped_at_creation: sysgpu.Bool32) c.GLbitfield {
|
||||
var flags: c.GLbitfield = 0;
|
||||
if (mapped_at_creation == .true)
|
||||
flags |= c.GL_MAP_WRITE_BIT;
|
||||
if (usage.map_read)
|
||||
flags |= c.GL_MAP_PERSISTENT_BIT | c.GL_MAP_READ_BIT;
|
||||
if (usage.map_write)
|
||||
flags |= c.GL_MAP_PERSISTENT_BIT | c.GL_MAP_WRITE_BIT;
|
||||
return flags;
|
||||
}
|
||||
|
||||
pub fn glPrimitiveMode(topology: sysgpu.PrimitiveTopology) c.GLenum {
|
||||
return switch (topology) {
|
||||
.point_list => c.GL_POINTS,
|
||||
.line_list => c.GL_LINES,
|
||||
.line_strip => c.GL_LINE_STRIP,
|
||||
.triangle_list => c.GL_TRIANGLES,
|
||||
.triangle_strip => c.GL_TRIANGLE_STRIP,
|
||||
};
|
||||
}
|
||||
|
||||
pub fn glStencilOp(op: sysgpu.StencilOperation) c.GLenum {
|
||||
return switch (op) {
|
||||
.keep => c.GL_KEEP,
|
||||
.zero => c.GL_ZERO,
|
||||
.replace => c.GL_REPLACE,
|
||||
.invert => c.GL_INVERT,
|
||||
.increment_clamp => c.GL_INCR,
|
||||
.decrement_clamp => c.GL_DECR,
|
||||
.increment_wrap => c.GL_INCR_WRAP,
|
||||
.decrement_wrap => c.GL_DECR_WRAP,
|
||||
};
|
||||
}
|
||||
|
||||
pub fn glStencilTestEnabled(ds: *const sysgpu.DepthStencilState) bool {
|
||||
return stencilEnable(ds.stencil_front) or stencilEnable(ds.stencil_back);
|
||||
}
|
||||
|
||||
pub fn glTargetForBuffer(usage: sysgpu.Buffer.UsageFlags) c.GLenum {
|
||||
// Not sure if this matters anymore - only get to pick one anyway
|
||||
if (usage.index)
|
||||
return c.GL_ELEMENT_ARRAY_BUFFER;
|
||||
if (usage.vertex)
|
||||
return c.GL_ARRAY_BUFFER;
|
||||
if (usage.uniform)
|
||||
return c.GL_UNIFORM_BUFFER;
|
||||
if (usage.storage)
|
||||
return c.GL_SHADER_STORAGE_BUFFER;
|
||||
if (usage.indirect)
|
||||
return c.GL_DRAW_INDIRECT_BUFFER;
|
||||
if (usage.query_resolve)
|
||||
return c.GL_QUERY_BUFFER;
|
||||
|
||||
return c.GL_ARRAY_BUFFER;
|
||||
}
|
||||
|
||||
pub fn glTargetForBufferBinding(binding_type: sysgpu.Buffer.BindingType) c.GLenum {
|
||||
return switch (binding_type) {
|
||||
.undefined => unreachable,
|
||||
.uniform => c.GL_UNIFORM_BUFFER,
|
||||
.storage => c.GL_SHADER_STORAGE_BUFFER,
|
||||
.read_only_storage => c.GL_SHADER_STORAGE_BUFFER,
|
||||
};
|
||||
}
|
||||
1459
src/sysgpu/opengl/proc.zig
Normal file
1459
src/sysgpu/opengl/proc.zig
Normal file
File diff suppressed because it is too large
Load diff
Loading…
Add table
Add a link
Reference in a new issue