forked from nvpro-samples/gl_vk_threaded_cadscene
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathresources_vkgen.hpp
91 lines (71 loc) · 3.2 KB
/
resources_vkgen.hpp
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
79
80
81
82
83
84
85
86
87
88
89
90
91
/*-----------------------------------------------------------------------
Copyright (c) 2014-2016, NVIDIA. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Neither the name of its contributors may be used to endorse
or promote products derived from this software without specific
prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-----------------------------------------------------------------------*/
/* Contact [email protected] (Christoph Kubisch) for feedback */
#pragma once
#include "resources_vk.hpp"
#include "vk_nvx_device_generated_commands.h"
namespace csfthreaded {
class ResourcesVKGen : public ResourcesVK {
public:
// To use the extension, we extend the resources for vulkan
// by the object table. In this table we will register all the
// binding/resources we need for rendering the scene.
// When it comes to resources, that is the only difference to
// unextended Vulkan.
// The sample uses 3 pipelines, which we will need to
// register in the object table at a user-specifed index
// (which this enum is for).
enum TablePipelines {
TABLE_PIPE_TRIANGLES,
TABLE_PIPE_LINES,
TABLE_PIPE_LINES_TRIANGLES,
NUM_TABLE_PIPES,
};
struct TableContent {
size_t resourceIncarnation;
NulledVk<VkObjectTableNVX> objectTable;
// we keep all used registered indices around
std::vector<uint32_t> vertexBuffers;
std::vector<uint32_t> indexBuffers;
std::vector<uint32_t> pushConstants;
std::vector<uint32_t> pipelines;
std::vector<uint32_t> matrixDescriptorSets;
std::vector<uint32_t> materialDescriptorSets;
};
bool m_generatedCommandsSupport;
TableContent m_table;
void init();
bool initScene(const CadScene&);
void deinitScene();
void updatedPrograms( nv_helpers_gl::ProgramManager &mgr );
void initObjectTable();
void updateObjectTablePipelines();
void deinitObjectTable();
ResourcesVKGen() {}
static ResourcesVKGen* get() {
static ResourcesVKGen res;
return &res;
}
static bool ResourcesVKGen::isAvailable();
};
}