@@ -696,11 +696,12 @@ class API_AVAILABLE(macos(11.0), ios(14.0)) MDShader {
696696public:
697697 CharString name;
698698 Vector<UniformSet> sets;
699+ bool uses_argument_buffers = true ;
699700
700701 virtual void encode_push_constant_data (VectorView<uint32_t > p_data, MDCommandBuffer *p_cb) = 0 ;
701702
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) {}
704705 virtual ~MDShader () = default ;
705706};
706707
@@ -719,7 +720,7 @@ class API_AVAILABLE(macos(11.0), ios(14.0)) MDComputeShader final : public MDSha
719720
720721 void encode_push_constant_data (VectorView<uint32_t > p_data, MDCommandBuffer *p_cb) final;
721722
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);
723724};
724725
725726class 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
746747 void encode_push_constant_data (VectorView<uint32_t > p_data, MDCommandBuffer *p_cb) final;
747748
748749 MDRenderShader (CharString p_name,
749- bool p_needs_view_mask_buffer,
750750 Vector<UniformSet> p_sets,
751+ bool p_needs_view_mask_buffer,
752+ bool p_uses_argument_buffers,
751753 MDLibrary *p_vert, MDLibrary *p_frag);
752754};
753755
@@ -783,12 +785,21 @@ struct BoundUniformSet {
783785};
784786
785787class 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+
786794public:
787795 uint32_t index;
788796 LocalVector<RDD::BoundUniform> uniforms;
789797 HashMap<MDShader *, BoundUniformSet> bound_uniforms;
790798
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);
792803};
793804
794805class API_AVAILABLE (macos(11.0 ), ios(14.0 )) MDPipeline {
0 commit comments