Lines Matching +full:sync +full:- +full:branches
4 * Use of this source code is governed by a BSD-style license that can be
38 constexpr Slot NA = -1;
60 // native SkRasterPipelineOps op-list. It also has a few extra ops to indicate child-effect
77 // child-effect invocations.
80 // An in-flight program can contain all the native Raster Pipeline ops...
87 // ... and also has Builder-specific ops. These ops generally interface with the stack, and are
126 // If the extended ops are not in sync between enums, program creation will not work.
129 // Represents a single raster-pipeline SkSL instruction.
192 // These methods are used to split up multi-slot copies into multiple ops as needed.
217 // Appends a single-slot single-input math operation to the pipeline. The op `stage` will
223 // Appends a multi-slot single-input math operation to the pipeline. `baseStage` must refer to
224 // a single-slot "apply_op" stage, which must be immediately followed by specializations for
225 // 2-4 slots. For instance, {`ceil_float`, `ceil_2_floats`, `ceil_3_floats`, `ceil_4_floats`}
231 // Appends an immediate-mode binary operation to the pipeline. `baseStage` must refer to
232 // a single-slot, immediate-mode "apply-imm" stage, which must be immediately preceded by
233 // specializations for 2-4 slots if numSlots is greater than 1. For instance, {`add_imm_4_ints`,
236 // Some immediate-mode binary ops are single-slot only in the interest of code size; in this
237 // case, the multi-slot ops can be absent, but numSlots must be 1.
242 // Appends a two-input math operation to the pipeline. `src` must be _immediately_ after `dst`
250 // Appends a multi-slot two-input math operation to the pipeline. `src` must be _immediately_
252 // must be immediately followed by specializations for 1-4 slots. For instance, {`add_n_floats`,
260 // Appends a multi-slot math operation having three inputs (dst, src0, src1) and one output
263 // specializations for 1-4 slots.
323 SkASSERT(this->executionMaskWritesAreEnabled()); in disableExecutionMaskWrites()
324 --fExecutionMaskWritesEnabled; in disableExecutionMaskWrites()
333 this->appendInstruction(BuilderOp::init_lane_masks, {}); in init_lane_masks()
338 this->appendInstruction(BuilderOp::store_src_rg, {slots.index}); in store_src_rg()
343 this->appendInstruction(BuilderOp::store_src, {slots.index}); in store_src()
348 this->appendInstruction(BuilderOp::store_dst, {slots.index}); in store_dst()
353 this->appendInstruction(BuilderOp::store_device_xy01, {slots.index}); in store_device_xy01()
358 this->appendInstruction(BuilderOp::load_src, {slots.index}); in load_src()
363 this->appendInstruction(BuilderOp::load_dst, {slots.index}); in load_dst()
373 // Unconditionally branches to a label.
376 // Branches to a label if the execution mask is active in every lane.
379 // Branches to a label if the execution mask is active in any lane.
382 // Branches to a label if the execution mask is inactive across all lanes.
385 // Branches to a label if the top value on the stack is _not_ equal to `value` in any lane.
392 this->push_constant_i(/*val=*/0, count); in push_zeros()
396 this->push_constant_i(sk_bit_cast<int32_t>(val), /*count=*/1); in push_constant_f()
400 this->push_constant_i(sk_bit_cast<int32_t>(val), count);
409 this->appendInstruction(BuilderOp::store_immutable_value, {slot}, val); in store_immutable_value_i()
412 // Translates into copy_uniforms (from uniforms into value-slots) in Raster Pipeline.
424 this->push_slots_or_immutable(src, BuilderOp::push_slots); in push_slots()
429 this->push_slots_or_immutable(src, BuilderOp::push_immutable); in push_immutable()
439 this->push_slots_or_immutable_indirect(fixedRange, dynamicStack, limitRange, in push_slots_indirect()
444 this->push_slots_or_immutable_indirect(fixedRange, dynamicStack, limitRange, in push_immutable_indirect()
454 this->copy_stack_to_slots(dst, /*offsetFromStackTop=*/dst.count); in copy_stack_to_slots()
476 this->copy_stack_to_slots_unmasked(dst, /*offsetFromStackTop=*/dst.count); in copy_stack_to_slots_unmasked()
491 this->copy_stack_to_slots_indirect(fixedRange, dynamicStackID, limitRange); in pop_slots_indirect()
492 this->discard_stack(fixedRange.count); in pop_slots_indirect()
500 // `slots`. Two n-slot input values are consumed, and the result is pushed onto the stack.
504 // `slots`. Three n-slot input values are consumed, and the result is pushed onto the stack.
508 // Two n-slot input vectors are consumed, and a scalar result is pushed onto the stack.
511 // Computes refract(N, I, eta) on the stack. N and I are assumed to be 4-slot vectors, and can
512 // be padded with zeros for smaller inputs. Eta is a scalar. The result is a 4-slot vector.
522 this->discard_stack(count, fCurrentStackID); in discard_stack()
531 // Creates many clones of the top single-slot item on the temp stack.
549 // Compares the stack top with the passed-in value; if it matches, enables the loop mask.
551 this->appendInstruction(BuilderOp::case_op, {}, value); in case_op()
556 this->appendInstruction(BuilderOp::continue_op, {}, continueMaskStackID); in continue_op()
563 this->appendInstruction(BuilderOp::select, {}, slots); in select()
572 this->appendInstruction(BuilderOp::copy_slot_masked, {dst.index, src.index}, dst.count); in copy_slots_masked()
604 SkASSERT(this->executionMaskWritesAreEnabled()); in pop_condition_mask()
605 this->appendInstruction(BuilderOp::pop_condition_mask, {}); in pop_condition_mask()
611 SkASSERT(this->executionMaskWritesAreEnabled()); in merge_inv_condition_mask()
612 this->appendInstruction(BuilderOp::merge_inv_condition_mask, {}); in merge_inv_condition_mask()
616 SkASSERT(this->executionMaskWritesAreEnabled()); in push_loop_mask()
617 this->appendInstruction(BuilderOp::push_loop_mask, {}); in push_loop_mask()
621 SkASSERT(this->executionMaskWritesAreEnabled()); in pop_loop_mask()
622 this->appendInstruction(BuilderOp::pop_loop_mask, {}); in pop_loop_mask()
629 this->appendInstruction(BuilderOp::push_src_rgba, {}); in push_src_rgba()
633 this->appendInstruction(BuilderOp::push_dst_rgba, {}); in push_dst_rgba()
637 this->appendInstruction(BuilderOp::push_device_xy01, {}); in push_device_xy01()
643 this->appendInstruction(BuilderOp::pop_dst_rgba, {}); in pop_dst_rgba()
647 SkASSERT(this->executionMaskWritesAreEnabled()); in mask_off_loop_mask()
648 this->appendInstruction(BuilderOp::mask_off_loop_mask, {}); in mask_off_loop_mask()
652 SkASSERT(this->executionMaskWritesAreEnabled()); in reenable_loop_mask()
654 this->appendInstruction(BuilderOp::reenable_loop_mask, {src.index}); in reenable_loop_mask()
658 SkASSERT(this->executionMaskWritesAreEnabled()); in pop_and_reenable_loop_mask()
659 this->appendInstruction(BuilderOp::pop_and_reenable_loop_mask, {}); in pop_and_reenable_loop_mask()
663 SkASSERT(this->executionMaskWritesAreEnabled()); in merge_loop_mask()
664 this->appendInstruction(BuilderOp::merge_loop_mask, {}); in merge_loop_mask()
668 SkASSERT(this->executionMaskWritesAreEnabled()); in push_return_mask()
669 this->appendInstruction(BuilderOp::push_return_mask, {}); in push_return_mask()
675 SkASSERT(this->executionMaskWritesAreEnabled()); in mask_off_return_mask()
676 this->appendInstruction(BuilderOp::mask_off_return_mask, {}); in mask_off_return_mask()
687 this->appendInstruction(BuilderOp::trace_line, {}, traceMaskStackID, line); in trace_line()
692 this->appendInstruction(BuilderOp::trace_var, {r.index}, traceMaskStackID, r.count); in trace_var()
699 // Writes a function-entrance to the debug trace.
701 this->appendInstruction(BuilderOp::trace_enter, {}, traceMaskStackID, funcID); in trace_enter()
704 // Writes a function-exit to the debug trace.
706 this->appendInstruction(BuilderOp::trace_exit, {}, traceMaskStackID, funcID); in trace_exit()
709 // Writes a scope-level change to the debug trace.
711 this->appendInstruction(BuilderOp::trace_scope, {}, traceMaskStackID, delta); in trace_scope()