summaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/metal/metal_objects.h7
-rw-r--r--drivers/metal/metal_objects.mm4
2 files changed, 11 insertions, 0 deletions
diff --git a/drivers/metal/metal_objects.h b/drivers/metal/metal_objects.h
index 97f33bb1e8..030b353ee8 100644
--- a/drivers/metal/metal_objects.h
+++ b/drivers/metal/metal_objects.h
@@ -318,6 +318,13 @@ public:
dirty.set_flag(DirtyFlag::DIRTY_UNIFORMS);
}
+ _FORCE_INLINE_ void mark_blend_dirty() {
+ if (!blend_constants.has_value()) {
+ return;
+ }
+ dirty.set_flag(DirtyFlag::DIRTY_BLEND);
+ }
+
MTLScissorRect clip_to_render_area(MTLScissorRect p_rect) const {
uint32_t raLeft = render_area.position.x;
uint32_t raRight = raLeft + render_area.size.width;
diff --git a/drivers/metal/metal_objects.mm b/drivers/metal/metal_objects.mm
index d3c3d2b232..1d08a10781 100644
--- a/drivers/metal/metal_objects.mm
+++ b/drivers/metal/metal_objects.mm
@@ -143,6 +143,9 @@ void MDCommandBuffer::bind_pipeline(RDD::PipelineID p_pipeline) {
if (render.pipeline != nullptr && render.pipeline->depth_stencil != rp->depth_stencil) {
render.dirty.set_flag(RenderState::DIRTY_DEPTH);
}
+ if (rp->raster_state.blend.enabled) {
+ render.dirty.set_flag(RenderState::DIRTY_BLEND);
+ }
render.pipeline = rp;
}
} else if (p->type == MDPipelineType::Compute) {
@@ -301,6 +304,7 @@ void MDCommandBuffer::render_clear_attachments(VectorView<RDD::AttachmentClear>
render.mark_viewport_dirty();
render.mark_scissors_dirty();
render.mark_vertex_dirty();
+ render.mark_blend_dirty();
}
void MDCommandBuffer::_render_set_dirty_state() {