use crate::{arc, define_mtl, define_obj_type, mtl, ns, objc};
define_obj_type!(pub ArgEncoder(ns::Id));
impl ArgEncoder {
define_mtl!(set_label);
#[objc::msg_send(device)]
pub fn device(&self) -> arc::R<mtl::Device>;
#[objc::msg_send(label)]
pub fn label(&self) -> Option<arc::R<ns::String>>;
#[objc::msg_send(encodedLength)]
pub fn encoded_len(&self) -> usize;
#[objc::msg_send(alignment)]
pub fn alignment(&self) -> usize;
#[objc::msg_send(setArgumentBuffer:offset:)]
pub fn set_argument_buf(&mut self, buffer: Option<&mtl::Buf>, offset: usize);
#[objc::msg_send(setBuffer:offset:atIndex:)]
pub fn set_buf(&mut self, buffer: Option<&mtl::Buf>, offset: usize, at_index: usize);
#[objc::msg_send(setTexture:atIndex:)]
pub fn set_texture(&mut self, texture: Option<&mtl::Texture>, at_index: usize);
#[objc::msg_send(setSamplerState:atIndex:)]
pub fn set_sampler_state(&mut self, sampler: Option<&mtl::SamplerState>, at_index: usize);
#[objc::msg_send(constantData:)]
pub fn const_data(&mut self, at_index: usize) -> *mut u8;
#[objc::msg_send(setRenderPipelineState:atIndex:)]
pub fn set_render_ps(&mut self, state: Option<&mtl::RenderPipelineState>, at_index: usize);
#[objc::msg_send(setComputePipelineState:atIndex:)]
pub fn set_compute_ps(&mut self, state: Option<&mtl::ComputePipelineState>, at_index: usize);
#[objc::msg_send(setIndirectCommandBuffer:atIndex:)]
pub fn set_indirect_cmd_buf(&mut self, buffer: Option<&mtl::IndirectCmdBuf>, at_index: usize);
}