FTEQW
Documentation of the FTE engine source tree.
vkrenderer.h
Go to the documentation of this file.
1//#include "glquake.h"
2
3#if defined(_WIN32)
4 #define WIN32_LEAN_AND_MEAN
5 #define VK_USE_PLATFORM_WIN32_KHR
6 #define VKInstWin32Funcs VKFunc(CreateWin32SurfaceKHR)
7#elif defined(ANDROID)
8 #define VK_USE_PLATFORM_ANDROID_KHR
9 #define VKInstXLibFuncs VKFunc(CreateAndroidSurfaceKHR)
10#elif defined(__linux__)
11 #ifndef NO_X11
12 #define VK_USE_PLATFORM_XLIB_KHR
13 #define VKInstXLibFuncs VKFunc(CreateXlibSurfaceKHR)
14
15 #define VK_USE_PLATFORM_XCB_KHR
16 #define VKInstXCBFuncs VKFunc(CreateXcbSurfaceKHR)
17 #endif
18 #ifdef WAYLANDQUAKE
19 #define VK_USE_PLATFORM_WAYLAND_KHR
20 #define VKInstWaylandFuncs VKFunc(CreateWaylandSurfaceKHR)
21 #endif
22#elif defined(__FreeBSD__) || defined(__OpenBSD__)
23 #define VK_USE_PLATFORM_XLIB_KHR
24 #define VKInstXLibFuncs VKFunc(CreateXlibSurfaceKHR)
25
26 #define VK_USE_PLATFORM_XCB_KHR
27 #define VKInstXCBFuncs VKFunc(CreateXcbSurfaceKHR)
28#endif
29
30#define VK_NO_PROTOTYPES
31#include <vulkan/vulkan.h>
32
33#if defined(_MSC_VER) && !defined(UINT64_MAX)
34#define UINT64_MAX _UI64_MAX
35#ifndef _UI64_MAX
36#define _UI64_MAX 0xffffffffffffffffui64
37#endif
38#endif
39
40#ifndef VKInstWin32Funcs
41#define VKInstWin32Funcs
42#endif
43#ifndef VKInstXLibFuncs
44#define VKInstXLibFuncs
45#endif
46#ifndef VKInstXCBFuncs
47#define VKInstXCBFuncs
48#endif
49#ifndef VKInstWaylandFuncs
50#define VKInstWaylandFuncs
51#endif
52#define VKInstArchFuncs VKInstWin32Funcs VKInstXLibFuncs VKInstXCBFuncs VKInstWaylandFuncs
53
54#ifdef VK_EXT_debug_utils
55#define VKDebugFuncs \
56 VKFunc(SetDebugUtilsObjectNameEXT)
57#else
58#define VKDebugFuncs
59#endif
60
61//funcs needed for creating an instance
62#define VKInstFuncs \
63 VKFunc(EnumerateInstanceLayerProperties) \
64 VKFunc(EnumerateInstanceExtensionProperties) \
65 VKFunc(CreateInstance)
66
67//funcs specific to an instance
68#define VKInst2Funcs \
69 VKFunc(EnumeratePhysicalDevices) \
70 VKFunc(EnumerateDeviceExtensionProperties) \
71 VKFunc(GetPhysicalDeviceProperties) \
72 VKFunc(GetPhysicalDeviceQueueFamilyProperties) \
73 VKFunc(GetPhysicalDeviceSurfaceSupportKHR) \
74 VKFunc(GetPhysicalDeviceSurfaceFormatsKHR) \
75 VKFunc(GetPhysicalDeviceSurfacePresentModesKHR) \
76 VKFunc(GetPhysicalDeviceSurfaceCapabilitiesKHR) \
77 VKFunc(GetPhysicalDeviceMemoryProperties) \
78 VKFunc(GetPhysicalDeviceFormatProperties) \
79 VKFunc(GetPhysicalDeviceFeatures) \
80 VKFunc(DestroySurfaceKHR) \
81 VKFunc(CreateDevice) \
82 VKFunc(DestroyInstance) \
83 VKDebugFuncs \
84 VKInstArchFuncs
85
86//funcs specific to a device
87#define VKDevFuncs \
88 VKFunc(AcquireNextImageKHR) \
89 VKFunc(QueuePresentKHR) \
90 VKFunc(CreateSwapchainKHR) \
91 VKFunc(GetSwapchainImagesKHR) \
92 VKFunc(DestroySwapchainKHR) \
93 VKFunc(CmdBeginRenderPass) \
94 VKFunc(CmdEndRenderPass) \
95 VKFunc(CmdBindPipeline) \
96 VKFunc(CmdDrawIndexedIndirect) \
97 VKFunc(CmdDraw) \
98 VKFunc(CmdDrawIndexed) \
99 VKFunc(CmdSetViewport) \
100 VKFunc(CmdSetScissor) \
101 VKFunc(CmdBindDescriptorSets) \
102 VKFunc(CmdBindIndexBuffer) \
103 VKFunc(CmdBindVertexBuffers) \
104 VKFunc(CmdPushConstants) \
105 VKFunc(CmdPushDescriptorSetKHR) \
106 VKFunc(CmdClearAttachments) \
107 VKFunc(CmdClearColorImage) \
108 VKFunc(CmdClearDepthStencilImage) \
109 VKFunc(CmdCopyImage) \
110 VKFunc(CmdCopyBuffer) \
111 VKFunc(CmdCopyImageToBuffer) \
112 VKFunc(CmdCopyBufferToImage) \
113 VKFunc(CmdBlitImage) \
114 VKFunc(CmdPipelineBarrier) \
115 VKFunc(CmdSetEvent) \
116 VKFunc(CmdResetEvent) \
117 VKFunc(CmdWaitEvents) \
118 VKFunc(CreateDescriptorSetLayout) \
119 VKFunc(DestroyDescriptorSetLayout) \
120 VKFunc(CreatePipelineLayout) \
121 VKFunc(DestroyPipelineLayout) \
122 VKFunc(CreateShaderModule) \
123 VKFunc(DestroyShaderModule) \
124 VKFunc(CreateGraphicsPipelines) \
125 VKFunc(DestroyPipeline) \
126 VKFunc(CreatePipelineCache) \
127 VKFunc(GetPipelineCacheData) \
128 VKFunc(DestroyPipelineCache) \
129 VKFunc(QueueSubmit) \
130 VKFunc(QueueWaitIdle) \
131 VKFunc(DeviceWaitIdle) \
132 VKFunc(BeginCommandBuffer) \
133 VKFunc(ResetCommandBuffer) \
134 VKFunc(EndCommandBuffer) \
135 VKFunc(DestroyDevice) \
136 VKFunc(GetDeviceQueue) \
137 VKFunc(GetBufferMemoryRequirements) \
138 VKFunc(GetImageMemoryRequirements) \
139 VKFunc(GetImageMemoryRequirements2KHR) \
140 VKFunc(GetImageSubresourceLayout) \
141 VKFunc(CreateFramebuffer) \
142 VKFunc(DestroyFramebuffer) \
143 VKFunc(CreateCommandPool) \
144 VKFunc(ResetCommandPool) \
145 VKFunc(DestroyCommandPool) \
146 VKFunc(CreateDescriptorPool) \
147 VKFunc(ResetDescriptorPool) \
148 VKFunc(DestroyDescriptorPool) \
149 VKFunc(AllocateDescriptorSets) \
150 VKFunc(CreateSampler) \
151 VKFunc(DestroySampler) \
152 VKFunc(CreateImage) \
153 VKFunc(DestroyImage) \
154 VKFunc(CreateBuffer) \
155 VKFunc(DestroyBuffer) \
156 VKFunc(AllocateMemory) \
157 VKFunc(FreeMemory) \
158 VKFunc(BindBufferMemory) \
159 VKFunc(BindImageMemory) \
160 VKFunc(MapMemory) \
161 VKFunc(FlushMappedMemoryRanges) \
162 VKFunc(UnmapMemory) \
163 VKFunc(UpdateDescriptorSets) \
164 VKFunc(AllocateCommandBuffers) \
165 VKFunc(FreeCommandBuffers) \
166 VKFunc(CreateRenderPass) \
167 VKFunc(DestroyRenderPass) \
168 VKFunc(CreateSemaphore) \
169 VKFunc(DestroySemaphore) \
170 VKFunc(CreateFence) \
171 VKFunc(GetFenceStatus) \
172 VKFunc(WaitForFences) \
173 VKFunc(ResetFences) \
174 VKFunc(DestroyFence) \
175 VKFunc(CreateImageView) \
176 VKFunc(DestroyImageView)
177
178//all vulkan funcs
179#define VKFuncs \
180 VKInstFuncs \
181 VKInst2Funcs \
182 VKDevFuncs \
183 VKFunc(GetInstanceProcAddr)\
184 VKFunc(GetDeviceProcAddr)
185
186
187#ifdef VK_NO_PROTOTYPES
188 #define VKFunc(n) extern PFN_vk##n vk##n;
189 VKFuncs
190 #undef VKFunc
191#else
192// #define VKFunc(n) static const PFN_vk##n vk##n = vk##n;
193// VKFuncs
194// #undef VKFunc
195#endif
196
197#define vkallocationcb NULL
198#ifdef _DEBUG
199#define VkAssert(f) do {VkResult err = f; if (err) Sys_Error("%s == %s", #f, VK_VKErrorToString(err)); } while(0)
200#define VkWarnAssert(f) do {VkResult err = f; if (err) Con_Printf("%s == %s\n", #f, VK_VKErrorToString(err)); } while(0)
201#else
202#define VkAssert(f) f
203#define VkWarnAssert(f) f
204#endif
205
206typedef struct
207{
208 struct vk_mempool_s *pool;
209 VkDeviceMemory memory;
210 size_t size;
211 size_t offset;
213
214typedef struct vk_image_s
215{
216 VkImage image;
218 VkImageView view;
219 VkSampler sampler;
221
228 uint32_t type; //PTI_2D/3D/CUBE
231{
236 DB_MAX
239{
240 VkCommandBuffer cbuf; //cbuf allocated for this render target.
241 VkFramebuffer framebuffer;
243
244 image_t q_colour, q_depth, q_mscolour; //extra sillyness...
245
248
250 qboolean depthcleared; //starting a new gameview needs cleared depth relative to other views, but the first probably won't.
251
253 VkSemaphore presentsemaphore;
256
258};
260{
262 image_t q_colour, q_depth; //extra sillyness...
265};
266
267#define VQ_RENDER 0
268#define VQ_PRESENT 1
269#define VQ_ALTRENDER 2
270#define VQ_ALTRENDER_COUNT 16
271#define VQ_COUNT 3
272extern struct vulkaninfo_s
273{
274 unsigned short triplebuffer;
277
278 qboolean khr_swapchain; //aka: not headless. we're actually rendering stuff!
280 qboolean khr_dedicated_allocation; //standardised version of the above where the driver decides whether a resource is worth a dedicated allocation.
281 qboolean khr_push_descriptor; //more efficient descriptor streaming
282 qboolean amd_rasterization_order; //allows primitives to draw in any order
283 qboolean ext_astc_decode_mode; //small perf boost
284#ifdef VK_KHR_fragment_shading_rate
285 qboolean khr_fragment_shading_rate; //small perf boost. probably more useful for battery.
286#endif
287
288 VkInstance instance;
289 VkDevice device;
290 VkPhysicalDevice gpu;
291 VkSurfaceKHR surface;
296 VkQueue queue_alt[1];
298 VkCommandPool cmdpool;
300
301 //we have a ringbuffer for acquires
302#define ACQUIRELIMIT 8
303 VkSemaphore acquiresemaphores[ACQUIRELIMIT];
304 VkFence acquirefences[ACQUIRELIMIT];
306 unsigned int acquirenext; //first usable buffer, but we still need to wait on its fence (accessed on main thread).
307 volatile unsigned int acquirelast; //last buffer that we have successfully asked to aquire (set inside the submission thread).
308 //acquirenext <= acquirelast, acquirelast-acquirenext<=ACQUIRELIMIT
309
310 VkPipelineCache pipelinecache;
311
313 {
314 VkFence fence;
316 void (*Passed) (void*);
317 VkCommandBuffer cbuf;
318 } *fencework, *fencework_last; //callback for each fence as its passed. mostly for loading code or freeing memory.
319
320 int filtermip[3];
321 int filterpic[3];
322 int mipcap[2];
323 float lodbias;
324 float max_anistophy; //limits.maxSamplerAnistrophy
325
327 {
329
331 VkDeviceMemory memory;
332
333 //FIXME: replace with an ordered list of free blocks.
338
339 struct descpool
340 {
341 VkDescriptorPool pool;
344 struct descpool *next;
347 {
348 size_t flushed; //size already copied to the gpu
349 size_t offset; //size written by the cpu (that might not yet be flushed)
350 size_t size; //maximum buffer size
351 size_t align;
353 VkBuffer stagingbuf;
354 VkDeviceMemory stagingmemory;
355 VkBuffer devicebuf;
356 VkDeviceMemory devicememory;
357 VkBuffer renderbuf; //either staging or device. this is the buffer that we tell vulkan about
358 void *ptr;
359
364 struct vkframe {
365 struct vkframe *next;
368 VkSemaphore acquiresemaphore;
369 VkCommandBuffer *cbufs;
370 size_t numcbufs;
371 size_t maxcbufs;
373 struct vk_frameend {
375 void (*FrameEnded) (void*);
377
380 struct vk_frameend *frameendjobs;
382
383#define RP_RESUME 0
384#define RP_DEPTHCLEAR 1 //
385#define RP_FULLCLEAR 2
386#define RP_DEPTHONLY 3 //shadowmaps (clears depth)
387#define RP_MULTISAMPLE (1u<<2)
388#define RP_PRESENTABLE (1u<<3)
389#define RP_FP16 (1u<<4)
390#define RP_VR (1u<<5) //potentially a different colour format.
391 VkRenderPass renderpass[1u<<6];
392 VkSwapchainKHR swapchain;
394
399
400 qboolean neednewswapchain; //something changed that invalidates the old one.
401 qboolean devicelost; //we seriously fucked up somewhere. or the gpu is shite.
402
404 {
405 VkSampler samp;
406 unsigned int usages; //refcounted.
407 unsigned int flags;
412
413 struct vkwork_s
414 {
415 struct vkwork_s *next;
416 VkQueue queue;
417 VkCommandBuffer cmdbuf;
418 VkSemaphore semwait;
420 VkSemaphore semsignal;
421 VkFence fencesignal;
422
428 void (*dopresent)(struct vkframe *theframe);
429
432
437
439{
441 unsigned int permu:16; //matches the permutation (masked by permutations that are supposed to be supported)
442 unsigned int flags:16; //matches the shader flags (cull etc)
443 unsigned int blendbits; //matches blend state.
444 VkPipeline pipeline;
445};
446
447uint32_t vk_find_memory_try(uint32_t typeBits, VkFlags requirements_mask);
448uint32_t vk_find_memory_require(uint32_t typeBits, VkFlags requirements_mask);
449
450void VK_DoPresent(struct vkframe *theframe);
451
452qboolean VK_EnumerateDevices (void *usercontext, void(*callback)(void *context, const char *devicename, const char *outputname, const char *desc), const char *descprefix, PFN_vkGetInstanceProcAddr vk_GetInstanceProcAddr);
453qboolean VK_Init(rendererstate_t *info, const char **sysextname, qboolean (*createSurface)(void), void (*dopresent)(struct vkframe *theframe));
454void VK_Shutdown(void);
455
456void VK_R_BloomBlend (texid_t source, int x, int y, int w, int h);
457void VK_R_BloomShutdown(void);
458qboolean R_CanBloom(void);
459
460struct programshared_s;
461struct programpermu_s;
462qboolean VK_LoadGLSL(struct programshared_s *prog, struct programpermu_s *permu, int ver, const char **precompilerconstants, const char *vert, const char *tcs, const char *tes, const char *geom, const char *frag, qboolean noerrors, vfsfile_t *blobfile);
463
464VkCommandBuffer VK_AllocFrameCBuf(void);
465void VK_Submit_Work(VkCommandBuffer cmdbuf, VkSemaphore semwait, VkPipelineStageFlags semwaitstagemask, VkSemaphore semsignal, VkFence fencesignal, struct vkframe *presentframe, struct vk_fencework *fencedwork);
466
467void VKBE_Init(void);
468void VKBE_InitFramePools(struct vkframe *frame);
469void VKBE_RestartFrame(void);
470void VKBE_FlushDynamicBuffers(void);
471void VKBE_Set2D(qboolean twodee);
472void VKBE_ShutdownFramePools(struct vkframe *frame);
473void VKBE_Shutdown(void);
475void VKBE_DrawMesh_List(shader_t *shader, int nummeshes, mesh_t **mesh, vbo_t *vbo, texnums_t *texnums, unsigned int beflags);
476void VKBE_DrawMesh_Single(shader_t *shader, mesh_t *meshchain, vbo_t *vbo, unsigned int beflags);
477void VKBE_SubmitBatch(batch_t *batch);
480void VKBE_ClearVBO(vbo_t *vbo, qboolean dataonly);
481void VKBE_UploadAllLightmaps(void);
482void VKBE_DrawWorld (batch_t **worldbatches);
485qboolean VKBE_SelectDLight(dlight_t *dl, vec3_t colour, vec3_t axis[3], unsigned int lmode);
486void VKBE_VBO_Begin(vbobctx_t *ctx, size_t maxsize);
487void VKBE_VBO_Data(vbobctx_t *ctx, void *data, size_t size, vboarray_t *varray);
488void VKBE_VBO_Finish(vbobctx_t *ctx, void *edata, size_t esize, vboarray_t *earray, void **vbomem, void **ebomem);
489void VKBE_VBO_Destroy(vboarray_t *vearray, void *mem);
490void VKBE_Scissor(srect_t *rect);
491void VKBE_BaseEntTextures(const qbyte *scenepvs, const int *sceneareas);
492
493struct vk_shadowbuffer;
494struct vk_shadowbuffer *VKBE_GenerateShadowBuffer(vecV_t *verts, int numverts, index_t *indicies, int numindicies, qboolean istemp);
495void VKBE_DestroyShadowBuffer(struct vk_shadowbuffer *buf);
496void VKBE_RenderShadowBuffer(struct vk_shadowbuffer *buf);
497void VKBE_SetupForShadowMap(dlight_t *dl, int texwidth, int texheight, float shadowscale);
499void VKBE_BeginShadowmapFace(void);
500void VKBE_DoneShadows(void);
501
502void VKBE_RT_Gen_Cube(struct vk_rendertarg_cube *targ, uint32_t size, qboolean clear);
503void VKBE_RT_Gen(struct vk_rendertarg *targ, vk_image_t *colour, uint32_t width, uint32_t height, qboolean clear, unsigned int flags);
504void VKBE_RT_Begin(struct vk_rendertarg *targ);
505void VKBE_RT_End(struct vk_rendertarg *targ);
506void VKBE_RT_Destroy(struct vk_rendertarg *targ);
507
508char *VK_VKErrorToString(VkResult err); //helper for converting vulkan error codes to strings, if we get something unexpected.
509
510qboolean VK_AllocatePoolMemory(uint32_t pooltype, VkDeviceSize memsize, VkDeviceSize poolalignment, vk_poolmem_t *mem);
512qboolean VK_AllocateImageMemory(VkImage image, qboolean dedicated, vk_poolmem_t *mem); //dedicated should normally be TRUE for render targets
513qboolean VK_AllocateBindImageMemory(vk_image_t *image, qboolean dedicated); //dedicated should normally be TRUE for render targets
515{
516 VkBuffer buf;
517 VkBuffer retbuf;
519 size_t size;
521};
522vk_image_t VK_CreateTexture2DArray(uint32_t width, uint32_t height, uint32_t layers, uint32_t mips, uploadfmt_t encoding, unsigned int type, qboolean rendertarget, const char *debugname);
523void set_image_layout(VkCommandBuffer cmd, VkImage image, VkImageAspectFlags aspectMask, VkImageLayout old_image_layout, VkAccessFlags srcaccess, VkPipelineStageFlagBits srcstagemask, VkImageLayout new_image_layout, VkAccessFlags dstaccess, VkPipelineStageFlagBits dststagemask);
524void VK_CreateSampler(unsigned int flags, vk_image_t *img);
527VkBuffer VKBE_FinishStaging(struct stagingbuf *n, vk_poolmem_t *memptr);
528void *VK_FencedBegin(void (*passed)(void *work), size_t worksize);
529void VK_FencedSubmit(void *work);
530void VK_FencedCheck(void);
531void *VK_AtFrameEnd(void (*passed)(void *work), void *data, size_t worksize);
532
533
534
535void VK_Draw_Init(void);
536void VK_Draw_Shutdown(void);
537
538void VK_UpdateFiltering (image_t *imagelist, int filtermip[3], int filterpic[3], int mipcap[2], float lodbias, float anis);
542
543void VK_R_Init (void);
544void VK_R_DeInit (void);
545void VK_R_RenderView (void);
546
547char *VKVID_GetRGBInfo (int *bytestride, int *truevidwidth, int *truevidheight, enum uploadfmt *fmt);
548
550
551void VKBE_RenderToTextureUpdate2d(qboolean destchanged);
552VkRenderPass VK_GetRenderPass(int pass);
553
554//improved rgb get that calls the callback when the data is actually available. used for video capture.
555void VKVID_QueueGetRGBData (void (*gotrgbdata) (void *rgbdata, qintptr_t bytestride, size_t width, size_t height, enum uploadfmt fmt));
qboolean
Definition: api_menu.h:34
vec_t vec3_t[3]
Definition: api_menu.h:40
unsigned int width
Definition: bymorphed.h:4
unsigned int height
Definition: bymorphed.h:5
enum @13::coninfomode_e mode
Definition: com_phys_ode.c:695
cvar_t model
Definition: cl_main.c:153
void(QDECL *vgui_frame)(void)
entity_t * ent
Definition: com_mesh.c:717
vbo_t vbo
Definition: com_mesh.c:737
void dNearCallback * callback
Definition: com_phys_ode.c:655
unsigned char qbyte
Definition: common.h:127
intptr_t qintptr_t
Definition: common.h:38
image_t * image
Definition: gl_font.c:402
unsigned int vert[2]
Definition: gl_shadow.c:1318
GLsizei const void GLenum usage
Definition: gl_vidcommon.c:223
static EGLSurface EGLSurface EGLContext ctx
Definition: gl_videgl.c:47
struct @319::xidevinfo::@353 axis[2]
GLfloat GLfloat y
Definition: glquake.h:158
GLint GLenum type
Definition: glquake.h:157
GLint size
Definition: glquake.h:157
GLfloat x
Definition: glquake.h:158
GLfloat GLfloat GLfloat GLfloat w
Definition: glquake.h:158
GLsizei GLsizei GLcharARB * source
Definition: glquake.h:171
const char * desc
Definition: m_options.c:1101
enum backendmode_e backendmode_t
char ** data
Definition: p_script.c:63
shader_t * shader
Definition: r_2d.c:51
uploadfmt_t fmt
Definition: r_2d.c:48
texid_t tex
Definition: r_2d.c:52
unsigned short index_t
Definition: render.h:56
enum uploadfmt uploadfmt_t
uploadfmt
Definition: screen.h:96
static AL_API ALsizei n
Definition: snd_al.c:161
Definition: vulkan.h:1508
Definition: vulkan.h:1654
Definition: vulkan.h:2444
Definition: vulkan.h:2146
Definition: gl_model.h:133
Definition: client.h:315
Definition: render.h:99
Definition: merged.h:238
Definition: gl_model.h:90
Definition: gl_model.h:972
Definition: merged.h:302
Definition: vkrenderer.h:439
VkPipeline pipeline
Definition: vkrenderer.h:444
struct pipeline_s * next
Definition: vkrenderer.h:440
unsigned int flags
Definition: vkrenderer.h:442
unsigned int blendbits
Definition: vkrenderer.h:443
unsigned int permu
Definition: vkrenderer.h:441
Definition: shader.h:498
Definition: shader.h:540
Definition: vid.h:42
Definition: shader.h:602
Definition: merged.h:374
Definition: vkrenderer.h:515
VkBuffer buf
Definition: vkrenderer.h:516
VkBufferUsageFlags usage
Definition: vkrenderer.h:520
vk_poolmem_t mem
Definition: vkrenderer.h:518
size_t size
Definition: vkrenderer.h:519
VkBuffer retbuf
Definition: vkrenderer.h:517
Definition: merged.h:383
Definition: gl_model.h:320
Definition: merged.h:333
Definition: vkrenderer.h:215
VkFormat vkformat
Definition: vkrenderer.h:222
uint32_t height
Definition: vkrenderer.h:224
VkImage image
Definition: vkrenderer.h:216
VkImageLayout layout
Definition: vkrenderer.h:220
uint32_t mipcount
Definition: vkrenderer.h:226
VkSampler sampler
Definition: vkrenderer.h:219
uint32_t layers
Definition: vkrenderer.h:225
uint32_t encoding
Definition: vkrenderer.h:227
uint32_t type
Definition: vkrenderer.h:228
uint32_t width
Definition: vkrenderer.h:223
vk_poolmem_t mem
Definition: vkrenderer.h:217
VkImageView view
Definition: vkrenderer.h:218
Definition: vkrenderer.h:207
size_t size
Definition: vkrenderer.h:210
struct vk_mempool_s * pool
Definition: vkrenderer.h:208
size_t offset
Definition: vkrenderer.h:211
VkDeviceMemory memory
Definition: vkrenderer.h:209
Definition: vkrenderer.h:260
vk_image_t colour
Definition: vkrenderer.h:263
struct vk_rendertarg face[6]
Definition: vkrenderer.h:264
uint32_t size
Definition: vkrenderer.h:261
image_t q_colour
Definition: vkrenderer.h:262
image_t q_depth
Definition: vkrenderer.h:262
vk_image_t depth
Definition: vkrenderer.h:263
Definition: vkrenderer.h:239
qboolean depthcleared
Definition: vkrenderer.h:250
vk_image_t depth
Definition: vkrenderer.h:242
qboolean firstuse
Definition: vkrenderer.h:254
vk_image_t mscolour
Definition: vkrenderer.h:242
qboolean externalimage
Definition: vkrenderer.h:255
VkRenderPassBeginInfo restartinfo
Definition: vkrenderer.h:252
uint32_t height
Definition: vkrenderer.h:247
image_t q_mscolour
Definition: vkrenderer.h:244
vk_image_t colour
Definition: vkrenderer.h:242
image_t q_depth
Definition: vkrenderer.h:244
VkSemaphore presentsemaphore
Definition: vkrenderer.h:253
struct vk_rendertarg * prevtarg
Definition: vkrenderer.h:257
VkFramebuffer framebuffer
Definition: vkrenderer.h:241
VkCommandBuffer cbuf
Definition: vkrenderer.h:240
uint32_t width
Definition: vkrenderer.h:246
image_t q_colour
Definition: vkrenderer.h:244
uint32_t rpassflags
Definition: vkrenderer.h:249
Definition: vkrenderer.h:340
int availsets
Definition: vkrenderer.h:342
VkDescriptorPool pool
Definition: vkrenderer.h:341
struct descpool * next
Definition: vkrenderer.h:344
int totalsets
Definition: vkrenderer.h:343
Definition: vkrenderer.h:347
VkDeviceMemory stagingmemory
Definition: vkrenderer.h:354
void * ptr
Definition: vkrenderer.h:358
VkBuffer devicebuf
Definition: vkrenderer.h:355
VkDeviceMemory devicememory
Definition: vkrenderer.h:356
VkBuffer renderbuf
Definition: vkrenderer.h:357
size_t offset
Definition: vkrenderer.h:349
qboolean stagingcoherent
Definition: vkrenderer.h:352
struct dynbuffer * next
Definition: vkrenderer.h:360
size_t align
Definition: vkrenderer.h:351
VkBuffer stagingbuf
Definition: vkrenderer.h:353
size_t flushed
Definition: vkrenderer.h:348
size_t size
Definition: vkrenderer.h:350
Definition: vkrenderer.h:313
VkFence fence
Definition: vkrenderer.h:314
void(* Passed)(void *)
Definition: vkrenderer.h:316
VkCommandBuffer cbuf
Definition: vkrenderer.h:317
struct vk_fencework * next
Definition: vkrenderer.h:315
Definition: vkrenderer.h:327
struct vk_mempool_s * next
Definition: vkrenderer.h:328
VkDeviceSize gaps
Definition: vkrenderer.h:334
VkDeviceSize memorysize
Definition: vkrenderer.h:336
VkDeviceMemory memory
Definition: vkrenderer.h:331
VkDeviceSize memoryoffset
Definition: vkrenderer.h:335
uint32_t memtype
Definition: vkrenderer.h:330
Definition: vkrenderer.h:373
struct vk_frameend * next
Definition: vkrenderer.h:374
void(* FrameEnded)(void *)
Definition: vkrenderer.h:375
Definition: vkrenderer.h:364
struct dynbuffer * dynbufs[DB_MAX]
Definition: vkrenderer.h:366
size_t numcbufs
Definition: vkrenderer.h:370
VkFence finishedfence
Definition: vkrenderer.h:372
size_t maxcbufs
Definition: vkrenderer.h:371
struct vk_rendertarg * backbuf
Definition: vkrenderer.h:378
struct descpool * descpools
Definition: vkrenderer.h:367
VkCommandBuffer * cbufs
Definition: vkrenderer.h:369
VkSemaphore acquiresemaphore
Definition: vkrenderer.h:368
struct vulkaninfo_s::vkframe::vk_frameend * frameendjobs
struct vkframe * next
Definition: vkrenderer.h:365
Definition: vkrenderer.h:404
struct vksamplers_s * next
Definition: vkrenderer.h:409
unsigned int usages
Definition: vkrenderer.h:406
unsigned int flags
Definition: vkrenderer.h:407
VkSamplerCreateInfo props
Definition: vkrenderer.h:408
struct vksamplers_s ** link
Definition: vkrenderer.h:410
VkSampler samp
Definition: vkrenderer.h:405
Definition: vkrenderer.h:414
struct vk_fencework * fencedwork
Definition: vkrenderer.h:423
VkCommandBuffer cmdbuf
Definition: vkrenderer.h:417
VkQueue queue
Definition: vkrenderer.h:416
VkPipelineStageFlags semwaitstagemask
Definition: vkrenderer.h:419
VkSemaphore semsignal
Definition: vkrenderer.h:420
VkFence fencesignal
Definition: vkrenderer.h:421
struct vkframe * present
Definition: vkrenderer.h:424
VkSemaphore semwait
Definition: vkrenderer.h:418
struct vkwork_s * next
Definition: vkrenderer.h:415
Definition: vkrenderer.h:273
VkFormat depthformat
Definition: vkrenderer.h:396
VkPipelineCache pipelinecache
Definition: vkrenderer.h:310
struct vulkaninfo_s::vk_fencework * fencework_last
struct vk_rendertarg * rendertarg
Definition: vkrenderer.h:363
VkSampleCountFlagBits multisamplebits
Definition: vkrenderer.h:395
uint32_t acquirebufferidx[ACQUIRELIMIT]
Definition: vkrenderer.h:305
VkPhysicalDevice gpu
Definition: vkrenderer.h:290
VkRenderPass renderpass[1u<< 6]
Definition: vkrenderer.h:391
VkInstance instance
Definition: vkrenderer.h:288
void(* dopresent)(struct vkframe *theframe)
Definition: vkrenderer.h:428
VkFence acquirefences[ACQUIRELIMIT]
Definition: vkrenderer.h:304
VkQueue queue_present
Definition: vkrenderer.h:295
qboolean vsync
Definition: vkrenderer.h:275
volatile unsigned int acquirelast
Definition: vkrenderer.h:307
int filterpic[3]
Definition: vkrenderer.h:321
qboolean amd_rasterization_order
Definition: vkrenderer.h:282
struct vulkaninfo_s::vkframe * frame
struct vulkaninfo_s::vk_mempool_s * mempools
VkPhysicalDeviceLimits limits
Definition: vkrenderer.h:299
qboolean allowsubmissionthread
Definition: vkrenderer.h:276
struct vk_rendertarg * backbufs
Definition: vkrenderer.h:362
uint32_t backbuf_count
Definition: vkrenderer.h:381
void * submitthread
Definition: vkrenderer.h:426
VkPhysicalDeviceMemoryProperties memory_properties
Definition: vkrenderer.h:297
int mipcap[2]
Definition: vkrenderer.h:322
int filtermip[3]
Definition: vkrenderer.h:320
struct vulkaninfo_s::vk_fencework * fencework
VkDevice device
Definition: vkrenderer.h:289
unsigned short triplebuffer
Definition: vkrenderer.h:274
qboolean khr_swapchain
Definition: vkrenderer.h:278
float max_anistophy
Definition: vkrenderer.h:324
VkSemaphore acquiresemaphores[ACQUIRELIMIT]
Definition: vkrenderer.h:303
float lodbias
Definition: vkrenderer.h:323
shader_t * scenepp_rescale
Definition: vkrenderer.h:435
void * submitcondition
Definition: vkrenderer.h:427
texid_t sourcecolour
Definition: vkrenderer.h:430
unsigned int acquirenext
Definition: vkrenderer.h:306
qboolean khr_fragment_shading_rate
Definition: vkrenderer.h:285
qboolean neednewswapchain
Definition: vkrenderer.h:400
uint32_t queuenum[VQ_COUNT]
Definition: vkrenderer.h:293
qboolean devicelost
Definition: vkrenderer.h:401
struct vulkaninfo_s::dynbuffer * dynbuf[DB_MAX]
VkQueue queue_alt[1]
Definition: vkrenderer.h:296
VkQueue queue_render
Definition: vkrenderer.h:294
qboolean khr_push_descriptor
Definition: vkrenderer.h:281
uint32_t bufferidx
Definition: vkrenderer.h:393
texid_t sourcedepth
Definition: vkrenderer.h:431
qboolean khr_dedicated_allocation
Definition: vkrenderer.h:280
VkSurfaceKHR surface
Definition: vkrenderer.h:291
qboolean ext_astc_decode_mode
Definition: vkrenderer.h:283
VkFormat backbufformat
Definition: vkrenderer.h:397
struct vulkaninfo_s::vksamplers_s * samplers
struct vulkaninfo_s::vkwork_s * work
shader_t * scenepp_waterwarp
Definition: vkrenderer.h:433
VkCommandPool cmdpool
Definition: vkrenderer.h:298
uint32_t queuefam[VQ_COUNT]
Definition: vkrenderer.h:292
struct vk_frameend * frameendjobs
Definition: vkrenderer.h:380
struct vulkaninfo_s::vkframe * unusedframes
qboolean khr_get_memory_requirements2
Definition: vkrenderer.h:279
qboolean srgbcapable
Definition: vkrenderer.h:398
shader_t * scenepp_antialias
Definition: vkrenderer.h:434
VkSwapchainKHR swapchain
Definition: vkrenderer.h:392
struct vulkaninfo_s::descpool * descpool
unsigned char buf[KBRINGSIZE]
Definition: sys_dos.c:27
void * vfsfile_t
Definition: sys_plugfte.h:2
Definition: merged.h:342
unsigned int flags
Definition: valid.c:313
unsigned __int32 uint32_t
Definition: vk_platform.h:80
void VKBE_VBO_Destroy(vboarray_t *vearray, void *mem)
Definition: vk_backend.c:5941
VkBuffer VKBE_FinishStaging(struct stagingbuf *n, vk_poolmem_t *memptr)
Definition: vk_backend.c:3357
void VK_ReleasePoolMemory(vk_poolmem_t *mem)
Definition: vk_init.c:1358
void VK_DestroyVkTexture(vk_image_t *img)
Definition: vk_init.c:415
void VKBE_Init(void)
Definition: vk_backend.c:685
void VKBE_RestartFrame(void)
Definition: vk_backend.c:1036
void VK_UpdateFiltering(image_t *imagelist, int filtermip[3], int filterpic[3], int mipcap[2], float lodbias, float anis)
Definition: vk_init.c:1286
void VKBE_RenderToTextureUpdate2d(qboolean destchanged)
Definition: vk_init.c:4026
void VK_R_BloomShutdown(void)
Definition: gl_bloom.c:284
void VK_Shutdown(void)
Definition: vk_init.c:5437
void VKBE_ShutdownFramePools(struct vkframe *frame)
Definition: vk_backend.c:1054
vk_image_t VK_CreateTexture2DArray(uint32_t width, uint32_t height, uint32_t layers, uint32_t mips, uploadfmt_t encoding, unsigned int type, qboolean rendertarget, const char *debugname)
Definition: vk_init.c:1443
void VKBE_GenBrushModelVBO(model_t *mod)
Definition: vk_backend.c:3534
void VK_R_Init(void)
Definition: vk_init.c:2197
void VKBE_RenderShadowBuffer(struct vk_shadowbuffer *buf)
Definition: vk_backend.c:5482
dynbuf_e
Definition: vkrenderer.h:231
@ DB_EBO
Definition: vkrenderer.h:233
@ DB_STAGING
Definition: vkrenderer.h:235
@ DB_UBO
Definition: vkrenderer.h:234
@ DB_MAX
Definition: vkrenderer.h:236
@ DB_VBO
Definition: vkrenderer.h:232
void VK_Draw_Shutdown(void)
Definition: vk_init.c:1156
void VKBE_DestroyShadowBuffer(struct vk_shadowbuffer *buf)
Definition: vk_backend.c:5471
void VKBE_InitFramePools(struct vkframe *frame)
Definition: vk_backend.c:956
qboolean VK_EnumerateDevices(void *usercontext, void(*callback)(void *context, const char *devicename, const char *outputname, const char *desc), const char *descprefix, PFN_vkGetInstanceProcAddr vk_GetInstanceProcAddr)
Definition: vk_init.c:4597
qboolean R_CanBloom(void)
Definition: gl_bloom.c:172
char * VK_VKErrorToString(VkResult err)
uint32_t vk_find_memory_require(uint32_t typeBits, VkFlags requirements_mask)
Definition: vk_init.c:407
void VKBE_RT_Begin(struct vk_rendertarg *targ)
Definition: vk_backend.c:4600
void * VKBE_CreateStagingBuffer(struct stagingbuf *n, size_t size, VkBufferUsageFlags usage)
Definition: vk_backend.c:3311
batch_t * VKBE_GetTempBatch(void)
Definition: vk_backend.c:3761
void VKBE_Set2D(qboolean twodee)
Definition: vk_backend.c:1025
qboolean VK_LoadGLSL(struct programshared_s *prog, struct programpermu_s *permu, int ver, const char **precompilerconstants, const char *vert, const char *tcs, const char *tes, const char *geom, const char *frag, qboolean noerrors, vfsfile_t *blobfile)
void VK_FencedSubmit(void *work)
Definition: vk_init.c:1858
void VK_FencedCheck(void)
Definition: vk_init.c:1807
uint32_t vk_find_memory_try(uint32_t typeBits, VkFlags requirements_mask)
Definition: vk_init.c:393
struct vk_shadowbuffer * VKBE_GenerateShadowBuffer(vecV_t *verts, int numverts, index_t *indicies, int numindicies, qboolean istemp)
Definition: vk_backend.c:5422
qboolean VK_AllocateImageMemory(VkImage image, qboolean dedicated, vk_poolmem_t *mem)
Definition: vk_init.c:1377
void VKBE_SubmitBatch(batch_t *batch)
Definition: vk_backend.c:4096
void VKVID_QueueGetRGBData(void(*gotrgbdata)(void *rgbdata, qintptr_t bytestride, size_t width, size_t height, enum uploadfmt fmt))
Definition: vk_init.c:3193
void * VK_AtFrameEnd(void(*passed)(void *work), void *data, size_t worksize)
Definition: vk_init.c:1913
void VK_Submit_Work(VkCommandBuffer cmdbuf, VkSemaphore semwait, VkPipelineStageFlags semwaitstagemask, VkSemaphore semsignal, VkFence fencesignal, struct vkframe *presentframe, struct vk_fencework *fencedwork)
Definition: vk_init.c:4353
void VKBE_UploadAllLightmaps(void)
Definition: vk_backend.c:3725
void VKBE_RT_Destroy(struct vk_rendertarg *targ)
Definition: vk_backend.c:4159
VkRenderPass VK_GetRenderPass(int pass)
Definition: vk_init.c:4042
qboolean VK_LoadTextureMips(texid_t tex, const struct pendingtextureinfo *mips)
Definition: vk_init.c:1941
qboolean VK_AllocatePoolMemory(uint32_t pooltype, VkDeviceSize memsize, VkDeviceSize poolalignment, vk_poolmem_t *mem)
Definition: vk_init.c:1314
qboolean VK_AllocateBindImageMemory(vk_image_t *image, qboolean dedicated)
Definition: vk_init.c:1432
void VKBE_DrawWorld(batch_t **worldbatches)
Definition: vk_backend.c:5777
char * VKVID_GetRGBInfo(int *bytestride, int *truevidwidth, int *truevidheight, enum uploadfmt *fmt)
Definition: vk_init.c:3261
qboolean VKBE_BeginShadowmap(qboolean isspot, uint32_t width, uint32_t height)
Definition: vk_backend.c:5530
void VKBE_RT_Gen(struct vk_rendertarg *targ, vk_image_t *colour, uint32_t width, uint32_t height, qboolean clear, unsigned int flags)
Definition: vk_backend.c:4186
void VKBE_SetupForShadowMap(dlight_t *dl, int texwidth, int texheight, float shadowscale)
Definition: vk_backend.c:5732
void VK_DoPresent(struct vkframe *theframe)
Definition: vk_init.c:4172
void VKBE_SelectEntity(entity_t *ent)
Definition: vk_backend.c:3305
void VK_DestroyTexture(texid_t tex)
Definition: vk_init.c:2183
void VKBE_DrawMesh_List(shader_t *shader, int nummeshes, mesh_t **mesh, vbo_t *vbo, texnums_t *texnums, unsigned int beflags)
Definition: vk_backend.c:4124
void VKBE_BeginShadowmapFace(void)
Definition: vk_backend.c:5753
void VKBE_VBO_Data(vbobctx_t *ctx, void *data, size_t size, vboarray_t *varray)
Definition: vk_backend.c:5913
void set_image_layout(VkCommandBuffer cmd, VkImage image, VkImageAspectFlags aspectMask, VkImageLayout old_image_layout, VkAccessFlags srcaccess, VkPipelineStageFlagBits srcstagemask, VkImageLayout new_image_layout, VkAccessFlags dstaccess, VkPipelineStageFlagBits dststagemask)
Definition: vk_init.c:1765
qboolean VK_SCR_UpdateScreen(void)
Definition: vk_init.c:3867
void VK_CreateSampler(unsigned int flags, vk_image_t *img)
Definition: vk_init.c:1215
void VKBE_DoneShadows(void)
Definition: vk_backend.c:5675
struct vk_image_s vk_image_t
void VKBE_DrawMesh_Single(shader_t *shader, mesh_t *meshchain, vbo_t *vbo, unsigned int beflags)
Definition: vk_backend.c:4142
void VKBE_RT_End(struct vk_rendertarg *targ)
Definition: vk_backend.c:4669
void VKBE_Scissor(srect_t *rect)
Definition: vk_backend.c:5955
void VKBE_BaseEntTextures(const qbyte *scenepvs, const int *sceneareas)
Definition: vk_backend.c:5399
void VK_R_BloomBlend(texid_t source, int x, int y, int w, int h)
Definition: gl_bloom.c:202
void * VK_FencedBegin(void(*passed)(void *work), size_t worksize)
Definition: vk_init.c:1835
qboolean VKBE_LightCullModel(vec3_t org, model_t *model)
Definition: vk_backend.c:3730
void VKBE_RT_Gen_Cube(struct vk_rendertarg_cube *targ, uint32_t size, qboolean clear)
Definition: vk_backend.c:4417
void VKBE_VBO_Finish(vbobctx_t *ctx, void *edata, size_t esize, vboarray_t *earray, void **vbomem, void **ebomem)
Definition: vk_backend.c:5922
void VK_Draw_Init(void)
Definition: vk_init.c:1152
void VKBE_VBO_Begin(vbobctx_t *ctx, size_t maxsize)
Definition: vk_backend.c:5891
void VK_CreateSamplerInfo(VkSamplerCreateInfo *info, vk_image_t *img)
Definition: vk_init.c:1186
VkCommandBuffer VK_AllocFrameCBuf(void)
Definition: vk_init.c:3563
void VKBE_Shutdown(void)
Definition: vk_backend.c:1086
void VK_R_RenderView(void)
Definition: vk_init.c:2850
void VKBE_SelectMode(backendmode_t mode)
Definition: vk_backend.c:3239
qboolean VKBE_SelectDLight(dlight_t *dl, vec3_t colour, vec3_t axis[3], unsigned int lmode)
Definition: vk_backend.c:3284
void VKBE_ClearVBO(vbo_t *vbo, qboolean dataonly)
Definition: vk_backend.c:3594
void VK_R_DeInit(void)
Definition: vk_init.c:2206
qboolean VK_Init(rendererstate_t *info, const char **sysextname, qboolean(*createSurface)(void), void(*dopresent)(struct vkframe *theframe))
Definition: vk_init.c:4687
struct vulkaninfo_s vk
void VKBE_FlushDynamicBuffers(void)
Definition: vk_backend.c:987
VkFlags VkPipelineStageFlags
Definition: vulkan.h:1128
VkImageLayout
Definition: vulkan.h:612
VkFlags VkImageAspectFlags
Definition: vulkan.h:1138
VkFlags VkAccessFlags
Definition: vulkan.h:1318
uint64_t VkDeviceSize
Definition: vulkan.h:68
VkSampleCountFlagBits
Definition: vulkan.h:1067
VkFlags VkBufferUsageFlags
Definition: vulkan.h:1208
uint32_t VkFlags
Definition: vulkan.h:66
VkResult
Definition: vulkan.h:122
VkFormat
Definition: vulkan.h:362
VkPipelineStageFlagBits
Definition: vulkan.h:1107
PFN_vkVoidFunction(VKAPI_PTR * PFN_vkGetInstanceProcAddr)(VkInstance instance, const char *pName)
Definition: vulkan.h:2485