This repository has been archived by the owner on Jan 3, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 73
/
Copy pathDepthBufferMaskedRasterizerAVXMT.h
78 lines (61 loc) · 2.97 KB
/
DepthBufferMaskedRasterizerAVXMT.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
//--------------------------------------------------------------------------------------
// Copyright 2015 Intel Corporation
// All Rights Reserved
//
// Permission is granted to use, copy, distribute and prepare derivative works of this
// software for any purpose and without fee, provided, that the above copyright notice
// and this statement appear in all copies. Intel makes no representations about the
// suitability of this software for any purpose. THIS SOFTWARE IS PROVIDED "AS IS."
// INTEL SPECIFICALLY DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, AND ALL LIABILITY,
// INCLUDING CONSEQUENTIAL AND OTHER INDIRECT DAMAGES, FOR THE USE OF THIS SOFTWARE,
// INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PROPRIETARY RIGHTS, AND INCLUDING THE
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. Intel does not
// assume any responsibility for any errors which may appear in this software nor any
// responsibility to update it.
//--------------------------------------------------------------------------------------
#ifndef DEPTHBUFFERMASKEDRASTERIZERAVXMT_H
#define DEPTHBUFFERMASKEDRASTERIZERAVXMT_H
#include <thread>
#include <atomic>
#include <mutex>
#include <condition_variable>
#include "DepthBufferRasterizerAVX.h"
class MaskedOcclusionCulling;
class CullingThreadpool;
class DepthBufferMaskedRasterizerAVXMT : public DepthBufferRasterizerAVX
{
private:
MaskedOcclusionCulling *mMaskedOcclusionCulling;
CullingThreadpool *mMOCThreadpool;
std::atomic_bool mMOCDepthDirty;
std::atomic_bool mMOCShutdown;
std::mutex mMOCDepthClearLock;
std::thread mMOCDepthClearThread;
std::condition_variable mMOCDepthClearCV;
UINT mNumRasterizedTrisSimple;
public:
DepthBufferMaskedRasterizerAVXMT(MaskedOcclusionCulling *moc, CullingThreadpool * ctp);
~DepthBufferMaskedRasterizerAVXMT();
struct PerTaskData
{
UINT idx;
DepthBufferMaskedRasterizerAVXMT *pDBR;
};
PerTaskData mTaskData[2];
void TransformModelsAndRasterizeToDepthBuffer(CPUTCamera *pCamera, UINT idx);
void ComputeR2DBTime(UINT idx);
virtual UINT GetNumRasterizedTriangles( UINT idx ) override { return mNumRasterizedTrisSimple; }
void MOCDepthSetDirty( );
void MOCDepthWaitClear( );
void MOCDepthClearProc( );
private:
void ActiveModels(UINT idx);
void TransformAndRasterizeMeshes(UINT idx);
static void InsideViewFrustum( VOID* taskData, INT context, UINT taskId, UINT taskCount );
void InsideViewFrustum( UINT taskId, UINT taskCount, UINT idx );
static void TooSmall( VOID* taskData, INT context, UINT taskId, UINT taskCount );
void TooSmall( UINT taskId, UINT taskCount, UINT idx );
static void ActiveModels( VOID* taskData, INT context, UINT taskId, UINT taskCount );
void ActiveModels( UINT taskId, UINT idx );
};
#endif //DEPTHBUFFERMASKEDRASTERIZERAVXST_H