@@ -696,11 +696,12 @@ class API_AVAILABLE(macos(11.0), ios(14.0)) MDShader {
696
696
public:
697
697
CharString name;
698
698
Vector<UniformSet> sets;
699
+ bool uses_argument_buffers = true ;
699
700
700
701
virtual void encode_push_constant_data (VectorView<uint32_t > p_data, MDCommandBuffer *p_cb) = 0 ;
701
702
702
- MDShader (CharString p_name, Vector<UniformSet> p_sets) :
703
- name (p_name), sets (p_sets) {}
703
+ MDShader (CharString p_name, Vector<UniformSet> p_sets, bool p_uses_argument_buffers ) :
704
+ name (p_name), sets (p_sets), uses_argument_buffers (p_uses_argument_buffers) {}
704
705
virtual ~MDShader () = default ;
705
706
};
706
707
@@ -719,7 +720,7 @@ class API_AVAILABLE(macos(11.0), ios(14.0)) MDComputeShader final : public MDSha
719
720
720
721
void encode_push_constant_data (VectorView<uint32_t > p_data, MDCommandBuffer *p_cb) final;
721
722
722
- MDComputeShader (CharString p_name, Vector<UniformSet> p_sets, MDLibrary *p_kernel);
723
+ MDComputeShader (CharString p_name, Vector<UniformSet> p_sets, bool p_uses_argument_buffers, MDLibrary *p_kernel);
723
724
};
724
725
725
726
class API_AVAILABLE (macos(11.0 ), ios(14.0 )) MDRenderShader final : public MDShader {
@@ -746,8 +747,9 @@ class API_AVAILABLE(macos(11.0), ios(14.0)) MDRenderShader final : public MDShad
746
747
void encode_push_constant_data (VectorView<uint32_t > p_data, MDCommandBuffer *p_cb) final;
747
748
748
749
MDRenderShader (CharString p_name,
749
- bool p_needs_view_mask_buffer,
750
750
Vector<UniformSet> p_sets,
751
+ bool p_needs_view_mask_buffer,
752
+ bool p_uses_argument_buffers,
751
753
MDLibrary *p_vert, MDLibrary *p_frag);
752
754
};
753
755
@@ -783,12 +785,21 @@ struct BoundUniformSet {
783
785
};
784
786
785
787
class API_AVAILABLE (macos(11.0 ), ios(14.0 )) MDUniformSet {
788
+ private:
789
+ void bind_uniforms_argument_buffers (MDShader *p_shader, MDCommandBuffer::RenderState &p_state);
790
+ void bind_uniforms_direct (MDShader *p_shader, MDCommandBuffer::RenderState &p_state);
791
+ void bind_uniforms_argument_buffers (MDShader *p_shader, MDCommandBuffer::ComputeState &p_state);
792
+ void bind_uniforms_direct (MDShader *p_shader, MDCommandBuffer::ComputeState &p_state);
793
+
786
794
public:
787
795
uint32_t index ;
788
796
LocalVector<RDD::BoundUniform> uniforms;
789
797
HashMap<MDShader *, BoundUniformSet> bound_uniforms;
790
798
791
- BoundUniformSet &boundUniformSetForShader (MDShader *p_shader, id <MTLDevice > p_device);
799
+ void bind_uniforms (MDShader *p_shader, MDCommandBuffer::RenderState &p_state);
800
+ void bind_uniforms (MDShader *p_shader, MDCommandBuffer::ComputeState &p_state);
801
+
802
+ BoundUniformSet &bound_uniform_set (MDShader *p_shader, id <MTLDevice > p_device, ResourceUsageMap &p_resource_usage);
792
803
};
793
804
794
805
class API_AVAILABLE (macos(11.0 ), ios(14.0 )) MDPipeline {
0 commit comments