This commit is contained in:
elwrcl committed 2026-06-06 13:25:15 +03:00
1 parent 04d4dc8b09
commit 818cab85dc
12511 files changed
+6156641

No files matched your search

+154
View File
@@ -0,0 +1,154 @@
/*
* Copyright 2025 LunarG, Inc.
* Copyright 2025 Google LLC
* SPDX-License-Identifier: MIT
*/
#ifndef MTL_ENCODER_H
#define MTL_ENCODER_H 1
#include "mtl_types.h"
#include <stdint.h>
/* Common encoder utils */
void mtl_end_encoding(void *encoder);
/* MTLBlitEncoder */
mtl_blit_encoder *mtl_new_blit_command_encoder(mtl_command_buffer *cmd_buffer);
void mtl_blit_update_fence(mtl_blit_encoder *encoder, mtl_fence *fence);
void mtl_blit_wait_for_fence(mtl_blit_encoder *encoder, mtl_fence *fence);
void mtl_copy_from_buffer_to_buffer(mtl_blit_encoder *blit_enc_handle,
mtl_buffer *src_buf, size_t src_offset,
mtl_buffer *dst_buf, size_t dst_offset,
size_t size);
void mtl_copy_from_buffer_to_texture(mtl_blit_encoder *blit_enc_handle,
struct mtl_buffer_image_copy *data);
void mtl_copy_from_texture_to_buffer(mtl_blit_encoder *blit_enc_handle,
struct mtl_buffer_image_copy *data);
void mtl_copy_from_texture_to_texture(
mtl_blit_encoder *blit_enc_handle, mtl_texture *src_tex_handle,
size_t src_slice, size_t src_level, struct mtl_origin src_origin,
struct mtl_size src_size, mtl_texture *dst_tex_handle, size_t dst_slice,
size_t dst_level, struct mtl_origin dst_origin);
/* MTLComputeEncoder */
mtl_compute_encoder *
mtl_new_compute_command_encoder(mtl_command_buffer *cmd_buffer);
void mtl_compute_update_fence(mtl_compute_encoder *encoder, mtl_fence *fence);
void mtl_compute_wait_for_fence(mtl_compute_encoder *encoder, mtl_fence *fence);
void mtl_compute_set_pipeline_state(mtl_compute_encoder *encoder,
mtl_compute_pipeline_state *state_handle);
void mtl_compute_set_buffer(mtl_compute_encoder *encoder, mtl_buffer *buffer,
size_t offset, size_t index);
void mtl_compute_use_heaps(mtl_compute_encoder *encoder, mtl_heap **heaps,
uint32_t count);
void mtl_dispatch_threads(mtl_compute_encoder *encoder,
struct mtl_size grid_size,
struct mtl_size local_size);
void mtl_dispatch_threadgroups_with_indirect_buffer(
mtl_compute_encoder *encoder, mtl_buffer *buffer, uint32_t offset,
struct mtl_size local_size);
void mtl_memory_barrier_with_scope(mtl_compute_encoder *encoder,
enum mtl_barrier_scope scope);
/* MTLRenderEncoder */
mtl_render_encoder *mtl_new_render_command_encoder_with_descriptor(
mtl_command_buffer *command_buffer, mtl_render_pass_descriptor *descriptor);
void mtl_render_update_fence(mtl_render_encoder *encoder, mtl_fence *fence);
void mtl_render_wait_for_fence(mtl_render_encoder *encoder, mtl_fence *fence);
void mtl_set_viewports(mtl_render_encoder *encoder,
struct mtl_viewport *viewports, uint32_t count);
void mtl_set_scissor_rects(mtl_render_encoder *encoder,
struct mtl_scissor_rect *scissor_rects,
uint32_t count);
void mtl_render_set_pipeline_state(mtl_render_encoder *encoder,
mtl_render_pipeline_state *pipeline);
void mtl_set_depth_stencil_state(mtl_render_encoder *encoder,
mtl_depth_stencil_state *state);
void mtl_set_stencil_references(mtl_render_encoder *encoder, uint32_t front,
uint32_t back);
void mtl_set_front_face_winding(mtl_render_encoder *encoder,
enum mtl_winding winding);
void mtl_set_cull_mode(mtl_render_encoder *encoder, enum mtl_cull_mode mode);
void mtl_set_visibility_result_mode(mtl_render_encoder *encoder,
enum mtl_visibility_result_mode mode,
size_t offset);
void mtl_set_depth_bias(mtl_render_encoder *encoder, float depth_bias,
float slope_scale, float clamp);
void mtl_set_depth_clip_mode(mtl_render_encoder *encoder,
enum mtl_depth_clip_mode mode);
void mtl_set_vertex_amplification_count(mtl_render_encoder *encoder,
uint32_t *layer_ids, uint32_t id_count);
void mtl_set_vertex_buffer(mtl_render_encoder *encoder, mtl_buffer *buffer,
uint32_t offset, uint32_t index);
void mtl_set_vertex_bytes(mtl_render_encoder *encoder, const void *bytes,
uint32_t length, uint32_t index);
void mtl_set_fragment_buffer(mtl_render_encoder *encoder, mtl_buffer *buffer,
uint32_t offset, uint32_t index);
void mtl_set_fragment_bytes(mtl_render_encoder *encoder, const void *bytes,
uint32_t length, uint32_t index);
void mtl_draw_primitives(mtl_render_encoder *encoder,
enum mtl_primitive_type primitve_type,
uint32_t vertexStart, uint32_t vertexCount,
uint32_t instanceCount, uint32_t baseInstance);
void mtl_draw_indexed_primitives(
mtl_render_encoder *encoder, enum mtl_primitive_type primitve_type,
uint32_t index_count, enum mtl_index_type index_type,
mtl_buffer *index_buffer, uint32_t index_buffer_offset,
uint32_t instance_count, int32_t base_vertex, uint32_t base_instance);
void mtl_draw_primitives_indirect(mtl_render_encoder *encoder,
enum mtl_primitive_type primitve_type,
mtl_buffer *indirect_buffer,
uint64_t indirect_buffer_offset);
void mtl_draw_indexed_primitives_indirect(mtl_render_encoder *encoder,
enum mtl_primitive_type primitve_type,
enum mtl_index_type index_type,
mtl_buffer *index_buffer,
uint32_t index_buffer_offset,
mtl_buffer *indirect_buffer,
uint64_t indirect_buffer_offset);
void mtl_render_use_resource(mtl_compute_encoder *encoder,
mtl_resource *res_handle, uint32_t usage);
void mtl_render_use_resources(mtl_render_encoder *encoder,
mtl_resource **resource_handles, uint32_t count,
enum mtl_resource_usage usage);
void mtl_render_use_heaps(mtl_render_encoder *encoder, mtl_heap **heaps,
uint32_t count);
#endif /* MTL_ENCODER_H */