Files
VulkanDriver/src/intel/FlintCommandBuffer.zig
T
kbz_8 d68360173f
Test / build_and_test (push) Successful in 1m6s
Build / build (push) Successful in 1m22s
renaming intel driver to Flint
2026-06-16 19:32:20 +02:00

393 lines
12 KiB
Zig

const std = @import("std");
const vk = @import("vulkan");
const base = @import("base");
const VkError = base.VkError;
const Self = @This();
pub const Interface = base.CommandBuffer;
interface: Interface,
pub fn create(device: *base.Device, allocator: std.mem.Allocator, info: *const vk.CommandBufferAllocateInfo) VkError!*Self {
const self = allocator.create(Self) catch return VkError.OutOfHostMemory;
errdefer allocator.destroy(self);
var interface = try Interface.init(device, allocator, info);
interface.vtable = &.{ .destroy = destroy };
interface.dispatch_table = &.{
.begin = begin,
.beginQuery = beginQuery,
.beginRenderPass = beginRenderPass,
.bindDescriptorSets = bindDescriptorSets,
.bindPipeline = bindPipeline,
.bindIndexBuffer = bindIndexBuffer,
.bindVertexBuffer = bindVertexBuffer,
.blitImage = blitImage,
.clearAttachment = clearAttachment,
.clearColorImage = clearColorImage,
.clearDepthStencilImage = clearDepthStencilImage,
.copyBuffer = copyBuffer,
.copyBufferToImage = copyBufferToImage,
.copyImage = copyImage,
.copyImageToBuffer = copyImageToBuffer,
.copyQueryPoolResults = copyQueryPoolResults,
.dispatch = dispatch,
.dispatchBase = dispatchBase,
.dispatchIndirect = dispatchIndirect,
.draw = draw,
.drawIndexed = drawIndexed,
.drawIndexedIndirect = drawIndexedIndirect,
.drawIndirect = drawIndirect,
.end = end,
.endQuery = endQuery,
.endRenderPass = endRenderPass,
.executeCommands = executeCommands,
.fillBuffer = fillBuffer,
.nextSubpass = nextSubpass,
.pipelineBarrier = pipelineBarrier,
.pushConstants = pushConstants,
.reset = reset,
.resetQueryPool = resetQueryPool,
.resetEvent = resetEvent,
.resolveImage = resolveImage,
.setEvent = setEvent,
.setBlendConstants = setBlendConstants,
.setDeviceMask = setDeviceMask,
.setScissor = setScissor,
.setStencilCompareMask = setStencilCompareMask,
.setStencilReference = setStencilReference,
.setStencilWriteMask = setStencilWriteMask,
.setViewport = setViewport,
.updateBuffer = updateBuffer,
.waitEvent = waitEvent,
};
self.* = .{ .interface = interface };
return self;
}
pub fn destroy(interface: *Interface, allocator: std.mem.Allocator) void {
const self: *Self = @alignCast(@fieldParentPtr("interface", interface));
allocator.destroy(self);
}
pub fn execute(self: *Self) VkError!void {
try self.interface.submit();
self.interface.finish() catch {};
}
pub fn begin(interface: *Interface, info: *const vk.CommandBufferBeginInfo) VkError!void {
_ = interface;
_ = info;
}
pub fn end(interface: *Interface) VkError!void {
_ = interface;
}
pub fn reset(interface: *Interface, flags: vk.CommandBufferResetFlags) VkError!void {
_ = interface;
_ = flags;
}
pub fn beginQuery(interface: *Interface, pool: *base.QueryPool, query: u32, flags: vk.QueryControlFlags) VkError!void {
_ = interface;
_ = flags;
try pool.begin(query);
}
pub fn endQuery(interface: *Interface, pool: *base.QueryPool, query: u32) VkError!void {
_ = interface;
try pool.end(query);
}
pub fn resetQueryPool(interface: *Interface, pool: *base.QueryPool, first: u32, count: u32) VkError!void {
_ = interface;
try pool.reset(first, count);
}
pub fn beginRenderPass(interface: *Interface, render_pass: *base.RenderPass, framebuffer: *base.Framebuffer, render_area: vk.Rect2D, clear_values: ?[]const vk.ClearValue) VkError!void {
_ = interface;
_ = render_pass;
_ = framebuffer;
_ = render_area;
_ = clear_values;
}
pub fn bindDescriptorSets(interface: *Interface, bind_point: vk.PipelineBindPoint, first_set: u32, sets: [base.VULKAN_MAX_DESCRIPTOR_SETS]?*base.DescriptorSet, dynamic_offsets: []const u32) VkError!void {
_ = interface;
_ = bind_point;
_ = first_set;
_ = sets;
_ = dynamic_offsets;
}
pub fn bindPipeline(interface: *Interface, bind_point: vk.PipelineBindPoint, pipeline: *base.Pipeline) VkError!void {
_ = interface;
_ = bind_point;
_ = pipeline;
}
pub fn bindIndexBuffer(interface: *Interface, buffer: *base.Buffer, offset: usize, index_type: vk.IndexType) VkError!void {
_ = interface;
_ = buffer;
_ = offset;
_ = index_type;
}
pub fn bindVertexBuffer(interface: *Interface, index: usize, buffer: *base.Buffer, offset: usize) VkError!void {
_ = interface;
_ = index;
_ = buffer;
_ = offset;
}
pub fn blitImage(interface: *Interface, src: *base.Image, src_layout: vk.ImageLayout, dst: *base.Image, dst_layout: vk.ImageLayout, regions: []const vk.ImageBlit, filter: vk.Filter) VkError!void {
_ = interface;
_ = src;
_ = src_layout;
_ = dst;
_ = dst_layout;
_ = regions;
_ = filter;
}
pub fn clearAttachment(interface: *Interface, attachment: vk.ClearAttachment, rect: vk.ClearRect) VkError!void {
_ = interface;
_ = attachment;
_ = rect;
}
pub fn clearColorImage(interface: *Interface, image: *base.Image, layout: vk.ImageLayout, color: *const vk.ClearColorValue, range: vk.ImageSubresourceRange) VkError!void {
_ = interface;
_ = image;
_ = layout;
_ = color;
_ = range;
}
pub fn clearDepthStencilImage(interface: *Interface, image: *base.Image, layout: vk.ImageLayout, value: *const vk.ClearDepthStencilValue, range: vk.ImageSubresourceRange) VkError!void {
_ = interface;
_ = image;
_ = layout;
_ = value;
_ = range;
}
pub fn copyBuffer(interface: *Interface, src: *base.Buffer, dst: *base.Buffer, regions: []const vk.BufferCopy) VkError!void {
_ = interface;
_ = src;
_ = dst;
_ = regions;
}
pub fn copyBufferToImage(interface: *Interface, src: *base.Buffer, dst: *base.Image, dst_layout: vk.ImageLayout, regions: []const vk.BufferImageCopy) VkError!void {
_ = interface;
_ = src;
_ = dst;
_ = dst_layout;
_ = regions;
}
pub fn copyImage(interface: *Interface, src: *base.Image, src_layout: vk.ImageLayout, dst: *base.Image, dst_layout: vk.ImageLayout, regions: []const vk.ImageCopy) VkError!void {
_ = interface;
_ = src;
_ = src_layout;
_ = dst;
_ = dst_layout;
_ = regions;
}
pub fn copyImageToBuffer(interface: *Interface, src: *base.Image, src_layout: vk.ImageLayout, dst: *base.Buffer, regions: []const vk.BufferImageCopy) VkError!void {
_ = interface;
_ = src;
_ = src_layout;
_ = dst;
_ = regions;
}
pub fn copyQueryPoolResults(interface: *Interface, pool: *base.QueryPool, first: u32, count: u32, dst: *base.Buffer, offset: vk.DeviceSize, stride: vk.DeviceSize, flags: vk.QueryResultFlags) VkError!void {
_ = interface;
_ = pool;
_ = first;
_ = count;
_ = dst;
_ = offset;
_ = stride;
_ = flags;
}
pub fn dispatch(interface: *Interface, group_count_x: u32, group_count_y: u32, group_count_z: u32) VkError!void {
_ = interface;
_ = group_count_x;
_ = group_count_y;
_ = group_count_z;
}
pub fn dispatchBase(interface: *Interface, base_group_x: u32, base_group_y: u32, base_group_z: u32, group_count_x: u32, group_count_y: u32, group_count_z: u32) VkError!void {
_ = interface;
_ = base_group_x;
_ = base_group_y;
_ = base_group_z;
_ = group_count_x;
_ = group_count_y;
_ = group_count_z;
}
pub fn setDeviceMask(interface: *Interface, device_mask: u32) VkError!void {
_ = interface;
_ = device_mask;
}
pub fn dispatchIndirect(interface: *Interface, buffer: *base.Buffer, offset: vk.DeviceSize) VkError!void {
_ = interface;
_ = buffer;
_ = offset;
}
pub fn draw(interface: *Interface, vertex_count: usize, instance_count: usize, first_vertex: usize, first_instance: usize) VkError!void {
_ = interface;
_ = vertex_count;
_ = instance_count;
_ = first_vertex;
_ = first_instance;
}
pub fn drawIndexed(interface: *Interface, index_count: usize, instance_count: usize, first_index: usize, vertex_offset: i32, first_instance: usize) VkError!void {
_ = interface;
_ = index_count;
_ = instance_count;
_ = first_index;
_ = vertex_offset;
_ = first_instance;
}
pub fn drawIndexedIndirect(interface: *Interface, buffer: *base.Buffer, offset: usize, count: usize, stride: usize) VkError!void {
_ = interface;
_ = buffer;
_ = offset;
_ = count;
_ = stride;
}
pub fn drawIndirect(interface: *Interface, buffer: *base.Buffer, offset: usize, count: usize, stride: usize) VkError!void {
_ = interface;
_ = buffer;
_ = offset;
_ = count;
_ = stride;
}
pub fn endRenderPass(interface: *Interface) VkError!void {
_ = interface;
}
pub fn executeCommands(interface: *Interface, commands: *Interface) VkError!void {
_ = interface;
_ = commands;
}
pub fn fillBuffer(interface: *Interface, buffer: *base.Buffer, offset: vk.DeviceSize, size: vk.DeviceSize, data: u32) VkError!void {
_ = interface;
_ = buffer;
_ = offset;
_ = size;
_ = data;
}
pub fn updateBuffer(interface: *Interface, buffer: *base.Buffer, offset: vk.DeviceSize, data: []const u8) VkError!void {
_ = interface;
_ = buffer;
_ = offset;
_ = data;
}
pub fn nextSubpass(interface: *Interface, contents: vk.SubpassContents) VkError!void {
_ = interface;
_ = contents;
}
pub fn pipelineBarrier(interface: *Interface, src_stage: vk.PipelineStageFlags, dst_stage: vk.PipelineStageFlags, dependency: vk.DependencyFlags, memory: []const vk.MemoryBarrier, buffers: []const vk.BufferMemoryBarrier, images: []const vk.ImageMemoryBarrier) VkError!void {
_ = interface;
_ = src_stage;
_ = dst_stage;
_ = dependency;
_ = memory;
_ = buffers;
_ = images;
}
pub fn pushConstants(interface: *Interface, stages: vk.ShaderStageFlags, offset: u32, blob: []const u8) VkError!void {
_ = interface;
_ = stages;
_ = offset;
_ = blob;
}
pub fn resetEvent(interface: *Interface, event: *base.Event, stage: vk.PipelineStageFlags) VkError!void {
_ = interface;
_ = stage;
try event.reset();
}
pub fn resolveImage(interface: *Interface, src: *base.Image, src_layout: vk.ImageLayout, dst: *base.Image, dst_layout: vk.ImageLayout, region: vk.ImageResolve) VkError!void {
_ = interface;
_ = src;
_ = src_layout;
_ = dst;
_ = dst_layout;
_ = region;
}
pub fn setEvent(interface: *Interface, event: *base.Event, stage: vk.PipelineStageFlags) VkError!void {
_ = interface;
_ = stage;
try event.signal();
}
pub fn setScissor(interface: *Interface, first: u32, scissor: []const vk.Rect2D) VkError!void {
_ = interface;
_ = first;
_ = scissor;
}
pub fn setViewport(interface: *Interface, first: u32, viewports: []const vk.Viewport) VkError!void {
_ = interface;
_ = first;
_ = viewports;
}
pub fn setBlendConstants(interface: *Interface, constants: [4]f32) VkError!void {
_ = interface;
_ = constants;
}
pub fn setStencilCompareMask(interface: *Interface, face_mask: vk.StencilFaceFlags, compare_mask: u32) VkError!void {
_ = interface;
_ = face_mask;
_ = compare_mask;
}
pub fn setStencilReference(interface: *Interface, face_mask: vk.StencilFaceFlags, reference: u32) VkError!void {
_ = interface;
_ = face_mask;
_ = reference;
}
pub fn setStencilWriteMask(interface: *Interface, face_mask: vk.StencilFaceFlags, write_mask: u32) VkError!void {
_ = interface;
_ = face_mask;
_ = write_mask;
}
pub fn waitEvent(interface: *Interface, event: *base.Event, src_stage: vk.PipelineStageFlags, dst_stage: vk.PipelineStageFlags, memory_barriers: []const vk.MemoryBarrier, buffer_barriers: []const vk.BufferMemoryBarrier, image_barriers: []const vk.ImageMemoryBarrier) VkError!void {
_ = interface;
_ = event;
_ = src_stage;
_ = dst_stage;
_ = memory_barriers;
_ = buffer_barriers;
_ = image_barriers;
}