adding image to png export to C test
This commit is contained in:
@@ -18,12 +18,31 @@ pub fn deinit(self: *Self) void {
|
||||
pub fn dispatch(self: *Self, command: *const cmd.Command) VkError!void {
|
||||
_ = self;
|
||||
switch (command.*) {
|
||||
.ClearColorImage => |data| try clearColorImage(&data),
|
||||
.CopyBuffer => |data| try copyBuffer(&data),
|
||||
.CopyImage => |data| try copyImage(&data),
|
||||
.FillBuffer => |data| try fillBuffer(&data),
|
||||
else => {},
|
||||
}
|
||||
}
|
||||
|
||||
fn clearColorImage(data: *const cmd.CommandClearColorImage) VkError!void {
|
||||
// TODO: use a blitter
|
||||
|
||||
const image = data.image;
|
||||
for (data.ranges) |range| {
|
||||
const image_size = image.getTotalSize();
|
||||
|
||||
const memory = if (image.memory) |memory| memory else return VkError.ValidationFailed;
|
||||
var memory_map: []u32 = @as([*]u32, @ptrCast(@alignCast(try memory.map(0, image_size))))[0..image_size];
|
||||
|
||||
_ = range;
|
||||
_ = &memory_map;
|
||||
|
||||
memory.unmap();
|
||||
}
|
||||
}
|
||||
|
||||
fn copyBuffer(data: *const cmd.CommandCopyBuffer) VkError!void {
|
||||
for (data.regions) |region| {
|
||||
const src_memory = if (data.src.memory) |memory| memory else return VkError.ValidationFailed;
|
||||
@@ -39,10 +58,13 @@ fn copyBuffer(data: *const cmd.CommandCopyBuffer) VkError!void {
|
||||
}
|
||||
}
|
||||
|
||||
fn copyImage(data: *const cmd.CommandCopyImage) VkError!void {
|
||||
_ = data;
|
||||
}
|
||||
|
||||
fn fillBuffer(data: *const cmd.CommandFillBuffer) VkError!void {
|
||||
const memory = if (data.buffer.memory) |memory| memory else return VkError.ValidationFailed;
|
||||
const raw_memory_map: [*]u32 = @ptrCast(@alignCast(try memory.map(data.offset, data.size)));
|
||||
var memory_map: []u32 = raw_memory_map[0..data.size];
|
||||
var memory_map: []u32 = @as([*]u32, @ptrCast(@alignCast(try memory.map(data.offset, data.size))))[0..data.size];
|
||||
|
||||
for (0..@divExact(data.size, @sizeOf(u32))) |i| {
|
||||
memory_map[i] = data.data;
|
||||
|
||||
@@ -35,7 +35,7 @@ pub fn destroy(interface: *Interface, allocator: std.mem.Allocator) void {
|
||||
}
|
||||
|
||||
pub fn getMemoryRequirements(interface: *Interface, requirements: *vk.MemoryRequirements) void {
|
||||
requirements.alignment = lib.MEMORY_REQUIREMENTS_ALIGNMENT;
|
||||
requirements.alignment = lib.MEMORY_REQUIREMENTS_BUFFER_ALIGNMENT;
|
||||
if (interface.usage.uniform_texel_buffer_bit or interface.usage.uniform_texel_buffer_bit) {
|
||||
requirements.alignment = @max(requirements.alignment, lib.MIN_TEXEL_BUFFER_ALIGNMENT);
|
||||
}
|
||||
|
||||
@@ -22,7 +22,9 @@ pub fn create(device: *base.Device, allocator: std.mem.Allocator, info: *const v
|
||||
|
||||
interface.dispatch_table = &.{
|
||||
.begin = begin,
|
||||
.clearColorImage = clearColorImage,
|
||||
.copyBuffer = copyBuffer,
|
||||
.copyImage = copyImage,
|
||||
.end = end,
|
||||
.fillBuffer = fillBuffer,
|
||||
.reset = reset,
|
||||
@@ -58,6 +60,15 @@ pub fn reset(interface: *Interface, flags: vk.CommandBufferResetFlags) VkError!v
|
||||
|
||||
// Commands ====================================================================================================
|
||||
|
||||
pub fn clearColorImage(interface: *Interface, image: *base.Image, layout: vk.ImageLayout, color: *const vk.ClearColorValue, ranges: []const vk.ImageSubresourceRange) VkError!void {
|
||||
// No-op
|
||||
_ = interface;
|
||||
_ = image;
|
||||
_ = layout;
|
||||
_ = color;
|
||||
_ = ranges;
|
||||
}
|
||||
|
||||
pub fn fillBuffer(interface: *Interface, buffer: *base.Buffer, offset: vk.DeviceSize, size: vk.DeviceSize, data: u32) VkError!void {
|
||||
// No-op
|
||||
_ = interface;
|
||||
@@ -74,3 +85,11 @@ pub fn copyBuffer(interface: *Interface, src: *base.Buffer, dst: *base.Buffer, r
|
||||
_ = dst;
|
||||
_ = regions;
|
||||
}
|
||||
|
||||
pub fn copyImage(interface: *Interface, src: *base.Image, dst: *base.Image, regions: []const vk.ImageCopy) VkError!void {
|
||||
// No-op
|
||||
_ = interface;
|
||||
_ = src;
|
||||
_ = dst;
|
||||
_ = regions;
|
||||
}
|
||||
|
||||
@@ -36,5 +36,5 @@ pub fn destroy(interface: *Interface, allocator: std.mem.Allocator) void {
|
||||
|
||||
pub fn getMemoryRequirements(interface: *Interface, requirements: *vk.MemoryRequirements) void {
|
||||
_ = interface;
|
||||
requirements.alignment = lib.MEMORY_REQUIREMENTS_ALIGNMENT;
|
||||
requirements.alignment = lib.MEMORY_REQUIREMENTS_IMAGE_ALIGNMENT;
|
||||
}
|
||||
|
||||
@@ -29,7 +29,9 @@ pub const DEVICE_ID = 0x600DCAFE;
|
||||
pub const MEMORY_TYPE_GENERIC_BIT = 0;
|
||||
|
||||
/// 16 bytes for 128-bit vector types.
|
||||
pub const MEMORY_REQUIREMENTS_ALIGNMENT = 16;
|
||||
pub const MEMORY_REQUIREMENTS_BUFFER_ALIGNMENT = 16;
|
||||
|
||||
pub const MEMORY_REQUIREMENTS_IMAGE_ALIGNMENT = 256;
|
||||
|
||||
/// Vulkan 1.2 requires buffer offset alignment to be at most 256.
|
||||
pub const MIN_TEXEL_BUFFER_ALIGNMENT = 256;
|
||||
|
||||
Reference in New Issue
Block a user