14#ifndef PIPELINECYCLERTRUEIMPL_H
15#define PIPELINECYCLERTRUEIMPL_H
20#ifdef THREADED_PIPELINE
45 PipelineCyclerTrueImpl();
47 PipelineCyclerTrueImpl(CycleData *initial_data, Pipeline *pipeline =
nullptr);
48 PipelineCyclerTrueImpl(
const PipelineCyclerTrueImpl ©);
49 void operator = (
const PipelineCyclerTrueImpl ©);
50 ~PipelineCyclerTrueImpl();
52 INLINE
void acquire();
53 INLINE
void acquire(Thread *current_thread);
54 INLINE
void release();
56 INLINE
const CycleData *read_unlocked(Thread *current_thread)
const;
58 INLINE
const CycleData *read(Thread *current_thread)
const;
59 INLINE
void increment_read(
const CycleData *pointer)
const;
60 INLINE
void release_read(
const CycleData *pointer)
const;
62 INLINE CycleData *write(Thread *current_thread);
63 INLINE CycleData *write_upstream(
bool force_to_0, Thread *current_thread);
64 INLINE CycleData *elevate_read(
const CycleData *pointer, Thread *current_thread);
65 INLINE CycleData *elevate_read_upstream(
const CycleData *pointer,
bool force_to_0, Thread *current_thread);
66 INLINE
void increment_write(CycleData *pointer)
const;
67 INLINE
void release_write(CycleData *pointer);
69 INLINE
int get_num_stages();
70 INLINE
const CycleData *read_stage_unlocked(
int pipeline_stage)
const;
71 INLINE
const CycleData *read_stage(
int pipeline_stage, Thread *current_thread)
const;
72 INLINE
void release_read_stage(
int pipeline_stage,
const CycleData *pointer)
const;
73 CycleData *write_stage(
int pipeline_stage, Thread *current_thread);
74 CycleData *write_stage_upstream(
int pipeline_stage,
bool force_to_0,
75 Thread *current_thread);
76 INLINE CycleData *elevate_read_stage(
int pipeline_stage,
const CycleData *pointer,
77 Thread *current_thread);
78 INLINE CycleData *elevate_read_stage_upstream(
int pipeline_stage,
const CycleData *pointer,
79 bool force_to_0, Thread *current_thread);
80 INLINE
void release_write_stage(
int pipeline_stage, CycleData *pointer);
82 INLINE TypeHandle get_parent_type()
const;
84 INLINE CycleData *cheat()
const;
85 INLINE
int get_read_count()
const;
86 INLINE
int get_write_count()
const;
92 class CyclerMutex :
public ReMutex {
94 INLINE CyclerMutex(PipelineCyclerTrueImpl *cycler);
97 virtual void output(std::ostream &out)
const;
98 PipelineCyclerTrueImpl *_cycler;
103 PT(CycleData) cycle();
104 INLINE PT(CycleData) cycle_2();
105 INLINE PT(CycleData) cycle_3();
106 void set_num_stages(
int num_stages);
113 class CycleDataNode :
public MemoryBase {
115 INLINE CycleDataNode();
116 INLINE CycleDataNode(
const CycleDataNode ©);
117 INLINE ~CycleDataNode();
118 INLINE
void operator = (
const CycleDataNode ©);
120 NPT(CycleData) _cdata;
121 int _writes_outstanding;
123 CycleDataNode *_data;
132 friend class Pipeline;
This just stores the pointers to implement a doubly-linked list of PipelineCyclers for a particular P...
This class manages a staged pipeline of data, for instance the render pipeline, so that each stage of...
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.