pub struct State { /* private fields */ }Expand description
Wraps MPSState.
Implementations§
Source§impl State
impl State
Sourcepub fn temporary(command_buffer: &MetalCommandBuffer) -> Option<Self>
pub fn temporary(command_buffer: &MetalCommandBuffer) -> Option<Self>
Wraps a constructor on MPSState.
Sourcepub fn temporary_with_buffer_size(
command_buffer: &MetalCommandBuffer,
buffer_size: usize,
) -> Option<Self>
pub fn temporary_with_buffer_size( command_buffer: &MetalCommandBuffer, buffer_size: usize, ) -> Option<Self>
Wraps a constructor on MPSState.
Examples found in repository?
examples/07_optimizer_and_state.rs (line 43)
37fn main() {
38 let device = MetalDevice::system_default().expect("no Metal device available");
39 let queue = device.new_command_queue().expect("command queue");
40
41 let command_buffer = queue.new_command_buffer().expect("command buffer");
42 let temporary_a =
43 State::temporary_with_buffer_size(&command_buffer, 32).expect("temporary state a");
44 let temporary_b =
45 State::temporary_with_buffer_size(&command_buffer, 64).expect("temporary state b");
46 let unique_count =
47 state_batch_increment_read_count(&[&temporary_a, &temporary_a, &temporary_b], 1);
48 assert_eq!(unique_count, 2);
49 assert_eq!(
50 temporary_a.resource_type_at_index(0),
51 state_resource_type::BUFFER
52 );
53 command_buffer.commit();
54 command_buffer.wait_until_completed();
55
56 let resource_list = StateResourceList::new().expect("resource list");
57 resource_list.append_buffer(16);
58 let persistent_state =
59 State::new_with_resource_list(&device, &resource_list).expect("persistent state");
60 assert_eq!(persistent_state.resource_count(), 1);
61 assert_eq!(persistent_state.buffer_size_at_index(0), 16);
62
63 let (gradient_buffer, gradient_vector) = vector_with_values(&device, &[0.1, -0.2]);
64 let (values_buffer, values_vector) = vector_with_values(&device, &[1.0, -1.0]);
65 let (result_buffer, result_vector) = vector_with_values(&device, &[0.0, 0.0]);
66 let optimizer = NNOptimizerStochasticGradientDescent::new(&device, 0.5).expect("sgd");
67 let base = optimizer.as_optimizer().expect("optimizer base");
68 assert_eq!(base.regularization_type(), nn_regularization_type::NONE);
69
70 let command_buffer = queue.new_command_buffer().expect("command buffer");
71 optimizer.encode_vector(
72 &command_buffer,
73 &gradient_vector,
74 &values_vector,
75 None,
76 &result_vector,
77 );
78 command_buffer.commit();
79 command_buffer.wait_until_completed();
80
81 let _ = gradient_buffer;
82 let _ = values_buffer;
83 let output = read_f32_values(&result_buffer, 2);
84 println!("{output:?}");
85}Sourcepub fn new_with_buffer_size(
device: &MetalDevice,
buffer_size: usize,
) -> Option<Self>
pub fn new_with_buffer_size( device: &MetalDevice, buffer_size: usize, ) -> Option<Self>
Wraps a constructor on MPSState.
Sourcepub fn new_with_resource_list(
device: &MetalDevice,
resource_list: &StateResourceList,
) -> Option<Self>
pub fn new_with_resource_list( device: &MetalDevice, resource_list: &StateResourceList, ) -> Option<Self>
Wraps a constructor on MPSState.
Examples found in repository?
examples/07_optimizer_and_state.rs (line 59)
37fn main() {
38 let device = MetalDevice::system_default().expect("no Metal device available");
39 let queue = device.new_command_queue().expect("command queue");
40
41 let command_buffer = queue.new_command_buffer().expect("command buffer");
42 let temporary_a =
43 State::temporary_with_buffer_size(&command_buffer, 32).expect("temporary state a");
44 let temporary_b =
45 State::temporary_with_buffer_size(&command_buffer, 64).expect("temporary state b");
46 let unique_count =
47 state_batch_increment_read_count(&[&temporary_a, &temporary_a, &temporary_b], 1);
48 assert_eq!(unique_count, 2);
49 assert_eq!(
50 temporary_a.resource_type_at_index(0),
51 state_resource_type::BUFFER
52 );
53 command_buffer.commit();
54 command_buffer.wait_until_completed();
55
56 let resource_list = StateResourceList::new().expect("resource list");
57 resource_list.append_buffer(16);
58 let persistent_state =
59 State::new_with_resource_list(&device, &resource_list).expect("persistent state");
60 assert_eq!(persistent_state.resource_count(), 1);
61 assert_eq!(persistent_state.buffer_size_at_index(0), 16);
62
63 let (gradient_buffer, gradient_vector) = vector_with_values(&device, &[0.1, -0.2]);
64 let (values_buffer, values_vector) = vector_with_values(&device, &[1.0, -1.0]);
65 let (result_buffer, result_vector) = vector_with_values(&device, &[0.0, 0.0]);
66 let optimizer = NNOptimizerStochasticGradientDescent::new(&device, 0.5).expect("sgd");
67 let base = optimizer.as_optimizer().expect("optimizer base");
68 assert_eq!(base.regularization_type(), nn_regularization_type::NONE);
69
70 let command_buffer = queue.new_command_buffer().expect("command buffer");
71 optimizer.encode_vector(
72 &command_buffer,
73 &gradient_vector,
74 &values_vector,
75 None,
76 &result_vector,
77 );
78 command_buffer.commit();
79 command_buffer.wait_until_completed();
80
81 let _ = gradient_buffer;
82 let _ = values_buffer;
83 let output = read_f32_values(&result_buffer, 2);
84 println!("{output:?}");
85}Sourcepub fn temporary_with_resource_list(
command_buffer: &MetalCommandBuffer,
resource_list: &StateResourceList,
) -> Option<Self>
pub fn temporary_with_resource_list( command_buffer: &MetalCommandBuffer, resource_list: &StateResourceList, ) -> Option<Self>
Wraps a constructor on MPSState.
Sourcepub fn resource_count(&self) -> usize
pub fn resource_count(&self) -> usize
Wraps the corresponding MPSState method.
Examples found in repository?
examples/07_optimizer_and_state.rs (line 60)
37fn main() {
38 let device = MetalDevice::system_default().expect("no Metal device available");
39 let queue = device.new_command_queue().expect("command queue");
40
41 let command_buffer = queue.new_command_buffer().expect("command buffer");
42 let temporary_a =
43 State::temporary_with_buffer_size(&command_buffer, 32).expect("temporary state a");
44 let temporary_b =
45 State::temporary_with_buffer_size(&command_buffer, 64).expect("temporary state b");
46 let unique_count =
47 state_batch_increment_read_count(&[&temporary_a, &temporary_a, &temporary_b], 1);
48 assert_eq!(unique_count, 2);
49 assert_eq!(
50 temporary_a.resource_type_at_index(0),
51 state_resource_type::BUFFER
52 );
53 command_buffer.commit();
54 command_buffer.wait_until_completed();
55
56 let resource_list = StateResourceList::new().expect("resource list");
57 resource_list.append_buffer(16);
58 let persistent_state =
59 State::new_with_resource_list(&device, &resource_list).expect("persistent state");
60 assert_eq!(persistent_state.resource_count(), 1);
61 assert_eq!(persistent_state.buffer_size_at_index(0), 16);
62
63 let (gradient_buffer, gradient_vector) = vector_with_values(&device, &[0.1, -0.2]);
64 let (values_buffer, values_vector) = vector_with_values(&device, &[1.0, -1.0]);
65 let (result_buffer, result_vector) = vector_with_values(&device, &[0.0, 0.0]);
66 let optimizer = NNOptimizerStochasticGradientDescent::new(&device, 0.5).expect("sgd");
67 let base = optimizer.as_optimizer().expect("optimizer base");
68 assert_eq!(base.regularization_type(), nn_regularization_type::NONE);
69
70 let command_buffer = queue.new_command_buffer().expect("command buffer");
71 optimizer.encode_vector(
72 &command_buffer,
73 &gradient_vector,
74 &values_vector,
75 None,
76 &result_vector,
77 );
78 command_buffer.commit();
79 command_buffer.wait_until_completed();
80
81 let _ = gradient_buffer;
82 let _ = values_buffer;
83 let output = read_f32_values(&result_buffer, 2);
84 println!("{output:?}");
85}Sourcepub fn read_count(&self) -> usize
pub fn read_count(&self) -> usize
Wraps the corresponding MPSState method.
Sourcepub fn set_read_count(&self, count: usize)
pub fn set_read_count(&self, count: usize)
Wraps the corresponding MPSState setter.
Sourcepub fn is_temporary(&self) -> bool
pub fn is_temporary(&self) -> bool
Wraps the corresponding MPSState method.
Sourcepub fn buffer_size_at_index(&self, index: usize) -> usize
pub fn buffer_size_at_index(&self, index: usize) -> usize
Wraps the corresponding MPSState method.
Examples found in repository?
examples/07_optimizer_and_state.rs (line 61)
37fn main() {
38 let device = MetalDevice::system_default().expect("no Metal device available");
39 let queue = device.new_command_queue().expect("command queue");
40
41 let command_buffer = queue.new_command_buffer().expect("command buffer");
42 let temporary_a =
43 State::temporary_with_buffer_size(&command_buffer, 32).expect("temporary state a");
44 let temporary_b =
45 State::temporary_with_buffer_size(&command_buffer, 64).expect("temporary state b");
46 let unique_count =
47 state_batch_increment_read_count(&[&temporary_a, &temporary_a, &temporary_b], 1);
48 assert_eq!(unique_count, 2);
49 assert_eq!(
50 temporary_a.resource_type_at_index(0),
51 state_resource_type::BUFFER
52 );
53 command_buffer.commit();
54 command_buffer.wait_until_completed();
55
56 let resource_list = StateResourceList::new().expect("resource list");
57 resource_list.append_buffer(16);
58 let persistent_state =
59 State::new_with_resource_list(&device, &resource_list).expect("persistent state");
60 assert_eq!(persistent_state.resource_count(), 1);
61 assert_eq!(persistent_state.buffer_size_at_index(0), 16);
62
63 let (gradient_buffer, gradient_vector) = vector_with_values(&device, &[0.1, -0.2]);
64 let (values_buffer, values_vector) = vector_with_values(&device, &[1.0, -1.0]);
65 let (result_buffer, result_vector) = vector_with_values(&device, &[0.0, 0.0]);
66 let optimizer = NNOptimizerStochasticGradientDescent::new(&device, 0.5).expect("sgd");
67 let base = optimizer.as_optimizer().expect("optimizer base");
68 assert_eq!(base.regularization_type(), nn_regularization_type::NONE);
69
70 let command_buffer = queue.new_command_buffer().expect("command buffer");
71 optimizer.encode_vector(
72 &command_buffer,
73 &gradient_vector,
74 &values_vector,
75 None,
76 &result_vector,
77 );
78 command_buffer.commit();
79 command_buffer.wait_until_completed();
80
81 let _ = gradient_buffer;
82 let _ = values_buffer;
83 let output = read_f32_values(&result_buffer, 2);
84 println!("{output:?}");
85}Sourcepub fn texture_info_at_index(&self, index: usize) -> StateTextureInfo
pub fn texture_info_at_index(&self, index: usize) -> StateTextureInfo
Wraps the corresponding MPSState method.
Sourcepub fn resource_type_at_index(&self, index: usize) -> usize
pub fn resource_type_at_index(&self, index: usize) -> usize
Wraps the corresponding MPSState method.
Examples found in repository?
examples/07_optimizer_and_state.rs (line 50)
37fn main() {
38 let device = MetalDevice::system_default().expect("no Metal device available");
39 let queue = device.new_command_queue().expect("command queue");
40
41 let command_buffer = queue.new_command_buffer().expect("command buffer");
42 let temporary_a =
43 State::temporary_with_buffer_size(&command_buffer, 32).expect("temporary state a");
44 let temporary_b =
45 State::temporary_with_buffer_size(&command_buffer, 64).expect("temporary state b");
46 let unique_count =
47 state_batch_increment_read_count(&[&temporary_a, &temporary_a, &temporary_b], 1);
48 assert_eq!(unique_count, 2);
49 assert_eq!(
50 temporary_a.resource_type_at_index(0),
51 state_resource_type::BUFFER
52 );
53 command_buffer.commit();
54 command_buffer.wait_until_completed();
55
56 let resource_list = StateResourceList::new().expect("resource list");
57 resource_list.append_buffer(16);
58 let persistent_state =
59 State::new_with_resource_list(&device, &resource_list).expect("persistent state");
60 assert_eq!(persistent_state.resource_count(), 1);
61 assert_eq!(persistent_state.buffer_size_at_index(0), 16);
62
63 let (gradient_buffer, gradient_vector) = vector_with_values(&device, &[0.1, -0.2]);
64 let (values_buffer, values_vector) = vector_with_values(&device, &[1.0, -1.0]);
65 let (result_buffer, result_vector) = vector_with_values(&device, &[0.0, 0.0]);
66 let optimizer = NNOptimizerStochasticGradientDescent::new(&device, 0.5).expect("sgd");
67 let base = optimizer.as_optimizer().expect("optimizer base");
68 assert_eq!(base.regularization_type(), nn_regularization_type::NONE);
69
70 let command_buffer = queue.new_command_buffer().expect("command buffer");
71 optimizer.encode_vector(
72 &command_buffer,
73 &gradient_vector,
74 &values_vector,
75 None,
76 &result_vector,
77 );
78 command_buffer.commit();
79 command_buffer.wait_until_completed();
80
81 let _ = gradient_buffer;
82 let _ = values_buffer;
83 let output = read_f32_values(&result_buffer, 2);
84 println!("{output:?}");
85}Sourcepub fn synchronize_on_command_buffer(&self, command_buffer: &MetalCommandBuffer)
pub fn synchronize_on_command_buffer(&self, command_buffer: &MetalCommandBuffer)
Wraps the corresponding MPSState method.
Sourcepub fn resource_size(&self) -> usize
pub fn resource_size(&self) -> usize
Wraps the corresponding MPSState method.
Trait Implementations§
Auto Trait Implementations§
impl Freeze for State
impl RefUnwindSafe for State
impl Unpin for State
impl UnsafeUnpin for State
impl UnwindSafe for State
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more