mirror of
https://github.com/yquake2/yquake2remaster.git
synced 2025-02-17 01:21:12 +00:00
Remove ref_vk, the Vulkan renderer ported from vkQuake2.
While having a Vulkan renderer in Yamagi Quake II sounded like a good idea, especially for cheap hardware with broken OpenGL drivers, the last weeks showed that the code is not ready for primetime. Some examples for critical problems: * Render glitches when using non-standard assets. Everything with more polygons and texture resultion than baseq2 seems to be broken. * The startup and shutdown code is a mess. While I fixes the most critical bug, there're a lot of cases left. Startup and shutdown mostly works by luck. * At least one memory leak in the model code. And neither @DanielGibson nor myself have deeper knowledge about Vulkan. We don't have the time and the motivation to learn it. While some community members did excellent work on ref_vk (especially @0lvin and @rg3), the community maintenance promised in the initial pull request never really materialized. Therefor we risk ending up with a renderer that we can't and won't maintain by ourself. Vulkan is not gone. The code will be recommitted in a separate repository at: https://github.com/yquake2/ref_vk We're willing to give community members commit access to that repository. Send a substantial pull request and ask for it.
This commit is contained in:
parent
76d61d9d8f
commit
8f6a085434
72 changed files with 0 additions and 19937 deletions
|
@ -1,331 +0,0 @@
|
||||||
/*
|
|
||||||
Copyright (C) 1997-2001 Id Software, Inc.
|
|
||||||
Copyright (C) 2018-2019 Krzysztof Kondrak
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or
|
|
||||||
modify it under the terms of the GNU General Public License
|
|
||||||
as published by the Free Software Foundation; either version 2
|
|
||||||
of the License, or (at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
||||||
|
|
||||||
See the GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __VK_LOCAL_H__
|
|
||||||
#define __VK_LOCAL_H__
|
|
||||||
|
|
||||||
#include <math.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#include <SDL2/SDL.h>
|
|
||||||
#include <SDL2/SDL_vulkan.h>
|
|
||||||
|
|
||||||
|
|
||||||
#include "../../ref_shared.h"
|
|
||||||
#include "../volk/volk.h"
|
|
||||||
#include "qvk.h"
|
|
||||||
|
|
||||||
// verify if VkResult is VK_SUCCESS
|
|
||||||
#define VK_VERIFY(x) { \
|
|
||||||
VkResult res = (x); \
|
|
||||||
if(res != VK_SUCCESS) { \
|
|
||||||
R_Printf(PRINT_ALL, "%s:%d: VkResult verification failed: %s\n", \
|
|
||||||
__func__, __LINE__, QVk_GetError(res)); \
|
|
||||||
} \
|
|
||||||
}
|
|
||||||
|
|
||||||
// up / down
|
|
||||||
#define PITCH 0
|
|
||||||
|
|
||||||
// left / right
|
|
||||||
#define YAW 1
|
|
||||||
|
|
||||||
// fall over
|
|
||||||
#define ROLL 2
|
|
||||||
|
|
||||||
extern viddef_t vid;
|
|
||||||
|
|
||||||
typedef struct image_s
|
|
||||||
{
|
|
||||||
char name[MAX_QPATH]; // game path, including extension
|
|
||||||
imagetype_t type;
|
|
||||||
int width, height; // source image
|
|
||||||
int upload_width, upload_height; // after power of two and picmip
|
|
||||||
int registration_sequence; // 0 = free
|
|
||||||
struct msurface_s *texturechain; // for sort-by-texture world drawing
|
|
||||||
qvktexture_t vk_texture; // Vulkan texture handle
|
|
||||||
} image_t;
|
|
||||||
|
|
||||||
#define MAX_VKTEXTURES 1024
|
|
||||||
|
|
||||||
//===================================================================
|
|
||||||
|
|
||||||
typedef enum
|
|
||||||
{
|
|
||||||
rserr_ok,
|
|
||||||
|
|
||||||
rserr_invalid_fullscreen,
|
|
||||||
rserr_invalid_mode,
|
|
||||||
|
|
||||||
rserr_unknown
|
|
||||||
} rserr_t;
|
|
||||||
|
|
||||||
#include "model.h"
|
|
||||||
|
|
||||||
#define MAX_LBM_HEIGHT 480
|
|
||||||
|
|
||||||
#define BACKFACE_EPSILON 0.01
|
|
||||||
|
|
||||||
|
|
||||||
//====================================================
|
|
||||||
|
|
||||||
extern image_t vktextures[MAX_VKTEXTURES];
|
|
||||||
extern int numvktextures;
|
|
||||||
|
|
||||||
extern image_t *r_notexture;
|
|
||||||
extern image_t *r_particletexture;
|
|
||||||
extern image_t *r_squaretexture;
|
|
||||||
extern int r_visframecount;
|
|
||||||
extern int r_framecount;
|
|
||||||
extern cplane_t frustum[4];
|
|
||||||
extern int c_brush_polys, c_alias_polys;
|
|
||||||
|
|
||||||
//
|
|
||||||
// view origin
|
|
||||||
//
|
|
||||||
extern vec3_t vup;
|
|
||||||
extern vec3_t vpn;
|
|
||||||
extern vec3_t vright;
|
|
||||||
extern vec3_t r_origin;
|
|
||||||
|
|
||||||
//
|
|
||||||
// screen size info
|
|
||||||
//
|
|
||||||
extern refdef_t r_newrefdef;
|
|
||||||
extern int r_viewcluster, r_viewcluster2, r_oldviewcluster, r_oldviewcluster2;
|
|
||||||
|
|
||||||
extern cvar_t *r_lefthand;
|
|
||||||
extern cvar_t *r_drawworld;
|
|
||||||
extern cvar_t *r_novis;
|
|
||||||
extern cvar_t *r_lerpmodels;
|
|
||||||
extern cvar_t *r_lockpvs;
|
|
||||||
extern cvar_t *r_modulate;
|
|
||||||
extern cvar_t *r_vsync;
|
|
||||||
extern cvar_t *r_clear;
|
|
||||||
extern cvar_t *r_lightlevel; // FIXME: This is a HACK to get the client's light level
|
|
||||||
extern cvar_t *r_gunfov;
|
|
||||||
extern cvar_t *r_farsee;
|
|
||||||
|
|
||||||
extern cvar_t *vk_overbrightbits;
|
|
||||||
extern cvar_t *vk_validation;
|
|
||||||
extern cvar_t *vk_picmip;
|
|
||||||
extern cvar_t *vk_skymip;
|
|
||||||
extern cvar_t *vk_flashblend;
|
|
||||||
extern cvar_t *vk_finish;
|
|
||||||
extern cvar_t *vk_shadows;
|
|
||||||
extern cvar_t *vk_dynamic;
|
|
||||||
extern cvar_t *vk_msaa;
|
|
||||||
extern cvar_t *vk_showtris;
|
|
||||||
extern cvar_t *vk_lightmap;
|
|
||||||
extern cvar_t *vk_texturemode;
|
|
||||||
extern cvar_t *vk_lmaptexturemode;
|
|
||||||
extern cvar_t *vk_aniso;
|
|
||||||
extern cvar_t *vk_sampleshading;
|
|
||||||
extern cvar_t *vk_device_idx;
|
|
||||||
extern cvar_t *vk_retexturing;
|
|
||||||
extern cvar_t *vk_nolerp_list;
|
|
||||||
extern cvar_t *vk_pixel_size;
|
|
||||||
extern cvar_t *r_fixsurfsky;
|
|
||||||
|
|
||||||
extern cvar_t *vid_fullscreen;
|
|
||||||
extern cvar_t *vid_gamma;
|
|
||||||
|
|
||||||
extern int c_visible_lightmaps;
|
|
||||||
extern int c_visible_textures;
|
|
||||||
|
|
||||||
extern float r_viewproj_matrix[16];
|
|
||||||
|
|
||||||
void R_LightPoint (vec3_t p, vec3_t color, entity_t *currententity);
|
|
||||||
void R_PushDlights (void);
|
|
||||||
|
|
||||||
//====================================================================
|
|
||||||
|
|
||||||
extern model_t *r_worldmodel;
|
|
||||||
|
|
||||||
extern unsigned d_8to24table[256];
|
|
||||||
|
|
||||||
extern int registration_sequence;
|
|
||||||
extern qvksampler_t vk_current_sampler;
|
|
||||||
extern qvksampler_t vk_current_lmap_sampler;
|
|
||||||
|
|
||||||
void RE_Shutdown( void );
|
|
||||||
|
|
||||||
void Vk_ScreenShot_f (void);
|
|
||||||
void R_DrawAliasModel (entity_t *currententity, model_t *currentmodel);
|
|
||||||
void R_DrawBrushModel (entity_t *currententity, model_t *currentmodel);
|
|
||||||
void R_DrawSpriteModel (entity_t *currententity, model_t *currentmodel);
|
|
||||||
void R_DrawBeam (entity_t *currententity);
|
|
||||||
void R_DrawWorld (void);
|
|
||||||
void R_RenderDlights (void);
|
|
||||||
void R_DrawAlphaSurfaces (void);
|
|
||||||
void RE_InitParticleTexture (void);
|
|
||||||
void Draw_InitLocal (void);
|
|
||||||
void Vk_SubdivideSurface (msurface_t *fa, model_t *loadmodel);
|
|
||||||
qboolean R_CullBox (vec3_t mins, vec3_t maxs);
|
|
||||||
void R_RotateForEntity (entity_t *e, float *mvMatrix);
|
|
||||||
void R_MarkLeaves (void);
|
|
||||||
|
|
||||||
void EmitWaterPolys (msurface_t *fa, image_t *texture,
|
|
||||||
float *modelMatrix, float *color,
|
|
||||||
qboolean solid_surface);
|
|
||||||
void R_AddSkySurface (msurface_t *fa);
|
|
||||||
void R_ClearSkyBox (void);
|
|
||||||
void R_DrawSkyBox (void);
|
|
||||||
void R_MarkLights (dlight_t *light, int bit, mnode_t *node);
|
|
||||||
|
|
||||||
struct image_s *RE_Draw_FindPic (char *name);
|
|
||||||
|
|
||||||
void RE_Draw_GetPicSize (int *w, int *h, char *name);
|
|
||||||
void RE_Draw_PicScaled (int x, int y, char *name, float scale);
|
|
||||||
void RE_Draw_StretchPic (int x, int y, int w, int h, char *name);
|
|
||||||
void RE_Draw_CharScaled (int x, int y, int num, float scale);
|
|
||||||
void RE_Draw_TileClear (int x, int y, int w, int h, char *name);
|
|
||||||
void RE_Draw_Fill (int x, int y, int w, int h, int c);
|
|
||||||
void RE_Draw_FadeScreen (void);
|
|
||||||
void RE_Draw_StretchRaw (int x, int y, int w, int h, int cols, int rows, byte *data);
|
|
||||||
|
|
||||||
qboolean RE_EndWorldRenderpass( void );
|
|
||||||
|
|
||||||
struct image_s *RE_RegisterSkin (char *name);
|
|
||||||
|
|
||||||
void LoadPCX (char *filename, byte **pic, byte **palette, int *width, int *height);
|
|
||||||
image_t *Vk_LoadPic(char *name, byte *pic, int width, int realwidth,
|
|
||||||
int height, int realheight, imagetype_t type,
|
|
||||||
int bits);
|
|
||||||
image_t *Vk_FindImage (char *name, imagetype_t type);
|
|
||||||
void Vk_TextureMode( char *string );
|
|
||||||
void Vk_LmapTextureMode( char *string );
|
|
||||||
void Vk_ImageList_f (void);
|
|
||||||
|
|
||||||
void Vk_BuildPolygonFromSurface(msurface_t *fa, model_t *currentmodel);
|
|
||||||
void Vk_CreateSurfaceLightmap (msurface_t *surf);
|
|
||||||
void Vk_EndBuildingLightmaps (void);
|
|
||||||
void Vk_BeginBuildingLightmaps (model_t *m);
|
|
||||||
|
|
||||||
void Vk_InitImages (void);
|
|
||||||
void Vk_ShutdownImages (void);
|
|
||||||
void Vk_FreeUnusedImages (void);
|
|
||||||
qboolean Vk_ImageHasFreeSpace(void);
|
|
||||||
|
|
||||||
void RE_BeginRegistration (char *model);
|
|
||||||
struct model_s *RE_RegisterModel (char *name);
|
|
||||||
struct image_s *RE_RegisterSkin (char *name);
|
|
||||||
void RE_SetSky (char *name, float rotate, vec3_t axis);
|
|
||||||
void RE_EndRegistration (void);
|
|
||||||
|
|
||||||
void Mat_Identity(float *matrix);
|
|
||||||
void Mat_Mul(float *m1, float *m2, float *res);
|
|
||||||
void Mat_Translate(float *matrix, float x, float y, float z);
|
|
||||||
void Mat_Rotate(float *matrix, float deg, float x, float y, float z);
|
|
||||||
void Mat_Scale(float *matrix, float x, float y, float z);
|
|
||||||
void Mat_Perspective(float *matrix, float *correction_matrix, float fovy, float aspect, float zNear, float zFar);
|
|
||||||
void Mat_Ortho(float *matrix, float left, float right, float bottom, float top, float zNear, float zFar);
|
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
uint32_t vk_version;
|
|
||||||
const char *vendor_name;
|
|
||||||
const char *device_type;
|
|
||||||
const char *present_mode;
|
|
||||||
const char *supported_present_modes[256];
|
|
||||||
const char *extensions[256];
|
|
||||||
const char *layers[256];
|
|
||||||
uint32_t vertex_buffer_usage;
|
|
||||||
uint32_t vertex_buffer_max_usage;
|
|
||||||
uint32_t vertex_buffer_size;
|
|
||||||
uint32_t index_buffer_usage;
|
|
||||||
uint32_t index_buffer_max_usage;
|
|
||||||
uint32_t index_buffer_size;
|
|
||||||
uint32_t uniform_buffer_usage;
|
|
||||||
uint32_t uniform_buffer_max_usage;
|
|
||||||
uint32_t uniform_buffer_size;
|
|
||||||
uint32_t triangle_index_usage;
|
|
||||||
uint32_t triangle_index_max_usage;
|
|
||||||
uint32_t triangle_index_count;
|
|
||||||
} vkconfig_t;
|
|
||||||
|
|
||||||
#define MAX_LIGHTMAPS 128
|
|
||||||
#define DYNLIGHTMAP_OFFSET MAX_LIGHTMAPS
|
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
float inverse_intensity;
|
|
||||||
qboolean fullscreen;
|
|
||||||
|
|
||||||
int prev_mode;
|
|
||||||
|
|
||||||
unsigned char *d_16to8table;
|
|
||||||
|
|
||||||
qvktexture_t lightmap_textures[MAX_LIGHTMAPS*2];
|
|
||||||
|
|
||||||
int currenttextures[2];
|
|
||||||
int currenttmu;
|
|
||||||
|
|
||||||
float camera_separation;
|
|
||||||
qboolean stereo_enabled;
|
|
||||||
|
|
||||||
VkPipeline current_pipeline;
|
|
||||||
qvkrenderpasstype_t current_renderpass;
|
|
||||||
} vkstate_t;
|
|
||||||
|
|
||||||
extern vkconfig_t vk_config;
|
|
||||||
extern vkstate_t vk_state;
|
|
||||||
|
|
||||||
/*
|
|
||||||
====================================================================
|
|
||||||
|
|
||||||
IMPORTED FUNCTIONS
|
|
||||||
|
|
||||||
====================================================================
|
|
||||||
*/
|
|
||||||
|
|
||||||
extern refimport_t ri;
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
====================================================================
|
|
||||||
|
|
||||||
IMPLEMENTATION SPECIFIC FUNCTIONS
|
|
||||||
|
|
||||||
====================================================================
|
|
||||||
*/
|
|
||||||
|
|
||||||
qboolean Vkimp_CreateSurface(SDL_Window *window);
|
|
||||||
|
|
||||||
// buffers reallocate
|
|
||||||
typedef struct {
|
|
||||||
float vertex[3];
|
|
||||||
float texCoord[2];
|
|
||||||
} polyvert_t;
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
float vertex[3];
|
|
||||||
float texCoord[2];
|
|
||||||
float texCoordLmap[2];
|
|
||||||
} lmappolyvert_t;
|
|
||||||
|
|
||||||
extern polyvert_t *verts_buffer;
|
|
||||||
extern lmappolyvert_t *lmappolyverts_buffer;
|
|
||||||
|
|
||||||
void Mesh_Init (void);
|
|
||||||
void Mesh_Free (void);
|
|
||||||
int Mesh_VertsRealloc(int count);
|
|
||||||
|
|
||||||
#endif
|
|
|
@ -1,254 +0,0 @@
|
||||||
/*
|
|
||||||
Copyright (C) 1997-2001 Id Software, Inc.
|
|
||||||
Copyright (C) 2018-2019 Krzysztof Kondrak
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or
|
|
||||||
modify it under the terms of the GNU General Public License
|
|
||||||
as published by the Free Software Foundation; either version 2
|
|
||||||
of the License, or (at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
||||||
|
|
||||||
See the GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __VK_MODEL_H__
|
|
||||||
#define __VK_MODEL_H__
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
d*_t structures are on-disk representations
|
|
||||||
m*_t structures are in-memory
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
==============================================================================
|
|
||||||
|
|
||||||
BRUSH MODELS
|
|
||||||
|
|
||||||
==============================================================================
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
//
|
|
||||||
// in memory representation
|
|
||||||
//
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
vec3_t position;
|
|
||||||
} mvertex_t;
|
|
||||||
|
|
||||||
|
|
||||||
#define SIDE_FRONT 0
|
|
||||||
#define SIDE_BACK 1
|
|
||||||
#define SIDE_ON 2
|
|
||||||
|
|
||||||
|
|
||||||
#define SURF_PLANEBACK 2
|
|
||||||
#define SURF_DRAWSKY 4
|
|
||||||
#define SURF_DRAWTURB 0x10
|
|
||||||
#define SURF_DRAWBACKGROUND 0x40
|
|
||||||
#define SURF_UNDERWATER 0x80
|
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
unsigned short v[2];
|
|
||||||
unsigned int cachededgeoffset;
|
|
||||||
} medge_t;
|
|
||||||
|
|
||||||
typedef struct mtexinfo_s
|
|
||||||
{
|
|
||||||
float vecs[2][4];
|
|
||||||
int flags;
|
|
||||||
int numframes;
|
|
||||||
struct mtexinfo_s *next; // animation chain
|
|
||||||
image_t *image;
|
|
||||||
} mtexinfo_t;
|
|
||||||
|
|
||||||
#define VERTEXSIZE 7
|
|
||||||
|
|
||||||
typedef struct vkpoly_s
|
|
||||||
{
|
|
||||||
struct vkpoly_s *next;
|
|
||||||
struct vkpoly_s *chain;
|
|
||||||
int numverts;
|
|
||||||
int flags; // for SURF_UNDERWATER (not needed anymore?)
|
|
||||||
float verts[4][VERTEXSIZE]; // variable sized (xyz s1t1 s2t2)
|
|
||||||
} vkpoly_t;
|
|
||||||
|
|
||||||
typedef struct msurface_s
|
|
||||||
{
|
|
||||||
int visframe; // should be drawn when node is crossed
|
|
||||||
|
|
||||||
cplane_t *plane;
|
|
||||||
int flags;
|
|
||||||
|
|
||||||
int firstedge; // look up in model->surfedges[], negative numbers
|
|
||||||
int numedges; // are backwards edges
|
|
||||||
|
|
||||||
short texturemins[2];
|
|
||||||
short extents[2];
|
|
||||||
|
|
||||||
int light_s, light_t; // gl lightmap coordinates
|
|
||||||
int dlight_s, dlight_t; // gl lightmap coordinates for dynamic lightmaps
|
|
||||||
|
|
||||||
vkpoly_t *polys; // multiple if warped
|
|
||||||
struct msurface_s *texturechain;
|
|
||||||
struct msurface_s *lightmapchain;
|
|
||||||
|
|
||||||
mtexinfo_t *texinfo;
|
|
||||||
|
|
||||||
// lighting info
|
|
||||||
int dlightframe;
|
|
||||||
int dlightbits;
|
|
||||||
|
|
||||||
int lightmaptexturenum;
|
|
||||||
byte styles[MAXLIGHTMAPS];
|
|
||||||
float cached_light[MAXLIGHTMAPS]; // values currently used in lightmap
|
|
||||||
byte *samples; // [numstyles*surfsize]
|
|
||||||
} msurface_t;
|
|
||||||
|
|
||||||
typedef struct mnode_s
|
|
||||||
{
|
|
||||||
// common with leaf
|
|
||||||
int contents; // -1, to differentiate from leafs
|
|
||||||
int visframe; // node needs to be traversed if current
|
|
||||||
|
|
||||||
float minmaxs[6]; // for bounding box culling
|
|
||||||
|
|
||||||
struct mnode_s *parent;
|
|
||||||
|
|
||||||
// node specific
|
|
||||||
cplane_t *plane;
|
|
||||||
struct mnode_s *children[2];
|
|
||||||
|
|
||||||
unsigned short firstsurface;
|
|
||||||
unsigned short numsurfaces;
|
|
||||||
} mnode_t;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
typedef struct mleaf_s
|
|
||||||
{
|
|
||||||
// common with node
|
|
||||||
int contents; // wil be a negative contents number
|
|
||||||
int visframe; // node needs to be traversed if current
|
|
||||||
|
|
||||||
float minmaxs[6]; // for bounding box culling
|
|
||||||
|
|
||||||
struct mnode_s *parent;
|
|
||||||
|
|
||||||
// leaf specific
|
|
||||||
int cluster;
|
|
||||||
int area;
|
|
||||||
|
|
||||||
msurface_t **firstmarksurface;
|
|
||||||
int nummarksurfaces;
|
|
||||||
} mleaf_t;
|
|
||||||
|
|
||||||
|
|
||||||
//===================================================================
|
|
||||||
|
|
||||||
//
|
|
||||||
// Whole model
|
|
||||||
//
|
|
||||||
|
|
||||||
typedef struct model_s
|
|
||||||
{
|
|
||||||
char name[MAX_QPATH];
|
|
||||||
|
|
||||||
int registration_sequence;
|
|
||||||
|
|
||||||
modtype_t type;
|
|
||||||
int numframes;
|
|
||||||
|
|
||||||
int flags;
|
|
||||||
|
|
||||||
//
|
|
||||||
// volume occupied by the model graphics
|
|
||||||
//
|
|
||||||
vec3_t mins, maxs;
|
|
||||||
float radius;
|
|
||||||
|
|
||||||
//
|
|
||||||
// solid volume for clipping
|
|
||||||
//
|
|
||||||
qboolean clipbox;
|
|
||||||
vec3_t clipmins, clipmaxs;
|
|
||||||
|
|
||||||
//
|
|
||||||
// brush model
|
|
||||||
//
|
|
||||||
int firstmodelsurface, nummodelsurfaces;
|
|
||||||
int lightmap; // only for submodels
|
|
||||||
|
|
||||||
int numsubmodels;
|
|
||||||
struct model_s *submodels;
|
|
||||||
|
|
||||||
int numplanes;
|
|
||||||
cplane_t *planes;
|
|
||||||
|
|
||||||
int numleafs; // number of visible leafs, not counting 0
|
|
||||||
mleaf_t *leafs;
|
|
||||||
|
|
||||||
int numvertexes;
|
|
||||||
mvertex_t *vertexes;
|
|
||||||
|
|
||||||
int numedges;
|
|
||||||
medge_t *edges;
|
|
||||||
|
|
||||||
int numnodes;
|
|
||||||
int firstnode;
|
|
||||||
mnode_t *nodes;
|
|
||||||
|
|
||||||
int numtexinfo;
|
|
||||||
mtexinfo_t *texinfo;
|
|
||||||
|
|
||||||
int numsurfaces;
|
|
||||||
msurface_t *surfaces;
|
|
||||||
|
|
||||||
int numsurfedges;
|
|
||||||
int *surfedges;
|
|
||||||
|
|
||||||
int nummarksurfaces;
|
|
||||||
msurface_t **marksurfaces;
|
|
||||||
|
|
||||||
dvis_t *vis;
|
|
||||||
|
|
||||||
byte *lightdata;
|
|
||||||
|
|
||||||
// for alias models and skins
|
|
||||||
image_t *skins[MAX_MD2SKINS];
|
|
||||||
|
|
||||||
int extradatasize;
|
|
||||||
void *extradata;
|
|
||||||
|
|
||||||
// submodules
|
|
||||||
vec3_t origin; // for sounds or lights
|
|
||||||
} model_t;
|
|
||||||
|
|
||||||
//============================================================================
|
|
||||||
|
|
||||||
void Mod_Init (void);
|
|
||||||
mleaf_t *Mod_PointInLeaf (float *p, model_t *model);
|
|
||||||
byte *Mod_ClusterPVS (int cluster, model_t *model);
|
|
||||||
|
|
||||||
void Mod_Modellist_f (void);
|
|
||||||
|
|
||||||
void *Hunk_Begin (int maxsize);
|
|
||||||
void *Hunk_Alloc (int size);
|
|
||||||
int Hunk_End (void);
|
|
||||||
void Hunk_Free (void *base);
|
|
||||||
|
|
||||||
void Mod_FreeAll (void);
|
|
||||||
void Mod_FreeModelsKnown (void);
|
|
||||||
|
|
||||||
#endif
|
|
|
@ -1,326 +0,0 @@
|
||||||
/*
|
|
||||||
Copyright (C) 1997-2001 Id Software, Inc.
|
|
||||||
Copyright (C) 2018-2019 Krzysztof Kondrak
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or
|
|
||||||
modify it under the terms of the GNU General Public License
|
|
||||||
as published by the Free Software Foundation; either version 2
|
|
||||||
of the License, or (at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
||||||
|
|
||||||
See the GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
||||||
|
|
||||||
*/
|
|
||||||
/*
|
|
||||||
** QVK.H
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __QVK_H__
|
|
||||||
#define __QVK_H__
|
|
||||||
|
|
||||||
#ifdef _WIN32
|
|
||||||
# include <windows.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "local.h"
|
|
||||||
#include "util.h"
|
|
||||||
#include "shaders.h"
|
|
||||||
|
|
||||||
// Vulkan device
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
VkPhysicalDevice physical;
|
|
||||||
VkDevice logical;
|
|
||||||
VkPhysicalDeviceMemoryProperties mem_properties;
|
|
||||||
VkPhysicalDeviceProperties properties;
|
|
||||||
VkPhysicalDeviceFeatures features;
|
|
||||||
VkQueue gfxQueue;
|
|
||||||
VkQueue presentQueue;
|
|
||||||
VkQueue transferQueue;
|
|
||||||
int gfxFamilyIndex;
|
|
||||||
int presentFamilyIndex;
|
|
||||||
int transferFamilyIndex;
|
|
||||||
qboolean screenshotSupported;
|
|
||||||
} qvkdevice_t;
|
|
||||||
|
|
||||||
// Vulkan swapchain
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
VkSwapchainKHR sc;
|
|
||||||
VkFormat format;
|
|
||||||
VkPresentModeKHR presentMode;
|
|
||||||
VkExtent2D extent;
|
|
||||||
VkImage *images;
|
|
||||||
int imageCount;
|
|
||||||
} qvkswapchain_t;
|
|
||||||
|
|
||||||
// available sampler types
|
|
||||||
typedef enum
|
|
||||||
{
|
|
||||||
S_NEAREST = 0,
|
|
||||||
S_LINEAR = 1,
|
|
||||||
S_MIPMAP_NEAREST = 2,
|
|
||||||
S_MIPMAP_LINEAR = 3,
|
|
||||||
S_NEAREST_UNNORMALIZED = 4,
|
|
||||||
S_SAMPLER_CNT = 5
|
|
||||||
} qvksampler_t;
|
|
||||||
|
|
||||||
#define NUM_SAMPLERS (S_SAMPLER_CNT * 2)
|
|
||||||
|
|
||||||
// texture object
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
ImageResource_t resource;
|
|
||||||
|
|
||||||
VkImageView imageView;
|
|
||||||
VkSharingMode sharingMode;
|
|
||||||
VkSampleCountFlagBits sampleCount;
|
|
||||||
VkFormat format;
|
|
||||||
VkDescriptorSet descriptorSet;
|
|
||||||
uint32_t mipLevels;
|
|
||||||
qboolean clampToEdge;
|
|
||||||
} qvktexture_t;
|
|
||||||
|
|
||||||
#define QVVKTEXTURE_INIT { \
|
|
||||||
.resource = { \
|
|
||||||
.image = VK_NULL_HANDLE, \
|
|
||||||
.memory = VK_NULL_HANDLE, \
|
|
||||||
.size = 0, \
|
|
||||||
}, \
|
|
||||||
.imageView = VK_NULL_HANDLE, \
|
|
||||||
.sharingMode = VK_SHARING_MODE_MAX_ENUM, \
|
|
||||||
.sampleCount = VK_SAMPLE_COUNT_1_BIT, \
|
|
||||||
.format = VK_FORMAT_R8G8B8A8_UNORM, \
|
|
||||||
.descriptorSet = VK_NULL_HANDLE, \
|
|
||||||
.mipLevels = 1, \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define QVVKTEXTURE_CLEAR(i) { \
|
|
||||||
(i).resource.image = VK_NULL_HANDLE; \
|
|
||||||
(i).resource.memory = VK_NULL_HANDLE; \
|
|
||||||
(i).resource.size = 0; \
|
|
||||||
(i).imageView = VK_NULL_HANDLE; \
|
|
||||||
(i).sharingMode = VK_SHARING_MODE_MAX_ENUM; \
|
|
||||||
(i).sampleCount = VK_SAMPLE_COUNT_1_BIT; \
|
|
||||||
(i).format = VK_FORMAT_R8G8B8A8_UNORM; \
|
|
||||||
(i).mipLevels = 1; \
|
|
||||||
}
|
|
||||||
|
|
||||||
// Vulkan renderpass
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
VkRenderPass rp;
|
|
||||||
VkAttachmentLoadOp colorLoadOp;
|
|
||||||
VkSampleCountFlagBits sampleCount;
|
|
||||||
} qvkrenderpass_t;
|
|
||||||
|
|
||||||
// Vulkan buffer
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
VkDeviceSize currentOffset;
|
|
||||||
|
|
||||||
BufferResource_t resource;
|
|
||||||
void *pMappedData;
|
|
||||||
} qvkbuffer_t;
|
|
||||||
|
|
||||||
// Vulkan staging buffer
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
VkDeviceSize currentOffset;
|
|
||||||
VkCommandBuffer cmdBuffer;
|
|
||||||
VkFence fence;
|
|
||||||
qboolean submitted;
|
|
||||||
|
|
||||||
BufferResource_t resource;
|
|
||||||
void *pMappedData;
|
|
||||||
} qvkstagingbuffer_t;
|
|
||||||
|
|
||||||
// Vulkan buffer options
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
VkBufferUsageFlags usage;
|
|
||||||
VkMemoryPropertyFlags reqMemFlags;
|
|
||||||
VkMemoryPropertyFlags prefMemFlags;
|
|
||||||
} qvkbufferopts_t;
|
|
||||||
|
|
||||||
// Vulkan pipeline
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
VkPipelineLayout layout;
|
|
||||||
VkPipeline pl;
|
|
||||||
VkPipelineCreateFlags flags;
|
|
||||||
VkCullModeFlags cullMode;
|
|
||||||
VkPrimitiveTopology topology;
|
|
||||||
VkPipelineColorBlendAttachmentState blendOpts;
|
|
||||||
VkBool32 depthTestEnable;
|
|
||||||
VkBool32 depthWriteEnable;
|
|
||||||
} qvkpipeline_t;
|
|
||||||
|
|
||||||
// Vulkan shader
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
VkPipelineShaderStageCreateInfo createInfo;
|
|
||||||
VkShaderModule module;
|
|
||||||
} qvkshader_t;
|
|
||||||
|
|
||||||
#define QVKPIPELINE_INIT { \
|
|
||||||
.layout = VK_NULL_HANDLE, \
|
|
||||||
.pl = VK_NULL_HANDLE, \
|
|
||||||
.flags = 0, \
|
|
||||||
.cullMode = VK_CULL_MODE_BACK_BIT, \
|
|
||||||
.topology = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST, \
|
|
||||||
.blendOpts = { \
|
|
||||||
.blendEnable = VK_FALSE, \
|
|
||||||
.srcColorBlendFactor = VK_BLEND_FACTOR_SRC_ALPHA, \
|
|
||||||
.dstColorBlendFactor = VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA, \
|
|
||||||
.colorBlendOp = VK_BLEND_OP_ADD, \
|
|
||||||
.srcAlphaBlendFactor = VK_BLEND_FACTOR_SRC_ALPHA, \
|
|
||||||
.dstAlphaBlendFactor = VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA, \
|
|
||||||
.alphaBlendOp = VK_BLEND_OP_ADD, \
|
|
||||||
.colorWriteMask = VK_COLOR_COMPONENT_R_BIT | VK_COLOR_COMPONENT_G_BIT | VK_COLOR_COMPONENT_B_BIT | VK_COLOR_COMPONENT_A_BIT \
|
|
||||||
}, \
|
|
||||||
.depthTestEnable = VK_TRUE, \
|
|
||||||
.depthWriteEnable = VK_TRUE \
|
|
||||||
}
|
|
||||||
|
|
||||||
// renderpass type
|
|
||||||
typedef enum
|
|
||||||
{
|
|
||||||
RP_WORLD = 0, // renders game world to offscreen buffer
|
|
||||||
RP_UI = 1, // render UI elements and game console
|
|
||||||
RP_WORLD_WARP = 2, // perform postprocessing on RP_WORLD (underwater screen warp)
|
|
||||||
RP_COUNT = 3
|
|
||||||
} qvkrenderpasstype_t;
|
|
||||||
|
|
||||||
// Vulkan constants: command and dynamic buffer count
|
|
||||||
#define NUM_CMDBUFFERS 2
|
|
||||||
#define NUM_DYNBUFFERS 2
|
|
||||||
|
|
||||||
// Vulkan instance
|
|
||||||
extern VkInstance vk_instance;
|
|
||||||
// Vulkan surface
|
|
||||||
extern VkSurfaceKHR vk_surface;
|
|
||||||
// Vulkan device
|
|
||||||
extern qvkdevice_t vk_device;
|
|
||||||
// Vulkan swapchain
|
|
||||||
extern qvkswapchain_t vk_swapchain;
|
|
||||||
// Vulkan command buffer currently in use
|
|
||||||
extern VkCommandBuffer vk_activeCmdbuffer;
|
|
||||||
// Vulkan command pools
|
|
||||||
extern VkCommandPool vk_commandPool[NUM_CMDBUFFERS];
|
|
||||||
extern VkCommandPool vk_transferCommandPool;
|
|
||||||
// Vulkan descriptor pool
|
|
||||||
extern VkDescriptorPool vk_descriptorPool;
|
|
||||||
// viewport/scissor
|
|
||||||
extern VkViewport vk_viewport;
|
|
||||||
extern VkRect2D vk_scissor;
|
|
||||||
|
|
||||||
// Vulkan descriptor sets
|
|
||||||
extern VkDescriptorSetLayout vk_samplerDescSetLayout;
|
|
||||||
|
|
||||||
// *** pipelines ***
|
|
||||||
extern qvkpipeline_t vk_drawTexQuadPipeline[RP_COUNT];
|
|
||||||
extern qvkpipeline_t vk_drawColorQuadPipeline[RP_COUNT];
|
|
||||||
extern qvkpipeline_t vk_drawModelPipelineFan[RP_COUNT];
|
|
||||||
extern qvkpipeline_t vk_drawNoDepthModelPipelineFan;
|
|
||||||
extern qvkpipeline_t vk_drawLefthandModelPipelineFan;
|
|
||||||
extern qvkpipeline_t vk_drawNullModelPipeline;
|
|
||||||
extern qvkpipeline_t vk_drawParticlesPipeline;
|
|
||||||
extern qvkpipeline_t vk_drawPointParticlesPipeline;
|
|
||||||
extern qvkpipeline_t vk_drawSpritePipeline;
|
|
||||||
extern qvkpipeline_t vk_drawPolyPipeline;
|
|
||||||
extern qvkpipeline_t vk_drawPolyLmapPipeline;
|
|
||||||
extern qvkpipeline_t vk_drawPolyWarpPipeline;
|
|
||||||
extern qvkpipeline_t vk_drawPolySolidWarpPipeline;
|
|
||||||
extern qvkpipeline_t vk_drawBeamPipeline;
|
|
||||||
extern qvkpipeline_t vk_drawSkyboxPipeline;
|
|
||||||
extern qvkpipeline_t vk_drawDLightPipeline;
|
|
||||||
extern qvkpipeline_t vk_showTrisPipeline;
|
|
||||||
extern qvkpipeline_t vk_shadowsPipelineFan;
|
|
||||||
extern qvkpipeline_t vk_worldWarpPipeline;
|
|
||||||
extern qvkpipeline_t vk_postprocessPipeline;
|
|
||||||
|
|
||||||
// color buffer containing main game/world view
|
|
||||||
extern qvktexture_t vk_colorbuffer;
|
|
||||||
// color buffer with postprocessed game view
|
|
||||||
extern qvktexture_t vk_colorbufferWarp;
|
|
||||||
// indicator if the frame is currently being rendered
|
|
||||||
extern qboolean vk_frameStarted;
|
|
||||||
// Indicates if the renderer needs to be restarted.
|
|
||||||
extern qboolean vk_restartNeeded;
|
|
||||||
// is QVk initialized?
|
|
||||||
extern qboolean vk_initialized;
|
|
||||||
|
|
||||||
// function pointers
|
|
||||||
extern PFN_vkCreateDebugUtilsMessengerEXT qvkCreateDebugUtilsMessengerEXT;
|
|
||||||
extern PFN_vkDestroyDebugUtilsMessengerEXT qvkDestroyDebugUtilsMessengerEXT;
|
|
||||||
extern PFN_vkSetDebugUtilsObjectNameEXT qvkSetDebugUtilsObjectNameEXT;
|
|
||||||
extern PFN_vkSetDebugUtilsObjectTagEXT qvkSetDebugUtilsObjectTagEXT;
|
|
||||||
extern PFN_vkCmdBeginDebugUtilsLabelEXT qvkCmdBeginDebugUtilsLabelEXT;
|
|
||||||
extern PFN_vkCmdEndDebugUtilsLabelEXT qvkCmdEndDebugUtilsLabelEXT;
|
|
||||||
extern PFN_vkCmdInsertDebugUtilsLabelEXT qvkInsertDebugUtilsLabelEXT;
|
|
||||||
|
|
||||||
// The Interface Functions (tm)
|
|
||||||
void QVk_SetWindow(SDL_Window*);
|
|
||||||
qboolean QVk_Init(void);
|
|
||||||
void QVk_PostInit(void);
|
|
||||||
void QVk_WaitAndShutdownAll(void);
|
|
||||||
void QVk_Shutdown(void);
|
|
||||||
void QVk_Restart(void);
|
|
||||||
void QVk_CreateValidationLayers(void);
|
|
||||||
void QVk_DestroyValidationLayers(void);
|
|
||||||
qboolean QVk_CreateDevice(int preferredDeviceIdx);
|
|
||||||
VkResult QVk_CreateSwapchain(void);
|
|
||||||
VkFormat QVk_FindDepthFormat(void);
|
|
||||||
VkResult QVk_CreateCommandPool(VkCommandPool *commandPool, uint32_t queueFamilyIndex);
|
|
||||||
VkResult QVk_CreateImageView(const VkImage *image, VkImageAspectFlags aspectFlags, VkImageView *imageView, VkFormat format, uint32_t mipLevels);
|
|
||||||
VkResult QVk_CreateImage(uint32_t width, uint32_t height, VkFormat format, VkImageTiling tiling, VkImageUsageFlags usage, qvktexture_t *texture);
|
|
||||||
void QVk_CreateDepthBuffer(VkSampleCountFlagBits sampleCount, qvktexture_t *depthBuffer);
|
|
||||||
void QVk_CreateColorBuffer(VkSampleCountFlagBits sampleCount, qvktexture_t *colorBuffer, int extraFlags);
|
|
||||||
void QVk_CreateTexture(qvktexture_t *texture, const unsigned char *data, uint32_t width, uint32_t height, qvksampler_t samplerType, qboolean clampToEdge);
|
|
||||||
void QVk_UpdateTextureData(qvktexture_t *texture, const unsigned char *data, uint32_t offset_x, uint32_t offset_y, uint32_t width, uint32_t height);
|
|
||||||
VkSampler QVk_UpdateTextureSampler(qvktexture_t *texture, qvksampler_t samplerType, qboolean clampToEdge);
|
|
||||||
void QVk_ReadPixels(uint8_t *dstBuffer, const VkOffset2D *offset, const VkExtent2D *extent);
|
|
||||||
VkResult QVk_BeginCommand(const VkCommandBuffer *commandBuffer);
|
|
||||||
void QVk_SubmitCommand(const VkCommandBuffer *commandBuffer, const VkQueue *queue);
|
|
||||||
VkCommandBuffer QVk_CreateCommandBuffer(const VkCommandPool *commandPool, VkCommandBufferLevel level);
|
|
||||||
const char* QVk_GetError(VkResult errorCode);
|
|
||||||
VkResult QVk_BeginFrame(const VkViewport* viewport, const VkRect2D* scissor);
|
|
||||||
VkResult QVk_EndFrame(qboolean force);
|
|
||||||
void QVk_BeginRenderpass(qvkrenderpasstype_t rpType);
|
|
||||||
void QVk_FreeStagingBuffer(qvkstagingbuffer_t *buffer);
|
|
||||||
VkResult QVk_CreateBuffer(VkDeviceSize size, qvkbuffer_t *dstBuffer, const qvkbufferopts_t options);
|
|
||||||
void QVk_FreeBuffer(qvkbuffer_t *buffer);
|
|
||||||
VkResult QVk_CreateStagingBuffer(VkDeviceSize size, qvkstagingbuffer_t *dstBuffer, VkMemoryPropertyFlags reqMemFlags, VkMemoryPropertyFlags prefMemFlags);
|
|
||||||
VkResult QVk_CreateUniformBuffer(VkDeviceSize size, qvkbuffer_t *dstBuffer, VkMemoryPropertyFlags reqMemFlags, VkMemoryPropertyFlags prefMemFlags);
|
|
||||||
void QVk_CreateVertexBuffer(const void *data, VkDeviceSize size, qvkbuffer_t *dstBuffer, VkMemoryPropertyFlags reqMemFlags, VkMemoryPropertyFlags prefMemFlags);
|
|
||||||
void QVk_CreateIndexBuffer(const void *data, VkDeviceSize size, qvkbuffer_t *dstBuffer, VkMemoryPropertyFlags reqMemFlags, VkMemoryPropertyFlags prefMemFlags);
|
|
||||||
qvkshader_t QVk_CreateShader(const uint32_t *shaderSrc, size_t shaderCodeSize, VkShaderStageFlagBits shaderStage);
|
|
||||||
void QVk_CreatePipeline(const VkDescriptorSetLayout *descriptorLayout, const uint32_t descLayoutCount, const VkPipelineVertexInputStateCreateInfo *vertexInputInfo, qvkpipeline_t *pipeline, const qvkrenderpass_t *renderpass, const qvkshader_t *shaders, uint32_t shaderCount);
|
|
||||||
void QVk_DestroyPipeline(qvkpipeline_t *pipeline);
|
|
||||||
uint8_t* QVk_GetVertexBuffer(VkDeviceSize size, VkBuffer *dstBuffer, VkDeviceSize *dstOffset);
|
|
||||||
uint8_t* QVk_GetUniformBuffer(VkDeviceSize size, uint32_t *dstOffset, VkDescriptorSet *dstUboDescriptorSet);
|
|
||||||
uint8_t* QVk_GetStagingBuffer(VkDeviceSize size, int alignment, VkCommandBuffer *cmdBuffer, VkBuffer *buffer, uint32_t *dstOffset);
|
|
||||||
VkBuffer QVk_GetTriangleFanIbo(VkDeviceSize indexCount);
|
|
||||||
VkBuffer QVk_GetTriangleStripIbo(VkDeviceSize indexCount);
|
|
||||||
void QVk_DrawColorRect(float *ubo, VkDeviceSize uboSize, qvkrenderpasstype_t rpType);
|
|
||||||
void QVk_DrawTexRect(const float *ubo, VkDeviceSize uboSize, qvktexture_t *texture);
|
|
||||||
void QVk_BindPipeline(qvkpipeline_t *pipeline);
|
|
||||||
void QVk_SubmitStagingBuffers(void);
|
|
||||||
void Qvk_MemoryBarrier(VkCommandBuffer cmdBuffer, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, VkAccessFlags srcAccessMask, VkAccessFlags dstAccessMask);
|
|
||||||
qboolean QVk_CheckExtent(void);
|
|
||||||
|
|
||||||
// debug label related functions
|
|
||||||
void QVk_DebugSetObjectName(uint64_t obj, VkObjectType objType, const char *objName);
|
|
||||||
void QVk_DebugSetObjectTag(uint64_t obj, VkObjectType objType, uint64_t tagName, size_t tagSize, const void *tagData);
|
|
||||||
void QVk_DebugLabelBegin(const VkCommandBuffer *cmdBuffer, const char *labelName, const float r, const float g, const float b);
|
|
||||||
void QVk_DebugLabelEnd(const VkCommandBuffer *cmdBuffer);
|
|
||||||
void QVk_DebugLabelInsert(const VkCommandBuffer *cmdBuffer, const char *labelName, const float r, const float g, const float b);
|
|
||||||
#endif
|
|
|
@ -1,115 +0,0 @@
|
||||||
/*
|
|
||||||
Copyright (C) 2018-2019 Krzysztof Kondrak
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or
|
|
||||||
modify it under the terms of the GNU General Public License
|
|
||||||
as published by the Free Software Foundation; either version 2
|
|
||||||
of the License, or (at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
||||||
|
|
||||||
See the GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
//
|
|
||||||
// game shaders, compiled offline
|
|
||||||
//
|
|
||||||
|
|
||||||
#ifndef __VK_SHADERS_H__
|
|
||||||
#define __VK_SHADERS_H__
|
|
||||||
#include <stdint.h>
|
|
||||||
#include <stddef.h>
|
|
||||||
|
|
||||||
// textured quad (alpha)
|
|
||||||
extern const uint32_t basic_vert_spv[];
|
|
||||||
extern const size_t basic_vert_size;
|
|
||||||
|
|
||||||
extern const uint32_t basic_frag_spv[];
|
|
||||||
extern const size_t basic_frag_size;
|
|
||||||
|
|
||||||
// colored quad (alpha)
|
|
||||||
extern const uint32_t basic_color_quad_vert_spv[];
|
|
||||||
extern const size_t basic_color_quad_vert_size;
|
|
||||||
|
|
||||||
extern const uint32_t basic_color_quad_frag_spv[];
|
|
||||||
extern const size_t basic_color_quad_frag_size;
|
|
||||||
|
|
||||||
// textured model
|
|
||||||
extern const uint32_t model_vert_spv[];
|
|
||||||
extern const size_t model_vert_size;
|
|
||||||
|
|
||||||
extern const uint32_t model_frag_spv[];
|
|
||||||
extern const size_t model_frag_size;
|
|
||||||
|
|
||||||
// null model
|
|
||||||
extern const uint32_t nullmodel_vert_spv[];
|
|
||||||
extern const size_t nullmodel_vert_size;
|
|
||||||
|
|
||||||
// particle (texture)
|
|
||||||
extern const uint32_t particle_vert_spv[];
|
|
||||||
extern const size_t particle_vert_size;
|
|
||||||
|
|
||||||
// particle (point)
|
|
||||||
extern const uint32_t point_particle_vert_spv[];
|
|
||||||
extern const size_t point_particle_vert_size;
|
|
||||||
|
|
||||||
extern const uint32_t point_particle_frag_spv[];
|
|
||||||
extern const size_t point_particle_frag_size;
|
|
||||||
|
|
||||||
// sprite model
|
|
||||||
extern const uint32_t sprite_vert_spv[];
|
|
||||||
extern const size_t sprite_vert_size;
|
|
||||||
|
|
||||||
// beam
|
|
||||||
extern const uint32_t beam_vert_spv[];
|
|
||||||
extern const size_t beam_vert_size;
|
|
||||||
|
|
||||||
// skybox
|
|
||||||
extern const uint32_t skybox_vert_spv[];
|
|
||||||
extern const size_t skybox_vert_size;
|
|
||||||
|
|
||||||
// dynamic lights
|
|
||||||
extern const uint32_t d_light_vert_spv[];
|
|
||||||
extern const size_t d_light_vert_size;
|
|
||||||
|
|
||||||
// textured, alpha blended polygon
|
|
||||||
extern const uint32_t polygon_vert_spv[];
|
|
||||||
extern const size_t polygon_vert_size;
|
|
||||||
|
|
||||||
// textured, lightmapped polygon
|
|
||||||
extern const uint32_t polygon_lmap_vert_spv[];
|
|
||||||
extern const size_t polygon_lmap_vert_size;
|
|
||||||
|
|
||||||
extern const uint32_t polygon_lmap_frag_spv[];
|
|
||||||
extern const size_t polygon_lmap_frag_size;
|
|
||||||
|
|
||||||
// warped polygon (liquids)
|
|
||||||
extern const uint32_t polygon_warp_vert_spv[];
|
|
||||||
extern const size_t polygon_warp_vert_size;
|
|
||||||
|
|
||||||
// entity shadows
|
|
||||||
extern const uint32_t shadows_vert_spv[];
|
|
||||||
extern const size_t shadows_vert_size;
|
|
||||||
|
|
||||||
// postprocess
|
|
||||||
extern const uint32_t postprocess_vert_spv[];
|
|
||||||
extern const size_t postprocess_vert_size;
|
|
||||||
|
|
||||||
extern const uint32_t postprocess_frag_spv[];
|
|
||||||
extern const size_t postprocess_frag_size;
|
|
||||||
|
|
||||||
// underwater vision warp
|
|
||||||
extern const uint32_t world_warp_vert_spv[];
|
|
||||||
extern const size_t world_warp_vert_size;
|
|
||||||
|
|
||||||
extern const uint32_t world_warp_frag_spv[];
|
|
||||||
extern const size_t world_warp_frag_size;
|
|
||||||
|
|
||||||
#endif
|
|
|
@ -1,71 +0,0 @@
|
||||||
/*
|
|
||||||
Copyright (C) 2018 Christoph Schied
|
|
||||||
Copyright (C) 2020 Denis Pauk
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __VK_UTIL_H__
|
|
||||||
#define __VK_UTIL_H__
|
|
||||||
|
|
||||||
#include "../volk/volk.h"
|
|
||||||
|
|
||||||
#define ROUNDUP(a, b) (((a) + ((b)-1)) & ~((b)-1))
|
|
||||||
|
|
||||||
typedef struct BufferResource_s {
|
|
||||||
VkBuffer buffer;
|
|
||||||
// shared memory used for buffer
|
|
||||||
VkDeviceMemory memory;
|
|
||||||
// image size
|
|
||||||
VkDeviceSize size;
|
|
||||||
// posision in shared memory
|
|
||||||
VkDeviceSize offset;
|
|
||||||
// is mapped?
|
|
||||||
VkBool32 is_mapped;
|
|
||||||
} BufferResource_t;
|
|
||||||
|
|
||||||
typedef struct ImageResource_s {
|
|
||||||
VkImage image;
|
|
||||||
// shared memory used for image
|
|
||||||
VkDeviceMemory memory;
|
|
||||||
// image size
|
|
||||||
VkDeviceSize size;
|
|
||||||
// posision in shared memory
|
|
||||||
VkDeviceSize offset;
|
|
||||||
} ImageResource_t;
|
|
||||||
|
|
||||||
VkResult buffer_create(BufferResource_t *buf,
|
|
||||||
VkBufferCreateInfo buf_create_info,
|
|
||||||
VkMemoryPropertyFlags mem_properties,
|
|
||||||
VkMemoryPropertyFlags mem_preferences);
|
|
||||||
|
|
||||||
VkResult buffer_destroy(BufferResource_t *buf);
|
|
||||||
void buffer_unmap(BufferResource_t *buf);
|
|
||||||
void *buffer_map(BufferResource_t *buf);
|
|
||||||
VkResult buffer_flush(BufferResource_t *buf);
|
|
||||||
VkResult buffer_invalidate(BufferResource_t *buf);
|
|
||||||
|
|
||||||
VkResult image_create(ImageResource_t *img,
|
|
||||||
VkImageCreateInfo img_create_info,
|
|
||||||
VkMemoryPropertyFlags mem_properties,
|
|
||||||
VkMemoryPropertyFlags mem_preferences);
|
|
||||||
VkResult image_destroy(ImageResource_t *img);
|
|
||||||
|
|
||||||
void vulkan_memory_init(void);
|
|
||||||
void vulkan_memory_types_show(void);
|
|
||||||
void vulkan_memory_free_unused(void);
|
|
||||||
void vulkan_memory_delete(void);
|
|
||||||
|
|
||||||
#endif /*__VK_UTIL_H__*/
|
|
|
@ -1,16 +0,0 @@
|
||||||
// 8.13.3559
|
|
||||||
#pragma once
|
|
||||||
const uint32_t basic_color_quad_frag_spv[] = {
|
|
||||||
0x07230203,0x00010000,0x00080008,0x0000000d,0x00000000,0x00020011,0x00000001,0x0006000b,
|
|
||||||
0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001,
|
|
||||||
0x0007000f,0x00000004,0x00000004,0x6e69616d,0x00000000,0x00000009,0x0000000b,0x00030010,
|
|
||||||
0x00000004,0x00000007,0x00030003,0x00000002,0x000001c2,0x00040005,0x00000004,0x6e69616d,
|
|
||||||
0x00000000,0x00060005,0x00000009,0x67617266,0x746e656d,0x6f6c6f43,0x00000072,0x00040005,
|
|
||||||
0x0000000b,0x6f6c6f63,0x00000072,0x00040047,0x00000009,0x0000001e,0x00000000,0x00040047,
|
|
||||||
0x0000000b,0x0000001e,0x00000000,0x00020013,0x00000002,0x00030021,0x00000003,0x00000002,
|
|
||||||
0x00030016,0x00000006,0x00000020,0x00040017,0x00000007,0x00000006,0x00000004,0x00040020,
|
|
||||||
0x00000008,0x00000003,0x00000007,0x0004003b,0x00000008,0x00000009,0x00000003,0x00040020,
|
|
||||||
0x0000000a,0x00000001,0x00000007,0x0004003b,0x0000000a,0x0000000b,0x00000001,0x00050036,
|
|
||||||
0x00000002,0x00000004,0x00000000,0x00000003,0x000200f8,0x00000005,0x0004003d,0x00000007,
|
|
||||||
0x0000000c,0x0000000b,0x0003003e,0x00000009,0x0000000c,0x000100fd,0x00010038
|
|
||||||
};
|
|
|
@ -1,48 +0,0 @@
|
||||||
// 8.13.3559
|
|
||||||
#pragma once
|
|
||||||
const uint32_t basic_color_quad_vert_spv[] = {
|
|
||||||
0x07230203,0x00010000,0x00080008,0x00000032,0x00000000,0x00020011,0x00000001,0x0006000b,
|
|
||||||
0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001,
|
|
||||||
0x0008000f,0x00000000,0x00000004,0x6e69616d,0x00000000,0x0000000b,0x0000001f,0x0000002d,
|
|
||||||
0x00030003,0x00000002,0x000001c2,0x00090004,0x415f4c47,0x735f4252,0x72617065,0x5f657461,
|
|
||||||
0x64616873,0x6f5f7265,0x63656a62,0x00007374,0x00040005,0x00000004,0x6e69616d,0x00000000,
|
|
||||||
0x00040005,0x00000009,0x736f5076,0x00000000,0x00050005,0x0000000b,0x65566e69,0x78657472,
|
|
||||||
0x00000000,0x00060005,0x0000000e,0x67616d69,0x61725465,0x6f66736e,0x00006d72,0x00050006,
|
|
||||||
0x0000000e,0x00000000,0x7366666f,0x00007465,0x00050006,0x0000000e,0x00000001,0x6c616373,
|
|
||||||
0x00000065,0x00050006,0x0000000e,0x00000002,0x6f6c6f63,0x00000072,0x00030005,0x00000010,
|
|
||||||
0x00007469,0x00060005,0x0000001d,0x505f6c67,0x65567265,0x78657472,0x00000000,0x00060006,
|
|
||||||
0x0000001d,0x00000000,0x505f6c67,0x7469736f,0x006e6f69,0x00030005,0x0000001f,0x00000000,
|
|
||||||
0x00040005,0x0000002d,0x6f6c6f63,0x00000072,0x00040047,0x0000000b,0x0000001e,0x00000000,
|
|
||||||
0x00050048,0x0000000e,0x00000000,0x00000023,0x00000000,0x00050048,0x0000000e,0x00000001,
|
|
||||||
0x00000023,0x00000008,0x00050048,0x0000000e,0x00000002,0x00000023,0x00000010,0x00030047,
|
|
||||||
0x0000000e,0x00000002,0x00040047,0x00000010,0x00000022,0x00000000,0x00040047,0x00000010,
|
|
||||||
0x00000021,0x00000000,0x00050048,0x0000001d,0x00000000,0x0000000b,0x00000000,0x00030047,
|
|
||||||
0x0000001d,0x00000002,0x00040047,0x0000002d,0x0000001e,0x00000000,0x00020013,0x00000002,
|
|
||||||
0x00030021,0x00000003,0x00000002,0x00030016,0x00000006,0x00000020,0x00040017,0x00000007,
|
|
||||||
0x00000006,0x00000002,0x00040020,0x00000008,0x00000007,0x00000007,0x00040020,0x0000000a,
|
|
||||||
0x00000001,0x00000007,0x0004003b,0x0000000a,0x0000000b,0x00000001,0x00040017,0x0000000d,
|
|
||||||
0x00000006,0x00000004,0x0005001e,0x0000000e,0x00000007,0x00000007,0x0000000d,0x00040020,
|
|
||||||
0x0000000f,0x00000002,0x0000000e,0x0004003b,0x0000000f,0x00000010,0x00000002,0x00040015,
|
|
||||||
0x00000011,0x00000020,0x00000001,0x0004002b,0x00000011,0x00000012,0x00000001,0x00040020,
|
|
||||||
0x00000013,0x00000002,0x00000007,0x0004002b,0x00000006,0x00000017,0x3f800000,0x0005002c,
|
|
||||||
0x00000007,0x00000018,0x00000017,0x00000017,0x0003001e,0x0000001d,0x0000000d,0x00040020,
|
|
||||||
0x0000001e,0x00000003,0x0000001d,0x0004003b,0x0000001e,0x0000001f,0x00000003,0x0004002b,
|
|
||||||
0x00000011,0x00000020,0x00000000,0x0004002b,0x00000006,0x00000024,0x40000000,0x0004002b,
|
|
||||||
0x00000006,0x00000027,0x00000000,0x00040020,0x0000002b,0x00000003,0x0000000d,0x0004003b,
|
|
||||||
0x0000002b,0x0000002d,0x00000003,0x0004002b,0x00000011,0x0000002e,0x00000002,0x00040020,
|
|
||||||
0x0000002f,0x00000002,0x0000000d,0x00050036,0x00000002,0x00000004,0x00000000,0x00000003,
|
|
||||||
0x000200f8,0x00000005,0x0004003b,0x00000008,0x00000009,0x00000007,0x0004003d,0x00000007,
|
|
||||||
0x0000000c,0x0000000b,0x00050041,0x00000013,0x00000014,0x00000010,0x00000012,0x0004003d,
|
|
||||||
0x00000007,0x00000015,0x00000014,0x00050085,0x00000007,0x00000016,0x0000000c,0x00000015,
|
|
||||||
0x00050041,0x00000013,0x00000019,0x00000010,0x00000012,0x0004003d,0x00000007,0x0000001a,
|
|
||||||
0x00000019,0x00050083,0x00000007,0x0000001b,0x00000018,0x0000001a,0x00050083,0x00000007,
|
|
||||||
0x0000001c,0x00000016,0x0000001b,0x0003003e,0x00000009,0x0000001c,0x0004003d,0x00000007,
|
|
||||||
0x00000021,0x00000009,0x00050041,0x00000013,0x00000022,0x00000010,0x00000020,0x0004003d,
|
|
||||||
0x00000007,0x00000023,0x00000022,0x0005008e,0x00000007,0x00000025,0x00000023,0x00000024,
|
|
||||||
0x00050081,0x00000007,0x00000026,0x00000021,0x00000025,0x00050051,0x00000006,0x00000028,
|
|
||||||
0x00000026,0x00000000,0x00050051,0x00000006,0x00000029,0x00000026,0x00000001,0x00070050,
|
|
||||||
0x0000000d,0x0000002a,0x00000028,0x00000029,0x00000027,0x00000017,0x00050041,0x0000002b,
|
|
||||||
0x0000002c,0x0000001f,0x00000020,0x0003003e,0x0000002c,0x0000002a,0x00050041,0x0000002f,
|
|
||||||
0x00000030,0x00000010,0x0000002e,0x0004003d,0x0000000d,0x00000031,0x00000030,0x0003003e,
|
|
||||||
0x0000002d,0x00000031,0x000100fd,0x00010038
|
|
||||||
};
|
|
|
@ -1,48 +0,0 @@
|
||||||
// 8.13.3559
|
|
||||||
#pragma once
|
|
||||||
const uint32_t basic_frag_spv[] = {
|
|
||||||
0x07230203,0x00010000,0x00080008,0x00000038,0x00000000,0x00020011,0x00000001,0x0006000b,
|
|
||||||
0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001,
|
|
||||||
0x0009000f,0x00000004,0x00000004,0x6e69616d,0x00000000,0x00000009,0x00000011,0x00000015,
|
|
||||||
0x0000001e,0x00030010,0x00000004,0x00000007,0x00030003,0x00000002,0x000001c2,0x00040005,
|
|
||||||
0x00000004,0x6e69616d,0x00000000,0x00060005,0x00000009,0x67617266,0x746e656d,0x6f6c6f43,
|
|
||||||
0x00000072,0x00050005,0x0000000d,0x78655473,0x65727574,0x00000000,0x00050005,0x00000011,
|
|
||||||
0x43786574,0x64726f6f,0x00000000,0x00040005,0x00000015,0x6f6c6f63,0x00000072,0x00050005,
|
|
||||||
0x0000001e,0x65725461,0x6c6f6873,0x00000064,0x00060005,0x00000028,0x68737550,0x736e6f43,
|
|
||||||
0x746e6174,0x00000000,0x00050006,0x00000028,0x00000000,0x6d6d6167,0x00000061,0x00030005,
|
|
||||||
0x0000002a,0x00006370,0x00040047,0x00000009,0x0000001e,0x00000000,0x00040047,0x0000000d,
|
|
||||||
0x00000022,0x00000000,0x00040047,0x0000000d,0x00000021,0x00000000,0x00040047,0x00000011,
|
|
||||||
0x0000001e,0x00000000,0x00040047,0x00000015,0x0000001e,0x00000001,0x00040047,0x0000001e,
|
|
||||||
0x0000001e,0x00000002,0x00050048,0x00000028,0x00000000,0x00000023,0x00000044,0x00030047,
|
|
||||||
0x00000028,0x00000002,0x00020013,0x00000002,0x00030021,0x00000003,0x00000002,0x00030016,
|
|
||||||
0x00000006,0x00000020,0x00040017,0x00000007,0x00000006,0x00000004,0x00040020,0x00000008,
|
|
||||||
0x00000003,0x00000007,0x0004003b,0x00000008,0x00000009,0x00000003,0x00090019,0x0000000a,
|
|
||||||
0x00000006,0x00000001,0x00000000,0x00000000,0x00000000,0x00000001,0x00000000,0x0003001b,
|
|
||||||
0x0000000b,0x0000000a,0x00040020,0x0000000c,0x00000000,0x0000000b,0x0004003b,0x0000000c,
|
|
||||||
0x0000000d,0x00000000,0x00040017,0x0000000f,0x00000006,0x00000002,0x00040020,0x00000010,
|
|
||||||
0x00000001,0x0000000f,0x0004003b,0x00000010,0x00000011,0x00000001,0x00040020,0x00000014,
|
|
||||||
0x00000001,0x00000007,0x0004003b,0x00000014,0x00000015,0x00000001,0x00040015,0x00000018,
|
|
||||||
0x00000020,0x00000000,0x0004002b,0x00000018,0x00000019,0x00000003,0x00040020,0x0000001a,
|
|
||||||
0x00000003,0x00000006,0x00040020,0x0000001d,0x00000001,0x00000006,0x0004003b,0x0000001d,
|
|
||||||
0x0000001e,0x00000001,0x00020014,0x00000020,0x00040017,0x00000025,0x00000006,0x00000003,
|
|
||||||
0x0003001e,0x00000028,0x00000006,0x00040020,0x00000029,0x00000009,0x00000028,0x0004003b,
|
|
||||||
0x00000029,0x0000002a,0x00000009,0x00040015,0x0000002b,0x00000020,0x00000001,0x0004002b,
|
|
||||||
0x0000002b,0x0000002c,0x00000000,0x00040020,0x0000002d,0x00000009,0x00000006,0x00050036,
|
|
||||||
0x00000002,0x00000004,0x00000000,0x00000003,0x000200f8,0x00000005,0x0004003d,0x0000000b,
|
|
||||||
0x0000000e,0x0000000d,0x0004003d,0x0000000f,0x00000012,0x00000011,0x00050057,0x00000007,
|
|
||||||
0x00000013,0x0000000e,0x00000012,0x0004003d,0x00000007,0x00000016,0x00000015,0x00050085,
|
|
||||||
0x00000007,0x00000017,0x00000013,0x00000016,0x0003003e,0x00000009,0x00000017,0x00050041,
|
|
||||||
0x0000001a,0x0000001b,0x00000009,0x00000019,0x0004003d,0x00000006,0x0000001c,0x0000001b,
|
|
||||||
0x0004003d,0x00000006,0x0000001f,0x0000001e,0x000500b8,0x00000020,0x00000021,0x0000001c,
|
|
||||||
0x0000001f,0x000300f7,0x00000023,0x00000000,0x000400fa,0x00000021,0x00000022,0x00000023,
|
|
||||||
0x000200f8,0x00000022,0x000100fc,0x000200f8,0x00000023,0x0004003d,0x00000007,0x00000026,
|
|
||||||
0x00000009,0x0008004f,0x00000025,0x00000027,0x00000026,0x00000026,0x00000000,0x00000001,
|
|
||||||
0x00000002,0x00050041,0x0000002d,0x0000002e,0x0000002a,0x0000002c,0x0004003d,0x00000006,
|
|
||||||
0x0000002f,0x0000002e,0x00060050,0x00000025,0x00000030,0x0000002f,0x0000002f,0x0000002f,
|
|
||||||
0x0007000c,0x00000025,0x00000031,0x00000001,0x0000001a,0x00000027,0x00000030,0x00050041,
|
|
||||||
0x0000001a,0x00000032,0x00000009,0x00000019,0x0004003d,0x00000006,0x00000033,0x00000032,
|
|
||||||
0x00050051,0x00000006,0x00000034,0x00000031,0x00000000,0x00050051,0x00000006,0x00000035,
|
|
||||||
0x00000031,0x00000001,0x00050051,0x00000006,0x00000036,0x00000031,0x00000002,0x00070050,
|
|
||||||
0x00000007,0x00000037,0x00000034,0x00000035,0x00000036,0x00000033,0x0003003e,0x00000009,
|
|
||||||
0x00000037,0x000100fd,0x00010038
|
|
||||||
};
|
|
|
@ -1,61 +0,0 @@
|
||||||
// 8.13.3559
|
|
||||||
#pragma once
|
|
||||||
const uint32_t basic_vert_spv[] = {
|
|
||||||
0x07230203,0x00010000,0x00080008,0x0000003e,0x00000000,0x00020011,0x00000001,0x0006000b,
|
|
||||||
0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001,
|
|
||||||
0x000b000f,0x00000000,0x00000004,0x6e69616d,0x00000000,0x0000000b,0x0000001f,0x0000002e,
|
|
||||||
0x0000002f,0x00000039,0x0000003c,0x00030003,0x00000002,0x000001c2,0x00090004,0x415f4c47,
|
|
||||||
0x735f4252,0x72617065,0x5f657461,0x64616873,0x6f5f7265,0x63656a62,0x00007374,0x00040005,
|
|
||||||
0x00000004,0x6e69616d,0x00000000,0x00040005,0x00000009,0x736f5076,0x00000000,0x00050005,
|
|
||||||
0x0000000b,0x65566e69,0x78657472,0x00000000,0x00060005,0x0000000d,0x67616d69,0x61725465,
|
|
||||||
0x6f66736e,0x00006d72,0x00050006,0x0000000d,0x00000000,0x7366666f,0x00007465,0x00050006,
|
|
||||||
0x0000000d,0x00000001,0x6c616373,0x00000065,0x00060006,0x0000000d,0x00000002,0x664f7675,
|
|
||||||
0x74657366,0x00000000,0x00050006,0x0000000d,0x00000003,0x63537675,0x00656c61,0x00030005,
|
|
||||||
0x0000000f,0x00007469,0x00060005,0x0000001d,0x505f6c67,0x65567265,0x78657472,0x00000000,
|
|
||||||
0x00060006,0x0000001d,0x00000000,0x505f6c67,0x7469736f,0x006e6f69,0x00030005,0x0000001f,
|
|
||||||
0x00000000,0x00050005,0x0000002e,0x43786574,0x64726f6f,0x00000000,0x00050005,0x0000002f,
|
|
||||||
0x65546e69,0x6f6f4378,0x00006472,0x00040005,0x00000039,0x6f6c6f63,0x00000072,0x00050005,
|
|
||||||
0x0000003c,0x65725461,0x6c6f6873,0x00000064,0x00040047,0x0000000b,0x0000001e,0x00000000,
|
|
||||||
0x00050048,0x0000000d,0x00000000,0x00000023,0x00000000,0x00050048,0x0000000d,0x00000001,
|
|
||||||
0x00000023,0x00000008,0x00050048,0x0000000d,0x00000002,0x00000023,0x00000010,0x00050048,
|
|
||||||
0x0000000d,0x00000003,0x00000023,0x00000018,0x00030047,0x0000000d,0x00000002,0x00040047,
|
|
||||||
0x0000000f,0x00000022,0x00000001,0x00040047,0x0000000f,0x00000021,0x00000000,0x00050048,
|
|
||||||
0x0000001d,0x00000000,0x0000000b,0x00000000,0x00030047,0x0000001d,0x00000002,0x00040047,
|
|
||||||
0x0000002e,0x0000001e,0x00000000,0x00040047,0x0000002f,0x0000001e,0x00000001,0x00040047,
|
|
||||||
0x00000039,0x0000001e,0x00000001,0x00040047,0x0000003c,0x0000001e,0x00000002,0x00020013,
|
|
||||||
0x00000002,0x00030021,0x00000003,0x00000002,0x00030016,0x00000006,0x00000020,0x00040017,
|
|
||||||
0x00000007,0x00000006,0x00000002,0x00040020,0x00000008,0x00000007,0x00000007,0x00040020,
|
|
||||||
0x0000000a,0x00000001,0x00000007,0x0004003b,0x0000000a,0x0000000b,0x00000001,0x0006001e,
|
|
||||||
0x0000000d,0x00000007,0x00000007,0x00000007,0x00000007,0x00040020,0x0000000e,0x00000002,
|
|
||||||
0x0000000d,0x0004003b,0x0000000e,0x0000000f,0x00000002,0x00040015,0x00000010,0x00000020,
|
|
||||||
0x00000001,0x0004002b,0x00000010,0x00000011,0x00000001,0x00040020,0x00000012,0x00000002,
|
|
||||||
0x00000007,0x0004002b,0x00000006,0x00000016,0x3f800000,0x0005002c,0x00000007,0x00000017,
|
|
||||||
0x00000016,0x00000016,0x00040017,0x0000001c,0x00000006,0x00000004,0x0003001e,0x0000001d,
|
|
||||||
0x0000001c,0x00040020,0x0000001e,0x00000003,0x0000001d,0x0004003b,0x0000001e,0x0000001f,
|
|
||||||
0x00000003,0x0004002b,0x00000010,0x00000020,0x00000000,0x0004002b,0x00000006,0x00000024,
|
|
||||||
0x40000000,0x0004002b,0x00000006,0x00000027,0x00000000,0x00040020,0x0000002b,0x00000003,
|
|
||||||
0x0000001c,0x00040020,0x0000002d,0x00000003,0x00000007,0x0004003b,0x0000002d,0x0000002e,
|
|
||||||
0x00000003,0x0004003b,0x0000000a,0x0000002f,0x00000001,0x0004002b,0x00000010,0x00000031,
|
|
||||||
0x00000003,0x0004002b,0x00000010,0x00000035,0x00000002,0x0004003b,0x0000002b,0x00000039,
|
|
||||||
0x00000003,0x0007002c,0x0000001c,0x0000003a,0x00000016,0x00000016,0x00000016,0x00000016,
|
|
||||||
0x00040020,0x0000003b,0x00000003,0x00000006,0x0004003b,0x0000003b,0x0000003c,0x00000003,
|
|
||||||
0x0004002b,0x00000006,0x0000003d,0x3f2a7efa,0x00050036,0x00000002,0x00000004,0x00000000,
|
|
||||||
0x00000003,0x000200f8,0x00000005,0x0004003b,0x00000008,0x00000009,0x00000007,0x0004003d,
|
|
||||||
0x00000007,0x0000000c,0x0000000b,0x00050041,0x00000012,0x00000013,0x0000000f,0x00000011,
|
|
||||||
0x0004003d,0x00000007,0x00000014,0x00000013,0x00050085,0x00000007,0x00000015,0x0000000c,
|
|
||||||
0x00000014,0x00050041,0x00000012,0x00000018,0x0000000f,0x00000011,0x0004003d,0x00000007,
|
|
||||||
0x00000019,0x00000018,0x00050083,0x00000007,0x0000001a,0x00000017,0x00000019,0x00050083,
|
|
||||||
0x00000007,0x0000001b,0x00000015,0x0000001a,0x0003003e,0x00000009,0x0000001b,0x0004003d,
|
|
||||||
0x00000007,0x00000021,0x00000009,0x00050041,0x00000012,0x00000022,0x0000000f,0x00000020,
|
|
||||||
0x0004003d,0x00000007,0x00000023,0x00000022,0x0005008e,0x00000007,0x00000025,0x00000023,
|
|
||||||
0x00000024,0x00050081,0x00000007,0x00000026,0x00000021,0x00000025,0x00050051,0x00000006,
|
|
||||||
0x00000028,0x00000026,0x00000000,0x00050051,0x00000006,0x00000029,0x00000026,0x00000001,
|
|
||||||
0x00070050,0x0000001c,0x0000002a,0x00000028,0x00000029,0x00000027,0x00000016,0x00050041,
|
|
||||||
0x0000002b,0x0000002c,0x0000001f,0x00000020,0x0003003e,0x0000002c,0x0000002a,0x0004003d,
|
|
||||||
0x00000007,0x00000030,0x0000002f,0x00050041,0x00000012,0x00000032,0x0000000f,0x00000031,
|
|
||||||
0x0004003d,0x00000007,0x00000033,0x00000032,0x00050085,0x00000007,0x00000034,0x00000030,
|
|
||||||
0x00000033,0x00050041,0x00000012,0x00000036,0x0000000f,0x00000035,0x0004003d,0x00000007,
|
|
||||||
0x00000037,0x00000036,0x00050081,0x00000007,0x00000038,0x00000034,0x00000037,0x0003003e,
|
|
||||||
0x0000002e,0x00000038,0x0003003e,0x00000039,0x0000003a,0x0003003e,0x0000003c,0x0000003d,
|
|
||||||
0x000100fd,0x00010038
|
|
||||||
};
|
|
|
@ -1,42 +0,0 @@
|
||||||
// 8.13.3559
|
|
||||||
#pragma once
|
|
||||||
const uint32_t beam_vert_spv[] = {
|
|
||||||
0x07230203,0x00010000,0x00080008,0x00000027,0x00000000,0x00020011,0x00000001,0x0006000b,
|
|
||||||
0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001,
|
|
||||||
0x0008000f,0x00000000,0x00000004,0x6e69616d,0x00000000,0x0000000a,0x00000016,0x00000020,
|
|
||||||
0x00030003,0x00000002,0x000001c2,0x00090004,0x415f4c47,0x735f4252,0x72617065,0x5f657461,
|
|
||||||
0x64616873,0x6f5f7265,0x63656a62,0x00007374,0x00040005,0x00000004,0x6e69616d,0x00000000,
|
|
||||||
0x00060005,0x00000008,0x505f6c67,0x65567265,0x78657472,0x00000000,0x00060006,0x00000008,
|
|
||||||
0x00000000,0x505f6c67,0x7469736f,0x006e6f69,0x00030005,0x0000000a,0x00000000,0x00060005,
|
|
||||||
0x0000000e,0x68737550,0x736e6f43,0x746e6174,0x00000000,0x00060006,0x0000000e,0x00000000,
|
|
||||||
0x4d70766d,0x69727461,0x00000078,0x00030005,0x00000010,0x00006370,0x00050005,0x00000016,
|
|
||||||
0x65566e69,0x78657472,0x00000000,0x00040005,0x00000020,0x6f6c6f63,0x00000072,0x00070005,
|
|
||||||
0x00000021,0x66696e55,0x426d726f,0x65666675,0x6a624f72,0x00746365,0x00050006,0x00000021,
|
|
||||||
0x00000000,0x6f6c6f63,0x00000072,0x00030005,0x00000023,0x006f6275,0x00050048,0x00000008,
|
|
||||||
0x00000000,0x0000000b,0x00000000,0x00030047,0x00000008,0x00000002,0x00040048,0x0000000e,
|
|
||||||
0x00000000,0x00000005,0x00050048,0x0000000e,0x00000000,0x00000023,0x00000000,0x00050048,
|
|
||||||
0x0000000e,0x00000000,0x00000007,0x00000010,0x00030047,0x0000000e,0x00000002,0x00040047,
|
|
||||||
0x00000016,0x0000001e,0x00000000,0x00040047,0x00000020,0x0000001e,0x00000000,0x00050048,
|
|
||||||
0x00000021,0x00000000,0x00000023,0x00000000,0x00030047,0x00000021,0x00000002,0x00040047,
|
|
||||||
0x00000023,0x00000022,0x00000000,0x00040047,0x00000023,0x00000021,0x00000000,0x00020013,
|
|
||||||
0x00000002,0x00030021,0x00000003,0x00000002,0x00030016,0x00000006,0x00000020,0x00040017,
|
|
||||||
0x00000007,0x00000006,0x00000004,0x0003001e,0x00000008,0x00000007,0x00040020,0x00000009,
|
|
||||||
0x00000003,0x00000008,0x0004003b,0x00000009,0x0000000a,0x00000003,0x00040015,0x0000000b,
|
|
||||||
0x00000020,0x00000001,0x0004002b,0x0000000b,0x0000000c,0x00000000,0x00040018,0x0000000d,
|
|
||||||
0x00000007,0x00000004,0x0003001e,0x0000000e,0x0000000d,0x00040020,0x0000000f,0x00000009,
|
|
||||||
0x0000000e,0x0004003b,0x0000000f,0x00000010,0x00000009,0x00040020,0x00000011,0x00000009,
|
|
||||||
0x0000000d,0x00040017,0x00000014,0x00000006,0x00000003,0x00040020,0x00000015,0x00000001,
|
|
||||||
0x00000014,0x0004003b,0x00000015,0x00000016,0x00000001,0x0004002b,0x00000006,0x00000018,
|
|
||||||
0x3f800000,0x00040020,0x0000001e,0x00000003,0x00000007,0x0004003b,0x0000001e,0x00000020,
|
|
||||||
0x00000003,0x0003001e,0x00000021,0x00000007,0x00040020,0x00000022,0x00000002,0x00000021,
|
|
||||||
0x0004003b,0x00000022,0x00000023,0x00000002,0x00040020,0x00000024,0x00000002,0x00000007,
|
|
||||||
0x00050036,0x00000002,0x00000004,0x00000000,0x00000003,0x000200f8,0x00000005,0x00050041,
|
|
||||||
0x00000011,0x00000012,0x00000010,0x0000000c,0x0004003d,0x0000000d,0x00000013,0x00000012,
|
|
||||||
0x0004003d,0x00000014,0x00000017,0x00000016,0x00050051,0x00000006,0x00000019,0x00000017,
|
|
||||||
0x00000000,0x00050051,0x00000006,0x0000001a,0x00000017,0x00000001,0x00050051,0x00000006,
|
|
||||||
0x0000001b,0x00000017,0x00000002,0x00070050,0x00000007,0x0000001c,0x00000019,0x0000001a,
|
|
||||||
0x0000001b,0x00000018,0x00050091,0x00000007,0x0000001d,0x00000013,0x0000001c,0x00050041,
|
|
||||||
0x0000001e,0x0000001f,0x0000000a,0x0000000c,0x0003003e,0x0000001f,0x0000001d,0x00050041,
|
|
||||||
0x00000024,0x00000025,0x00000023,0x0000000c,0x0004003d,0x00000007,0x00000026,0x00000025,
|
|
||||||
0x0003003e,0x00000020,0x00000026,0x000100fd,0x00010038
|
|
||||||
};
|
|
|
@ -1,41 +0,0 @@
|
||||||
// 8.13.3559
|
|
||||||
#pragma once
|
|
||||||
const uint32_t d_light_vert_spv[] = {
|
|
||||||
0x07230203,0x00010000,0x00080008,0x00000027,0x00000000,0x00020011,0x00000001,0x0006000b,
|
|
||||||
0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001,
|
|
||||||
0x0009000f,0x00000000,0x00000004,0x6e69616d,0x00000000,0x0000000a,0x00000016,0x00000020,
|
|
||||||
0x00000021,0x00030003,0x00000002,0x000001c2,0x00090004,0x415f4c47,0x735f4252,0x72617065,
|
|
||||||
0x5f657461,0x64616873,0x6f5f7265,0x63656a62,0x00007374,0x00040005,0x00000004,0x6e69616d,
|
|
||||||
0x00000000,0x00060005,0x00000008,0x505f6c67,0x65567265,0x78657472,0x00000000,0x00060006,
|
|
||||||
0x00000008,0x00000000,0x505f6c67,0x7469736f,0x006e6f69,0x00030005,0x0000000a,0x00000000,
|
|
||||||
0x00070005,0x0000000e,0x66696e55,0x426d726f,0x65666675,0x6a624f72,0x00746365,0x00060006,
|
|
||||||
0x0000000e,0x00000000,0x4d70766d,0x69727461,0x00000078,0x00030005,0x00000010,0x006f6275,
|
|
||||||
0x00050005,0x00000016,0x65566e69,0x78657472,0x00000000,0x00040005,0x00000020,0x6f6c6f63,
|
|
||||||
0x00000072,0x00040005,0x00000021,0x6f436e69,0x00726f6c,0x00050048,0x00000008,0x00000000,
|
|
||||||
0x0000000b,0x00000000,0x00030047,0x00000008,0x00000002,0x00040048,0x0000000e,0x00000000,
|
|
||||||
0x00000005,0x00050048,0x0000000e,0x00000000,0x00000023,0x00000000,0x00050048,0x0000000e,
|
|
||||||
0x00000000,0x00000007,0x00000010,0x00030047,0x0000000e,0x00000002,0x00040047,0x00000010,
|
|
||||||
0x00000022,0x00000000,0x00040047,0x00000010,0x00000021,0x00000000,0x00040047,0x00000016,
|
|
||||||
0x0000001e,0x00000000,0x00040047,0x00000020,0x0000001e,0x00000000,0x00040047,0x00000021,
|
|
||||||
0x0000001e,0x00000001,0x00020013,0x00000002,0x00030021,0x00000003,0x00000002,0x00030016,
|
|
||||||
0x00000006,0x00000020,0x00040017,0x00000007,0x00000006,0x00000004,0x0003001e,0x00000008,
|
|
||||||
0x00000007,0x00040020,0x00000009,0x00000003,0x00000008,0x0004003b,0x00000009,0x0000000a,
|
|
||||||
0x00000003,0x00040015,0x0000000b,0x00000020,0x00000001,0x0004002b,0x0000000b,0x0000000c,
|
|
||||||
0x00000000,0x00040018,0x0000000d,0x00000007,0x00000004,0x0003001e,0x0000000e,0x0000000d,
|
|
||||||
0x00040020,0x0000000f,0x00000002,0x0000000e,0x0004003b,0x0000000f,0x00000010,0x00000002,
|
|
||||||
0x00040020,0x00000011,0x00000002,0x0000000d,0x00040017,0x00000014,0x00000006,0x00000003,
|
|
||||||
0x00040020,0x00000015,0x00000001,0x00000014,0x0004003b,0x00000015,0x00000016,0x00000001,
|
|
||||||
0x0004002b,0x00000006,0x00000018,0x3f800000,0x00040020,0x0000001e,0x00000003,0x00000007,
|
|
||||||
0x0004003b,0x0000001e,0x00000020,0x00000003,0x0004003b,0x00000015,0x00000021,0x00000001,
|
|
||||||
0x00050036,0x00000002,0x00000004,0x00000000,0x00000003,0x000200f8,0x00000005,0x00050041,
|
|
||||||
0x00000011,0x00000012,0x00000010,0x0000000c,0x0004003d,0x0000000d,0x00000013,0x00000012,
|
|
||||||
0x0004003d,0x00000014,0x00000017,0x00000016,0x00050051,0x00000006,0x00000019,0x00000017,
|
|
||||||
0x00000000,0x00050051,0x00000006,0x0000001a,0x00000017,0x00000001,0x00050051,0x00000006,
|
|
||||||
0x0000001b,0x00000017,0x00000002,0x00070050,0x00000007,0x0000001c,0x00000019,0x0000001a,
|
|
||||||
0x0000001b,0x00000018,0x00050091,0x00000007,0x0000001d,0x00000013,0x0000001c,0x00050041,
|
|
||||||
0x0000001e,0x0000001f,0x0000000a,0x0000000c,0x0003003e,0x0000001f,0x0000001d,0x0004003d,
|
|
||||||
0x00000014,0x00000022,0x00000021,0x00050051,0x00000006,0x00000023,0x00000022,0x00000000,
|
|
||||||
0x00050051,0x00000006,0x00000024,0x00000022,0x00000001,0x00050051,0x00000006,0x00000025,
|
|
||||||
0x00000022,0x00000002,0x00070050,0x00000007,0x00000026,0x00000023,0x00000024,0x00000025,
|
|
||||||
0x00000018,0x0003003e,0x00000020,0x00000026,0x000100fd,0x00010038
|
|
||||||
};
|
|
|
@ -1,37 +0,0 @@
|
||||||
// 8.13.3559
|
|
||||||
#pragma once
|
|
||||||
const uint32_t model_frag_spv[] = {
|
|
||||||
0x07230203,0x00010000,0x00080008,0x00000028,0x00000000,0x00020011,0x00000001,0x0006000b,
|
|
||||||
0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001,
|
|
||||||
0x0009000f,0x00000004,0x00000004,0x6e69616d,0x00000000,0x00000008,0x00000012,0x0000001a,
|
|
||||||
0x0000001e,0x00030010,0x00000004,0x00000007,0x00030003,0x00000002,0x000001c2,0x00040005,
|
|
||||||
0x00000004,0x6e69616d,0x00000000,0x00050005,0x00000008,0x74786574,0x64657275,0x00000000,
|
|
||||||
0x00060005,0x00000012,0x67617266,0x746e656d,0x6f6c6f43,0x00000072,0x00050005,0x00000016,
|
|
||||||
0x78655473,0x65727574,0x00000000,0x00050005,0x0000001a,0x43786574,0x64726f6f,0x00000000,
|
|
||||||
0x00040005,0x0000001e,0x6f6c6f63,0x00000072,0x00030047,0x00000008,0x0000000e,0x00040047,
|
|
||||||
0x00000008,0x0000001e,0x00000002,0x00040047,0x00000012,0x0000001e,0x00000000,0x00040047,
|
|
||||||
0x00000016,0x00000022,0x00000000,0x00040047,0x00000016,0x00000021,0x00000000,0x00040047,
|
|
||||||
0x0000001a,0x0000001e,0x00000001,0x00040047,0x0000001e,0x0000001e,0x00000000,0x00020013,
|
|
||||||
0x00000002,0x00030021,0x00000003,0x00000002,0x00040015,0x00000006,0x00000020,0x00000001,
|
|
||||||
0x00040020,0x00000007,0x00000001,0x00000006,0x0004003b,0x00000007,0x00000008,0x00000001,
|
|
||||||
0x0004002b,0x00000006,0x0000000a,0x00000000,0x00020014,0x0000000b,0x00030016,0x0000000f,
|
|
||||||
0x00000020,0x00040017,0x00000010,0x0000000f,0x00000004,0x00040020,0x00000011,0x00000003,
|
|
||||||
0x00000010,0x0004003b,0x00000011,0x00000012,0x00000003,0x00090019,0x00000013,0x0000000f,
|
|
||||||
0x00000001,0x00000000,0x00000000,0x00000000,0x00000001,0x00000000,0x0003001b,0x00000014,
|
|
||||||
0x00000013,0x00040020,0x00000015,0x00000000,0x00000014,0x0004003b,0x00000015,0x00000016,
|
|
||||||
0x00000000,0x00040017,0x00000018,0x0000000f,0x00000002,0x00040020,0x00000019,0x00000001,
|
|
||||||
0x00000018,0x0004003b,0x00000019,0x0000001a,0x00000001,0x00040020,0x0000001d,0x00000001,
|
|
||||||
0x00000010,0x0004003b,0x0000001d,0x0000001e,0x00000001,0x0004002b,0x0000000f,0x00000020,
|
|
||||||
0x00000000,0x0004002b,0x0000000f,0x00000021,0x3f800000,0x00050036,0x00000002,0x00000004,
|
|
||||||
0x00000000,0x00000003,0x000200f8,0x00000005,0x0004003d,0x00000006,0x00000009,0x00000008,
|
|
||||||
0x000500ab,0x0000000b,0x0000000c,0x00000009,0x0000000a,0x000300f7,0x0000000e,0x00000000,
|
|
||||||
0x000400fa,0x0000000c,0x0000000d,0x00000026,0x000200f8,0x0000000d,0x0004003d,0x00000014,
|
|
||||||
0x00000017,0x00000016,0x0004003d,0x00000018,0x0000001b,0x0000001a,0x00050057,0x00000010,
|
|
||||||
0x0000001c,0x00000017,0x0000001b,0x0004003d,0x00000010,0x0000001f,0x0000001e,0x00070050,
|
|
||||||
0x00000010,0x00000022,0x00000020,0x00000020,0x00000020,0x00000020,0x00070050,0x00000010,
|
|
||||||
0x00000023,0x00000021,0x00000021,0x00000021,0x00000021,0x0008000c,0x00000010,0x00000024,
|
|
||||||
0x00000001,0x0000002b,0x0000001f,0x00000022,0x00000023,0x00050085,0x00000010,0x00000025,
|
|
||||||
0x0000001c,0x00000024,0x0003003e,0x00000012,0x00000025,0x000200f9,0x0000000e,0x000200f8,
|
|
||||||
0x00000026,0x0004003d,0x00000010,0x00000027,0x0000001e,0x0003003e,0x00000012,0x00000027,
|
|
||||||
0x000200f9,0x0000000e,0x000200f8,0x0000000e,0x000100fd,0x00010038
|
|
||||||
};
|
|
|
@ -1,59 +0,0 @@
|
||||||
// 8.13.3559
|
|
||||||
#pragma once
|
|
||||||
const uint32_t model_vert_spv[] = {
|
|
||||||
0x07230203,0x00010000,0x00080008,0x00000037,0x00000000,0x00020011,0x00000001,0x0006000b,
|
|
||||||
0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001,
|
|
||||||
0x000c000f,0x00000000,0x00000004,0x6e69616d,0x00000000,0x0000000a,0x0000001d,0x00000027,
|
|
||||||
0x00000029,0x0000002d,0x0000002f,0x00000032,0x00030003,0x00000002,0x000001c2,0x00090004,
|
|
||||||
0x415f4c47,0x735f4252,0x72617065,0x5f657461,0x64616873,0x6f5f7265,0x63656a62,0x00007374,
|
|
||||||
0x00040005,0x00000004,0x6e69616d,0x00000000,0x00060005,0x00000008,0x505f6c67,0x65567265,
|
|
||||||
0x78657472,0x00000000,0x00060006,0x00000008,0x00000000,0x505f6c67,0x7469736f,0x006e6f69,
|
|
||||||
0x00030005,0x0000000a,0x00000000,0x00060005,0x0000000e,0x68737550,0x736e6f43,0x746e6174,
|
|
||||||
0x00000000,0x00060006,0x0000000e,0x00000000,0x614d7076,0x78697274,0x00000000,0x00030005,
|
|
||||||
0x00000010,0x00006370,0x00070005,0x00000014,0x66696e55,0x426d726f,0x65666675,0x6a624f72,
|
|
||||||
0x00746365,0x00050006,0x00000014,0x00000000,0x65646f6d,0x0000006c,0x00060006,0x00000014,
|
|
||||||
0x00000001,0x74786574,0x64657275,0x00000000,0x00030005,0x00000016,0x006f6275,0x00050005,
|
|
||||||
0x0000001d,0x65566e69,0x78657472,0x00000000,0x00040005,0x00000027,0x6f6c6f63,0x00000072,
|
|
||||||
0x00040005,0x00000029,0x6f436e69,0x00726f6c,0x00050005,0x0000002d,0x43786574,0x64726f6f,
|
|
||||||
0x00000000,0x00050005,0x0000002f,0x65546e69,0x6f6f4378,0x00006472,0x00050005,0x00000032,
|
|
||||||
0x74786574,0x64657275,0x00000000,0x00050048,0x00000008,0x00000000,0x0000000b,0x00000000,
|
|
||||||
0x00030047,0x00000008,0x00000002,0x00040048,0x0000000e,0x00000000,0x00000005,0x00050048,
|
|
||||||
0x0000000e,0x00000000,0x00000023,0x00000000,0x00050048,0x0000000e,0x00000000,0x00000007,
|
|
||||||
0x00000010,0x00030047,0x0000000e,0x00000002,0x00040048,0x00000014,0x00000000,0x00000005,
|
|
||||||
0x00050048,0x00000014,0x00000000,0x00000023,0x00000000,0x00050048,0x00000014,0x00000000,
|
|
||||||
0x00000007,0x00000010,0x00050048,0x00000014,0x00000001,0x00000023,0x00000040,0x00030047,
|
|
||||||
0x00000014,0x00000002,0x00040047,0x00000016,0x00000022,0x00000001,0x00040047,0x00000016,
|
|
||||||
0x00000021,0x00000000,0x00040047,0x0000001d,0x0000001e,0x00000000,0x00040047,0x00000027,
|
|
||||||
0x0000001e,0x00000000,0x00040047,0x00000029,0x0000001e,0x00000001,0x00040047,0x0000002d,
|
|
||||||
0x0000001e,0x00000001,0x00040047,0x0000002f,0x0000001e,0x00000002,0x00040047,0x00000032,
|
|
||||||
0x0000001e,0x00000002,0x00020013,0x00000002,0x00030021,0x00000003,0x00000002,0x00030016,
|
|
||||||
0x00000006,0x00000020,0x00040017,0x00000007,0x00000006,0x00000004,0x0003001e,0x00000008,
|
|
||||||
0x00000007,0x00040020,0x00000009,0x00000003,0x00000008,0x0004003b,0x00000009,0x0000000a,
|
|
||||||
0x00000003,0x00040015,0x0000000b,0x00000020,0x00000001,0x0004002b,0x0000000b,0x0000000c,
|
|
||||||
0x00000000,0x00040018,0x0000000d,0x00000007,0x00000004,0x0003001e,0x0000000e,0x0000000d,
|
|
||||||
0x00040020,0x0000000f,0x00000009,0x0000000e,0x0004003b,0x0000000f,0x00000010,0x00000009,
|
|
||||||
0x00040020,0x00000011,0x00000009,0x0000000d,0x0004001e,0x00000014,0x0000000d,0x0000000b,
|
|
||||||
0x00040020,0x00000015,0x00000002,0x00000014,0x0004003b,0x00000015,0x00000016,0x00000002,
|
|
||||||
0x00040020,0x00000017,0x00000002,0x0000000d,0x00040017,0x0000001b,0x00000006,0x00000003,
|
|
||||||
0x00040020,0x0000001c,0x00000001,0x0000001b,0x0004003b,0x0000001c,0x0000001d,0x00000001,
|
|
||||||
0x0004002b,0x00000006,0x0000001f,0x3f800000,0x00040020,0x00000025,0x00000003,0x00000007,
|
|
||||||
0x0004003b,0x00000025,0x00000027,0x00000003,0x00040020,0x00000028,0x00000001,0x00000007,
|
|
||||||
0x0004003b,0x00000028,0x00000029,0x00000001,0x00040017,0x0000002b,0x00000006,0x00000002,
|
|
||||||
0x00040020,0x0000002c,0x00000003,0x0000002b,0x0004003b,0x0000002c,0x0000002d,0x00000003,
|
|
||||||
0x00040020,0x0000002e,0x00000001,0x0000002b,0x0004003b,0x0000002e,0x0000002f,0x00000001,
|
|
||||||
0x00040020,0x00000031,0x00000003,0x0000000b,0x0004003b,0x00000031,0x00000032,0x00000003,
|
|
||||||
0x0004002b,0x0000000b,0x00000033,0x00000001,0x00040020,0x00000034,0x00000002,0x0000000b,
|
|
||||||
0x00050036,0x00000002,0x00000004,0x00000000,0x00000003,0x000200f8,0x00000005,0x00050041,
|
|
||||||
0x00000011,0x00000012,0x00000010,0x0000000c,0x0004003d,0x0000000d,0x00000013,0x00000012,
|
|
||||||
0x00050041,0x00000017,0x00000018,0x00000016,0x0000000c,0x0004003d,0x0000000d,0x00000019,
|
|
||||||
0x00000018,0x00050092,0x0000000d,0x0000001a,0x00000013,0x00000019,0x0004003d,0x0000001b,
|
|
||||||
0x0000001e,0x0000001d,0x00050051,0x00000006,0x00000020,0x0000001e,0x00000000,0x00050051,
|
|
||||||
0x00000006,0x00000021,0x0000001e,0x00000001,0x00050051,0x00000006,0x00000022,0x0000001e,
|
|
||||||
0x00000002,0x00070050,0x00000007,0x00000023,0x00000020,0x00000021,0x00000022,0x0000001f,
|
|
||||||
0x00050091,0x00000007,0x00000024,0x0000001a,0x00000023,0x00050041,0x00000025,0x00000026,
|
|
||||||
0x0000000a,0x0000000c,0x0003003e,0x00000026,0x00000024,0x0004003d,0x00000007,0x0000002a,
|
|
||||||
0x00000029,0x0003003e,0x00000027,0x0000002a,0x0004003d,0x0000002b,0x00000030,0x0000002f,
|
|
||||||
0x0003003e,0x0000002d,0x00000030,0x00050041,0x00000034,0x00000035,0x00000016,0x00000033,
|
|
||||||
0x0004003d,0x0000000b,0x00000036,0x00000035,0x0003003e,0x00000032,0x00000036,0x000100fd,
|
|
||||||
0x00010038
|
|
||||||
};
|
|
|
@ -1,49 +0,0 @@
|
||||||
// 8.13.3559
|
|
||||||
#pragma once
|
|
||||||
const uint32_t nullmodel_vert_spv[] = {
|
|
||||||
0x07230203,0x00010000,0x00080008,0x0000002e,0x00000000,0x00020011,0x00000001,0x0006000b,
|
|
||||||
0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001,
|
|
||||||
0x0009000f,0x00000000,0x00000004,0x6e69616d,0x00000000,0x0000000a,0x0000001d,0x00000027,
|
|
||||||
0x00000028,0x00030003,0x00000002,0x000001c2,0x00090004,0x415f4c47,0x735f4252,0x72617065,
|
|
||||||
0x5f657461,0x64616873,0x6f5f7265,0x63656a62,0x00007374,0x00040005,0x00000004,0x6e69616d,
|
|
||||||
0x00000000,0x00060005,0x00000008,0x505f6c67,0x65567265,0x78657472,0x00000000,0x00060006,
|
|
||||||
0x00000008,0x00000000,0x505f6c67,0x7469736f,0x006e6f69,0x00030005,0x0000000a,0x00000000,
|
|
||||||
0x00060005,0x0000000e,0x68737550,0x736e6f43,0x746e6174,0x00000000,0x00060006,0x0000000e,
|
|
||||||
0x00000000,0x614d7076,0x78697274,0x00000000,0x00030005,0x00000010,0x00006370,0x00070005,
|
|
||||||
0x00000014,0x66696e55,0x426d726f,0x65666675,0x6a624f72,0x00746365,0x00050006,0x00000014,
|
|
||||||
0x00000000,0x65646f6d,0x0000006c,0x00030005,0x00000016,0x006f6275,0x00050005,0x0000001d,
|
|
||||||
0x65566e69,0x78657472,0x00000000,0x00040005,0x00000027,0x6f6c6f63,0x00000072,0x00040005,
|
|
||||||
0x00000028,0x6f436e69,0x00726f6c,0x00050048,0x00000008,0x00000000,0x0000000b,0x00000000,
|
|
||||||
0x00030047,0x00000008,0x00000002,0x00040048,0x0000000e,0x00000000,0x00000005,0x00050048,
|
|
||||||
0x0000000e,0x00000000,0x00000023,0x00000000,0x00050048,0x0000000e,0x00000000,0x00000007,
|
|
||||||
0x00000010,0x00030047,0x0000000e,0x00000002,0x00040048,0x00000014,0x00000000,0x00000005,
|
|
||||||
0x00050048,0x00000014,0x00000000,0x00000023,0x00000000,0x00050048,0x00000014,0x00000000,
|
|
||||||
0x00000007,0x00000010,0x00030047,0x00000014,0x00000002,0x00040047,0x00000016,0x00000022,
|
|
||||||
0x00000000,0x00040047,0x00000016,0x00000021,0x00000000,0x00040047,0x0000001d,0x0000001e,
|
|
||||||
0x00000000,0x00040047,0x00000027,0x0000001e,0x00000000,0x00040047,0x00000028,0x0000001e,
|
|
||||||
0x00000001,0x00020013,0x00000002,0x00030021,0x00000003,0x00000002,0x00030016,0x00000006,
|
|
||||||
0x00000020,0x00040017,0x00000007,0x00000006,0x00000004,0x0003001e,0x00000008,0x00000007,
|
|
||||||
0x00040020,0x00000009,0x00000003,0x00000008,0x0004003b,0x00000009,0x0000000a,0x00000003,
|
|
||||||
0x00040015,0x0000000b,0x00000020,0x00000001,0x0004002b,0x0000000b,0x0000000c,0x00000000,
|
|
||||||
0x00040018,0x0000000d,0x00000007,0x00000004,0x0003001e,0x0000000e,0x0000000d,0x00040020,
|
|
||||||
0x0000000f,0x00000009,0x0000000e,0x0004003b,0x0000000f,0x00000010,0x00000009,0x00040020,
|
|
||||||
0x00000011,0x00000009,0x0000000d,0x0003001e,0x00000014,0x0000000d,0x00040020,0x00000015,
|
|
||||||
0x00000002,0x00000014,0x0004003b,0x00000015,0x00000016,0x00000002,0x00040020,0x00000017,
|
|
||||||
0x00000002,0x0000000d,0x00040017,0x0000001b,0x00000006,0x00000003,0x00040020,0x0000001c,
|
|
||||||
0x00000001,0x0000001b,0x0004003b,0x0000001c,0x0000001d,0x00000001,0x0004002b,0x00000006,
|
|
||||||
0x0000001f,0x3f800000,0x00040020,0x00000025,0x00000003,0x00000007,0x0004003b,0x00000025,
|
|
||||||
0x00000027,0x00000003,0x0004003b,0x0000001c,0x00000028,0x00000001,0x00050036,0x00000002,
|
|
||||||
0x00000004,0x00000000,0x00000003,0x000200f8,0x00000005,0x00050041,0x00000011,0x00000012,
|
|
||||||
0x00000010,0x0000000c,0x0004003d,0x0000000d,0x00000013,0x00000012,0x00050041,0x00000017,
|
|
||||||
0x00000018,0x00000016,0x0000000c,0x0004003d,0x0000000d,0x00000019,0x00000018,0x00050092,
|
|
||||||
0x0000000d,0x0000001a,0x00000013,0x00000019,0x0004003d,0x0000001b,0x0000001e,0x0000001d,
|
|
||||||
0x00050051,0x00000006,0x00000020,0x0000001e,0x00000000,0x00050051,0x00000006,0x00000021,
|
|
||||||
0x0000001e,0x00000001,0x00050051,0x00000006,0x00000022,0x0000001e,0x00000002,0x00070050,
|
|
||||||
0x00000007,0x00000023,0x00000020,0x00000021,0x00000022,0x0000001f,0x00050091,0x00000007,
|
|
||||||
0x00000024,0x0000001a,0x00000023,0x00050041,0x00000025,0x00000026,0x0000000a,0x0000000c,
|
|
||||||
0x0003003e,0x00000026,0x00000024,0x0004003d,0x0000001b,0x00000029,0x00000028,0x00050051,
|
|
||||||
0x00000006,0x0000002a,0x00000029,0x00000000,0x00050051,0x00000006,0x0000002b,0x00000029,
|
|
||||||
0x00000001,0x00050051,0x00000006,0x0000002c,0x00000029,0x00000002,0x00070050,0x00000007,
|
|
||||||
0x0000002d,0x0000002a,0x0000002b,0x0000002c,0x0000001f,0x0003003e,0x00000027,0x0000002d,
|
|
||||||
0x000100fd,0x00010038
|
|
||||||
};
|
|
|
@ -1,47 +0,0 @@
|
||||||
// 8.13.3743
|
|
||||||
#pragma once
|
|
||||||
const uint32_t particle_vert_spv[] = {
|
|
||||||
0x07230203,0x00010000,0x00080008,0x0000002d,0x00000000,0x00020011,0x00000001,0x0006000b,
|
|
||||||
0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001,
|
|
||||||
0x000c000f,0x00000000,0x00000004,0x6e69616d,0x00000000,0x0000000a,0x00000016,0x00000022,
|
|
||||||
0x00000024,0x00000026,0x00000028,0x0000002b,0x00030003,0x00000002,0x000001c2,0x00090004,
|
|
||||||
0x415f4c47,0x735f4252,0x72617065,0x5f657461,0x64616873,0x6f5f7265,0x63656a62,0x00007374,
|
|
||||||
0x00040005,0x00000004,0x6e69616d,0x00000000,0x00060005,0x00000008,0x505f6c67,0x65567265,
|
|
||||||
0x78657472,0x00000000,0x00060006,0x00000008,0x00000000,0x505f6c67,0x7469736f,0x006e6f69,
|
|
||||||
0x00030005,0x0000000a,0x00000000,0x00060005,0x0000000e,0x68737550,0x736e6f43,0x746e6174,
|
|
||||||
0x00000000,0x00060006,0x0000000e,0x00000000,0x4d70766d,0x69727461,0x00000078,0x00030005,
|
|
||||||
0x00000010,0x00006370,0x00050005,0x00000016,0x65566e69,0x78657472,0x00000000,0x00050005,
|
|
||||||
0x00000022,0x43786574,0x64726f6f,0x00000000,0x00050005,0x00000024,0x65546e69,0x6f6f4378,
|
|
||||||
0x00006472,0x00040005,0x00000026,0x6f6c6f63,0x00000072,0x00040005,0x00000028,0x6f436e69,
|
|
||||||
0x00726f6c,0x00050005,0x0000002b,0x65725461,0x6c6f6873,0x00000064,0x00050048,0x00000008,
|
|
||||||
0x00000000,0x0000000b,0x00000000,0x00030047,0x00000008,0x00000002,0x00040048,0x0000000e,
|
|
||||||
0x00000000,0x00000005,0x00050048,0x0000000e,0x00000000,0x00000023,0x00000000,0x00050048,
|
|
||||||
0x0000000e,0x00000000,0x00000007,0x00000010,0x00030047,0x0000000e,0x00000002,0x00040047,
|
|
||||||
0x00000016,0x0000001e,0x00000000,0x00040047,0x00000022,0x0000001e,0x00000000,0x00040047,
|
|
||||||
0x00000024,0x0000001e,0x00000002,0x00040047,0x00000026,0x0000001e,0x00000001,0x00040047,
|
|
||||||
0x00000028,0x0000001e,0x00000001,0x00040047,0x0000002b,0x0000001e,0x00000002,0x00020013,
|
|
||||||
0x00000002,0x00030021,0x00000003,0x00000002,0x00030016,0x00000006,0x00000020,0x00040017,
|
|
||||||
0x00000007,0x00000006,0x00000004,0x0003001e,0x00000008,0x00000007,0x00040020,0x00000009,
|
|
||||||
0x00000003,0x00000008,0x0004003b,0x00000009,0x0000000a,0x00000003,0x00040015,0x0000000b,
|
|
||||||
0x00000020,0x00000001,0x0004002b,0x0000000b,0x0000000c,0x00000000,0x00040018,0x0000000d,
|
|
||||||
0x00000007,0x00000004,0x0003001e,0x0000000e,0x0000000d,0x00040020,0x0000000f,0x00000009,
|
|
||||||
0x0000000e,0x0004003b,0x0000000f,0x00000010,0x00000009,0x00040020,0x00000011,0x00000009,
|
|
||||||
0x0000000d,0x00040017,0x00000014,0x00000006,0x00000003,0x00040020,0x00000015,0x00000001,
|
|
||||||
0x00000014,0x0004003b,0x00000015,0x00000016,0x00000001,0x0004002b,0x00000006,0x00000018,
|
|
||||||
0x3f800000,0x00040020,0x0000001e,0x00000003,0x00000007,0x00040017,0x00000020,0x00000006,
|
|
||||||
0x00000002,0x00040020,0x00000021,0x00000003,0x00000020,0x0004003b,0x00000021,0x00000022,
|
|
||||||
0x00000003,0x00040020,0x00000023,0x00000001,0x00000020,0x0004003b,0x00000023,0x00000024,
|
|
||||||
0x00000001,0x0004003b,0x0000001e,0x00000026,0x00000003,0x00040020,0x00000027,0x00000001,
|
|
||||||
0x00000007,0x0004003b,0x00000027,0x00000028,0x00000001,0x00040020,0x0000002a,0x00000003,
|
|
||||||
0x00000006,0x0004003b,0x0000002a,0x0000002b,0x00000003,0x0004002b,0x00000006,0x0000002c,
|
|
||||||
0x3f000000,0x00050036,0x00000002,0x00000004,0x00000000,0x00000003,0x000200f8,0x00000005,
|
|
||||||
0x00050041,0x00000011,0x00000012,0x00000010,0x0000000c,0x0004003d,0x0000000d,0x00000013,
|
|
||||||
0x00000012,0x0004003d,0x00000014,0x00000017,0x00000016,0x00050051,0x00000006,0x00000019,
|
|
||||||
0x00000017,0x00000000,0x00050051,0x00000006,0x0000001a,0x00000017,0x00000001,0x00050051,
|
|
||||||
0x00000006,0x0000001b,0x00000017,0x00000002,0x00070050,0x00000007,0x0000001c,0x00000019,
|
|
||||||
0x0000001a,0x0000001b,0x00000018,0x00050091,0x00000007,0x0000001d,0x00000013,0x0000001c,
|
|
||||||
0x00050041,0x0000001e,0x0000001f,0x0000000a,0x0000000c,0x0003003e,0x0000001f,0x0000001d,
|
|
||||||
0x0004003d,0x00000020,0x00000025,0x00000024,0x0003003e,0x00000022,0x00000025,0x0004003d,
|
|
||||||
0x00000007,0x00000029,0x00000028,0x0003003e,0x00000026,0x00000029,0x0003003e,0x0000002b,
|
|
||||||
0x0000002c,0x000100fd,0x00010038
|
|
||||||
};
|
|
|
@ -1,28 +0,0 @@
|
||||||
// 8.13.3559
|
|
||||||
#pragma once
|
|
||||||
const uint32_t point_particle_frag_spv[] = {
|
|
||||||
0x07230203,0x00010000,0x00080008,0x00000020,0x00000000,0x00020011,0x00000001,0x0006000b,
|
|
||||||
0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001,
|
|
||||||
0x0008000f,0x00000004,0x00000004,0x6e69616d,0x00000000,0x0000000c,0x0000001c,0x0000001e,
|
|
||||||
0x00030010,0x00000004,0x00000007,0x00030003,0x00000002,0x000001c2,0x00040005,0x00000004,
|
|
||||||
0x6e69616d,0x00000000,0x00030005,0x00000009,0x00797863,0x00060005,0x0000000c,0x505f6c67,
|
|
||||||
0x746e696f,0x726f6f43,0x00000064,0x00060005,0x0000001c,0x67617266,0x746e656d,0x6f6c6f43,
|
|
||||||
0x00000072,0x00040005,0x0000001e,0x6f6c6f63,0x00000072,0x00040047,0x0000000c,0x0000000b,
|
|
||||||
0x00000010,0x00040047,0x0000001c,0x0000001e,0x00000000,0x00040047,0x0000001e,0x0000001e,
|
|
||||||
0x00000000,0x00020013,0x00000002,0x00030021,0x00000003,0x00000002,0x00030016,0x00000006,
|
|
||||||
0x00000020,0x00040017,0x00000007,0x00000006,0x00000002,0x00040020,0x00000008,0x00000007,
|
|
||||||
0x00000007,0x0004002b,0x00000006,0x0000000a,0x40000000,0x00040020,0x0000000b,0x00000001,
|
|
||||||
0x00000007,0x0004003b,0x0000000b,0x0000000c,0x00000001,0x0004002b,0x00000006,0x0000000f,
|
|
||||||
0x3f800000,0x00020014,0x00000015,0x00040017,0x0000001a,0x00000006,0x00000004,0x00040020,
|
|
||||||
0x0000001b,0x00000003,0x0000001a,0x0004003b,0x0000001b,0x0000001c,0x00000003,0x00040020,
|
|
||||||
0x0000001d,0x00000001,0x0000001a,0x0004003b,0x0000001d,0x0000001e,0x00000001,0x00050036,
|
|
||||||
0x00000002,0x00000004,0x00000000,0x00000003,0x000200f8,0x00000005,0x0004003b,0x00000008,
|
|
||||||
0x00000009,0x00000007,0x0004003d,0x00000007,0x0000000d,0x0000000c,0x0005008e,0x00000007,
|
|
||||||
0x0000000e,0x0000000d,0x0000000a,0x00050050,0x00000007,0x00000010,0x0000000f,0x0000000f,
|
|
||||||
0x00050083,0x00000007,0x00000011,0x0000000e,0x00000010,0x0003003e,0x00000009,0x00000011,
|
|
||||||
0x0004003d,0x00000007,0x00000012,0x00000009,0x0004003d,0x00000007,0x00000013,0x00000009,
|
|
||||||
0x00050094,0x00000006,0x00000014,0x00000012,0x00000013,0x000500ba,0x00000015,0x00000016,
|
|
||||||
0x00000014,0x0000000f,0x000300f7,0x00000018,0x00000000,0x000400fa,0x00000016,0x00000017,
|
|
||||||
0x00000018,0x000200f8,0x00000017,0x000100fc,0x000200f8,0x00000018,0x0004003d,0x0000001a,
|
|
||||||
0x0000001f,0x0000001e,0x0003003e,0x0000001c,0x0000001f,0x000100fd,0x00010038
|
|
||||||
};
|
|
|
@ -1,82 +0,0 @@
|
||||||
// 8.13.3559
|
|
||||||
#pragma once
|
|
||||||
const uint32_t point_particle_vert_spv[] = {
|
|
||||||
0x07230203,0x00010000,0x00080008,0x00000055,0x00000000,0x00020011,0x00000001,0x0006000b,
|
|
||||||
0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001,
|
|
||||||
0x0009000f,0x00000000,0x00000004,0x6e69616d,0x00000000,0x0000000a,0x00000016,0x00000051,
|
|
||||||
0x00000053,0x00030003,0x00000002,0x000001c2,0x00090004,0x415f4c47,0x735f4252,0x72617065,
|
|
||||||
0x5f657461,0x64616873,0x6f5f7265,0x63656a62,0x00007374,0x00040005,0x00000004,0x6e69616d,
|
|
||||||
0x00000000,0x00060005,0x00000008,0x505f6c67,0x65567265,0x78657472,0x00000000,0x00060006,
|
|
||||||
0x00000008,0x00000000,0x505f6c67,0x7469736f,0x006e6f69,0x00070006,0x00000008,0x00000001,
|
|
||||||
0x505f6c67,0x746e696f,0x657a6953,0x00000000,0x00030005,0x0000000a,0x00000000,0x00060005,
|
|
||||||
0x0000000e,0x68737550,0x736e6f43,0x746e6174,0x00000000,0x00060006,0x0000000e,0x00000000,
|
|
||||||
0x4d70766d,0x69727461,0x00000078,0x00030005,0x00000010,0x00006370,0x00050005,0x00000016,
|
|
||||||
0x65566e69,0x78657472,0x00000000,0x00050005,0x00000021,0x74736964,0x7474615f,0x00006e65,
|
|
||||||
0x00070005,0x00000022,0x66696e55,0x426d726f,0x65666675,0x6a624f72,0x00746365,0x00060006,
|
|
||||||
0x00000022,0x00000000,0x6e696f70,0x7a695374,0x00000065,0x00060006,0x00000022,0x00000001,
|
|
||||||
0x6e696f70,0x61635374,0x0000656c,0x00070006,0x00000022,0x00000002,0x506e696d,0x746e696f,
|
|
||||||
0x657a6953,0x00000000,0x00070006,0x00000022,0x00000003,0x5078616d,0x746e696f,0x657a6953,
|
|
||||||
0x00000000,0x00050006,0x00000022,0x00000004,0x5f747461,0x00000061,0x00050006,0x00000022,
|
|
||||||
0x00000005,0x5f747461,0x00000062,0x00050006,0x00000022,0x00000006,0x5f747461,0x00000063,
|
|
||||||
0x00030005,0x00000024,0x006f6275,0x00040005,0x00000051,0x6f6c6f63,0x00000072,0x00040005,
|
|
||||||
0x00000053,0x6f436e69,0x00726f6c,0x00050048,0x00000008,0x00000000,0x0000000b,0x00000000,
|
|
||||||
0x00050048,0x00000008,0x00000001,0x0000000b,0x00000001,0x00030047,0x00000008,0x00000002,
|
|
||||||
0x00040048,0x0000000e,0x00000000,0x00000005,0x00050048,0x0000000e,0x00000000,0x00000023,
|
|
||||||
0x00000000,0x00050048,0x0000000e,0x00000000,0x00000007,0x00000010,0x00030047,0x0000000e,
|
|
||||||
0x00000002,0x00040047,0x00000016,0x0000001e,0x00000000,0x00050048,0x00000022,0x00000000,
|
|
||||||
0x00000023,0x00000000,0x00050048,0x00000022,0x00000001,0x00000023,0x00000004,0x00050048,
|
|
||||||
0x00000022,0x00000002,0x00000023,0x00000008,0x00050048,0x00000022,0x00000003,0x00000023,
|
|
||||||
0x0000000c,0x00050048,0x00000022,0x00000004,0x00000023,0x00000010,0x00050048,0x00000022,
|
|
||||||
0x00000005,0x00000023,0x00000014,0x00050048,0x00000022,0x00000006,0x00000023,0x00000018,
|
|
||||||
0x00030047,0x00000022,0x00000002,0x00040047,0x00000024,0x00000022,0x00000000,0x00040047,
|
|
||||||
0x00000024,0x00000021,0x00000000,0x00040047,0x00000051,0x0000001e,0x00000000,0x00040047,
|
|
||||||
0x00000053,0x0000001e,0x00000001,0x00020013,0x00000002,0x00030021,0x00000003,0x00000002,
|
|
||||||
0x00030016,0x00000006,0x00000020,0x00040017,0x00000007,0x00000006,0x00000004,0x0004001e,
|
|
||||||
0x00000008,0x00000007,0x00000006,0x00040020,0x00000009,0x00000003,0x00000008,0x0004003b,
|
|
||||||
0x00000009,0x0000000a,0x00000003,0x00040015,0x0000000b,0x00000020,0x00000001,0x0004002b,
|
|
||||||
0x0000000b,0x0000000c,0x00000000,0x00040018,0x0000000d,0x00000007,0x00000004,0x0003001e,
|
|
||||||
0x0000000e,0x0000000d,0x00040020,0x0000000f,0x00000009,0x0000000e,0x0004003b,0x0000000f,
|
|
||||||
0x00000010,0x00000009,0x00040020,0x00000011,0x00000009,0x0000000d,0x00040017,0x00000014,
|
|
||||||
0x00000006,0x00000003,0x00040020,0x00000015,0x00000001,0x00000014,0x0004003b,0x00000015,
|
|
||||||
0x00000016,0x00000001,0x0004002b,0x00000006,0x00000018,0x3f800000,0x00040020,0x0000001e,
|
|
||||||
0x00000003,0x00000007,0x00040020,0x00000020,0x00000007,0x00000006,0x0009001e,0x00000022,
|
|
||||||
0x00000006,0x00000006,0x00000006,0x00000006,0x00000006,0x00000006,0x00000006,0x00040020,
|
|
||||||
0x00000023,0x00000002,0x00000022,0x0004003b,0x00000023,0x00000024,0x00000002,0x0004002b,
|
|
||||||
0x0000000b,0x00000025,0x00000001,0x00040020,0x00000026,0x00000002,0x00000006,0x0004002b,
|
|
||||||
0x0000000b,0x00000029,0x00000004,0x0004002b,0x0000000b,0x0000002c,0x00000005,0x00040015,
|
|
||||||
0x0000002f,0x00000020,0x00000000,0x0004002b,0x0000002f,0x00000030,0x00000003,0x00040020,
|
|
||||||
0x00000031,0x00000003,0x00000006,0x0004002b,0x0000000b,0x00000036,0x00000006,0x0004002b,
|
|
||||||
0x0000000b,0x00000049,0x00000002,0x0004002b,0x0000000b,0x0000004c,0x00000003,0x0004003b,
|
|
||||||
0x0000001e,0x00000051,0x00000003,0x00040020,0x00000052,0x00000001,0x00000007,0x0004003b,
|
|
||||||
0x00000052,0x00000053,0x00000001,0x00050036,0x00000002,0x00000004,0x00000000,0x00000003,
|
|
||||||
0x000200f8,0x00000005,0x0004003b,0x00000020,0x00000021,0x00000007,0x00050041,0x00000011,
|
|
||||||
0x00000012,0x00000010,0x0000000c,0x0004003d,0x0000000d,0x00000013,0x00000012,0x0004003d,
|
|
||||||
0x00000014,0x00000017,0x00000016,0x00050051,0x00000006,0x00000019,0x00000017,0x00000000,
|
|
||||||
0x00050051,0x00000006,0x0000001a,0x00000017,0x00000001,0x00050051,0x00000006,0x0000001b,
|
|
||||||
0x00000017,0x00000002,0x00070050,0x00000007,0x0000001c,0x00000019,0x0000001a,0x0000001b,
|
|
||||||
0x00000018,0x00050091,0x00000007,0x0000001d,0x00000013,0x0000001c,0x00050041,0x0000001e,
|
|
||||||
0x0000001f,0x0000000a,0x0000000c,0x0003003e,0x0000001f,0x0000001d,0x00050041,0x00000026,
|
|
||||||
0x00000027,0x00000024,0x00000025,0x0004003d,0x00000006,0x00000028,0x00000027,0x00050041,
|
|
||||||
0x00000026,0x0000002a,0x00000024,0x00000029,0x0004003d,0x00000006,0x0000002b,0x0000002a,
|
|
||||||
0x00050041,0x00000026,0x0000002d,0x00000024,0x0000002c,0x0004003d,0x00000006,0x0000002e,
|
|
||||||
0x0000002d,0x00060041,0x00000031,0x00000032,0x0000000a,0x0000000c,0x00000030,0x0004003d,
|
|
||||||
0x00000006,0x00000033,0x00000032,0x00050085,0x00000006,0x00000034,0x0000002e,0x00000033,
|
|
||||||
0x00050081,0x00000006,0x00000035,0x0000002b,0x00000034,0x00050041,0x00000026,0x00000037,
|
|
||||||
0x00000024,0x00000036,0x0004003d,0x00000006,0x00000038,0x00000037,0x00060041,0x00000031,
|
|
||||||
0x00000039,0x0000000a,0x0000000c,0x00000030,0x0004003d,0x00000006,0x0000003a,0x00000039,
|
|
||||||
0x00050085,0x00000006,0x0000003b,0x00000038,0x0000003a,0x00060041,0x00000031,0x0000003c,
|
|
||||||
0x0000000a,0x0000000c,0x00000030,0x0004003d,0x00000006,0x0000003d,0x0000003c,0x00050085,
|
|
||||||
0x00000006,0x0000003e,0x0000003b,0x0000003d,0x00050081,0x00000006,0x0000003f,0x00000035,
|
|
||||||
0x0000003e,0x00050088,0x00000006,0x00000040,0x00000028,0x0000003f,0x0003003e,0x00000021,
|
|
||||||
0x00000040,0x00050041,0x00000026,0x00000041,0x00000024,0x00000025,0x0004003d,0x00000006,
|
|
||||||
0x00000042,0x00000041,0x00050041,0x00000026,0x00000043,0x00000024,0x0000000c,0x0004003d,
|
|
||||||
0x00000006,0x00000044,0x00000043,0x00050085,0x00000006,0x00000045,0x00000042,0x00000044,
|
|
||||||
0x0004003d,0x00000006,0x00000046,0x00000021,0x0006000c,0x00000006,0x00000047,0x00000001,
|
|
||||||
0x0000001f,0x00000046,0x00050085,0x00000006,0x00000048,0x00000045,0x00000047,0x00050041,
|
|
||||||
0x00000026,0x0000004a,0x00000024,0x00000049,0x0004003d,0x00000006,0x0000004b,0x0000004a,
|
|
||||||
0x00050041,0x00000026,0x0000004d,0x00000024,0x0000004c,0x0004003d,0x00000006,0x0000004e,
|
|
||||||
0x0000004d,0x0008000c,0x00000006,0x0000004f,0x00000001,0x0000002b,0x00000048,0x0000004b,
|
|
||||||
0x0000004e,0x00050041,0x00000031,0x00000050,0x0000000a,0x00000025,0x0003003e,0x00000050,
|
|
||||||
0x0000004f,0x0004003d,0x00000007,0x00000054,0x00000053,0x0003003e,0x00000051,0x00000054,
|
|
||||||
0x000100fd,0x00010038
|
|
||||||
};
|
|
|
@ -1,40 +0,0 @@
|
||||||
// 8.13.3559
|
|
||||||
#pragma once
|
|
||||||
const uint32_t polygon_lmap_frag_spv[] = {
|
|
||||||
0x07230203,0x00010000,0x00080008,0x00000029,0x00000000,0x00020011,0x00000001,0x0006000b,
|
|
||||||
0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001,
|
|
||||||
0x0009000f,0x00000004,0x00000004,0x6e69616d,0x00000000,0x00000011,0x00000017,0x0000001b,
|
|
||||||
0x0000001e,0x00030010,0x00000004,0x00000007,0x00030003,0x00000002,0x000001c2,0x00040005,
|
|
||||||
0x00000004,0x6e69616d,0x00000000,0x00040005,0x00000009,0x6f6c6f63,0x00000072,0x00050005,
|
|
||||||
0x0000000d,0x78655473,0x65727574,0x00000000,0x00050005,0x00000011,0x43786574,0x64726f6f,
|
|
||||||
0x00000000,0x00040005,0x00000014,0x6867696c,0x00000074,0x00050005,0x00000015,0x67694c73,
|
|
||||||
0x616d7468,0x00000070,0x00060005,0x00000017,0x43786574,0x64726f6f,0x70616d4c,0x00000000,
|
|
||||||
0x00060005,0x0000001b,0x67617266,0x746e656d,0x6f6c6f43,0x00000072,0x00060005,0x0000001e,
|
|
||||||
0x77656976,0x6867694c,0x70616d74,0x00000073,0x00040047,0x0000000d,0x00000022,0x00000000,
|
|
||||||
0x00040047,0x0000000d,0x00000021,0x00000000,0x00040047,0x00000011,0x0000001e,0x00000000,
|
|
||||||
0x00040047,0x00000015,0x00000022,0x00000002,0x00040047,0x00000015,0x00000021,0x00000000,
|
|
||||||
0x00040047,0x00000017,0x0000001e,0x00000001,0x00040047,0x0000001b,0x0000001e,0x00000000,
|
|
||||||
0x00040047,0x0000001e,0x0000001e,0x00000002,0x00020013,0x00000002,0x00030021,0x00000003,
|
|
||||||
0x00000002,0x00030016,0x00000006,0x00000020,0x00040017,0x00000007,0x00000006,0x00000004,
|
|
||||||
0x00040020,0x00000008,0x00000007,0x00000007,0x00090019,0x0000000a,0x00000006,0x00000001,
|
|
||||||
0x00000000,0x00000000,0x00000000,0x00000001,0x00000000,0x0003001b,0x0000000b,0x0000000a,
|
|
||||||
0x00040020,0x0000000c,0x00000000,0x0000000b,0x0004003b,0x0000000c,0x0000000d,0x00000000,
|
|
||||||
0x00040017,0x0000000f,0x00000006,0x00000002,0x00040020,0x00000010,0x00000001,0x0000000f,
|
|
||||||
0x0004003b,0x00000010,0x00000011,0x00000001,0x0004003b,0x0000000c,0x00000015,0x00000000,
|
|
||||||
0x0004003b,0x00000010,0x00000017,0x00000001,0x00040020,0x0000001a,0x00000003,0x00000007,
|
|
||||||
0x0004003b,0x0000001a,0x0000001b,0x00000003,0x0004002b,0x00000006,0x0000001c,0x3f800000,
|
|
||||||
0x00040020,0x0000001d,0x00000001,0x00000006,0x0004003b,0x0000001d,0x0000001e,0x00000001,
|
|
||||||
0x00050036,0x00000002,0x00000004,0x00000000,0x00000003,0x000200f8,0x00000005,0x0004003b,
|
|
||||||
0x00000008,0x00000009,0x00000007,0x0004003b,0x00000008,0x00000014,0x00000007,0x0004003d,
|
|
||||||
0x0000000b,0x0000000e,0x0000000d,0x0004003d,0x0000000f,0x00000012,0x00000011,0x00050057,
|
|
||||||
0x00000007,0x00000013,0x0000000e,0x00000012,0x0003003e,0x00000009,0x00000013,0x0004003d,
|
|
||||||
0x0000000b,0x00000016,0x00000015,0x0004003d,0x0000000f,0x00000018,0x00000017,0x00050057,
|
|
||||||
0x00000007,0x00000019,0x00000016,0x00000018,0x0003003e,0x00000014,0x00000019,0x0004003d,
|
|
||||||
0x00000006,0x0000001f,0x0000001e,0x00050083,0x00000006,0x00000020,0x0000001c,0x0000001f,
|
|
||||||
0x0004003d,0x00000007,0x00000021,0x00000009,0x0005008e,0x00000007,0x00000022,0x00000021,
|
|
||||||
0x00000020,0x0004003d,0x00000007,0x00000023,0x00000014,0x00050085,0x00000007,0x00000024,
|
|
||||||
0x00000022,0x00000023,0x0004003d,0x00000006,0x00000025,0x0000001e,0x0004003d,0x00000007,
|
|
||||||
0x00000026,0x00000014,0x0005008e,0x00000007,0x00000027,0x00000026,0x00000025,0x00050081,
|
|
||||||
0x00000007,0x00000028,0x00000024,0x00000027,0x0003003e,0x0000001b,0x00000028,0x000100fd,
|
|
||||||
0x00010038
|
|
||||||
};
|
|
|
@ -1,59 +0,0 @@
|
||||||
// 8.13.3559
|
|
||||||
#pragma once
|
|
||||||
const uint32_t polygon_lmap_vert_spv[] = {
|
|
||||||
0x07230203,0x00010000,0x00080008,0x00000036,0x00000000,0x00020011,0x00000001,0x0006000b,
|
|
||||||
0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001,
|
|
||||||
0x000c000f,0x00000000,0x00000004,0x6e69616d,0x00000000,0x0000000a,0x0000001d,0x00000029,
|
|
||||||
0x0000002b,0x0000002d,0x0000002e,0x00000031,0x00030003,0x00000002,0x000001c2,0x00090004,
|
|
||||||
0x415f4c47,0x735f4252,0x72617065,0x5f657461,0x64616873,0x6f5f7265,0x63656a62,0x00007374,
|
|
||||||
0x00040005,0x00000004,0x6e69616d,0x00000000,0x00060005,0x00000008,0x505f6c67,0x65567265,
|
|
||||||
0x78657472,0x00000000,0x00060006,0x00000008,0x00000000,0x505f6c67,0x7469736f,0x006e6f69,
|
|
||||||
0x00030005,0x0000000a,0x00000000,0x00060005,0x0000000e,0x68737550,0x736e6f43,0x746e6174,
|
|
||||||
0x00000000,0x00060006,0x0000000e,0x00000000,0x614d7076,0x78697274,0x00000000,0x00030005,
|
|
||||||
0x00000010,0x00006370,0x00070005,0x00000014,0x66696e55,0x426d726f,0x65666675,0x6a624f72,
|
|
||||||
0x00746365,0x00050006,0x00000014,0x00000000,0x65646f6d,0x0000006c,0x00070006,0x00000014,
|
|
||||||
0x00000001,0x77656976,0x6867694c,0x70616d74,0x00000073,0x00030005,0x00000016,0x006f6275,
|
|
||||||
0x00050005,0x0000001d,0x65566e69,0x78657472,0x00000000,0x00050005,0x00000029,0x43786574,
|
|
||||||
0x64726f6f,0x00000000,0x00050005,0x0000002b,0x65546e69,0x6f6f4378,0x00006472,0x00060005,
|
|
||||||
0x0000002d,0x43786574,0x64726f6f,0x70616d4c,0x00000000,0x00060005,0x0000002e,0x65546e69,
|
|
||||||
0x6f6f4378,0x6d4c6472,0x00007061,0x00060005,0x00000031,0x77656976,0x6867694c,0x70616d74,
|
|
||||||
0x00000073,0x00050048,0x00000008,0x00000000,0x0000000b,0x00000000,0x00030047,0x00000008,
|
|
||||||
0x00000002,0x00040048,0x0000000e,0x00000000,0x00000005,0x00050048,0x0000000e,0x00000000,
|
|
||||||
0x00000023,0x00000000,0x00050048,0x0000000e,0x00000000,0x00000007,0x00000010,0x00030047,
|
|
||||||
0x0000000e,0x00000002,0x00040048,0x00000014,0x00000000,0x00000005,0x00050048,0x00000014,
|
|
||||||
0x00000000,0x00000023,0x00000000,0x00050048,0x00000014,0x00000000,0x00000007,0x00000010,
|
|
||||||
0x00050048,0x00000014,0x00000001,0x00000023,0x00000040,0x00030047,0x00000014,0x00000002,
|
|
||||||
0x00040047,0x00000016,0x00000022,0x00000001,0x00040047,0x00000016,0x00000021,0x00000000,
|
|
||||||
0x00040047,0x0000001d,0x0000001e,0x00000000,0x00040047,0x00000029,0x0000001e,0x00000000,
|
|
||||||
0x00040047,0x0000002b,0x0000001e,0x00000001,0x00040047,0x0000002d,0x0000001e,0x00000001,
|
|
||||||
0x00040047,0x0000002e,0x0000001e,0x00000002,0x00040047,0x00000031,0x0000001e,0x00000002,
|
|
||||||
0x00020013,0x00000002,0x00030021,0x00000003,0x00000002,0x00030016,0x00000006,0x00000020,
|
|
||||||
0x00040017,0x00000007,0x00000006,0x00000004,0x0003001e,0x00000008,0x00000007,0x00040020,
|
|
||||||
0x00000009,0x00000003,0x00000008,0x0004003b,0x00000009,0x0000000a,0x00000003,0x00040015,
|
|
||||||
0x0000000b,0x00000020,0x00000001,0x0004002b,0x0000000b,0x0000000c,0x00000000,0x00040018,
|
|
||||||
0x0000000d,0x00000007,0x00000004,0x0003001e,0x0000000e,0x0000000d,0x00040020,0x0000000f,
|
|
||||||
0x00000009,0x0000000e,0x0004003b,0x0000000f,0x00000010,0x00000009,0x00040020,0x00000011,
|
|
||||||
0x00000009,0x0000000d,0x0004001e,0x00000014,0x0000000d,0x00000006,0x00040020,0x00000015,
|
|
||||||
0x00000002,0x00000014,0x0004003b,0x00000015,0x00000016,0x00000002,0x00040020,0x00000017,
|
|
||||||
0x00000002,0x0000000d,0x00040017,0x0000001b,0x00000006,0x00000003,0x00040020,0x0000001c,
|
|
||||||
0x00000001,0x0000001b,0x0004003b,0x0000001c,0x0000001d,0x00000001,0x0004002b,0x00000006,
|
|
||||||
0x0000001f,0x3f800000,0x00040020,0x00000025,0x00000003,0x00000007,0x00040017,0x00000027,
|
|
||||||
0x00000006,0x00000002,0x00040020,0x00000028,0x00000003,0x00000027,0x0004003b,0x00000028,
|
|
||||||
0x00000029,0x00000003,0x00040020,0x0000002a,0x00000001,0x00000027,0x0004003b,0x0000002a,
|
|
||||||
0x0000002b,0x00000001,0x0004003b,0x00000028,0x0000002d,0x00000003,0x0004003b,0x0000002a,
|
|
||||||
0x0000002e,0x00000001,0x00040020,0x00000030,0x00000003,0x00000006,0x0004003b,0x00000030,
|
|
||||||
0x00000031,0x00000003,0x0004002b,0x0000000b,0x00000032,0x00000001,0x00040020,0x00000033,
|
|
||||||
0x00000002,0x00000006,0x00050036,0x00000002,0x00000004,0x00000000,0x00000003,0x000200f8,
|
|
||||||
0x00000005,0x00050041,0x00000011,0x00000012,0x00000010,0x0000000c,0x0004003d,0x0000000d,
|
|
||||||
0x00000013,0x00000012,0x00050041,0x00000017,0x00000018,0x00000016,0x0000000c,0x0004003d,
|
|
||||||
0x0000000d,0x00000019,0x00000018,0x00050092,0x0000000d,0x0000001a,0x00000013,0x00000019,
|
|
||||||
0x0004003d,0x0000001b,0x0000001e,0x0000001d,0x00050051,0x00000006,0x00000020,0x0000001e,
|
|
||||||
0x00000000,0x00050051,0x00000006,0x00000021,0x0000001e,0x00000001,0x00050051,0x00000006,
|
|
||||||
0x00000022,0x0000001e,0x00000002,0x00070050,0x00000007,0x00000023,0x00000020,0x00000021,
|
|
||||||
0x00000022,0x0000001f,0x00050091,0x00000007,0x00000024,0x0000001a,0x00000023,0x00050041,
|
|
||||||
0x00000025,0x00000026,0x0000000a,0x0000000c,0x0003003e,0x00000026,0x00000024,0x0004003d,
|
|
||||||
0x00000027,0x0000002c,0x0000002b,0x0003003e,0x00000029,0x0000002c,0x0004003d,0x00000027,
|
|
||||||
0x0000002f,0x0000002e,0x0003003e,0x0000002d,0x0000002f,0x00050041,0x00000033,0x00000034,
|
|
||||||
0x00000016,0x00000032,0x0004003d,0x00000006,0x00000035,0x00000034,0x0003003e,0x00000031,
|
|
||||||
0x00000035,0x000100fd,0x00010038
|
|
||||||
};
|
|
|
@ -1,51 +0,0 @@
|
||||||
// 8.13.3559
|
|
||||||
#pragma once
|
|
||||||
const uint32_t polygon_vert_spv[] = {
|
|
||||||
0x07230203,0x00010000,0x00080008,0x00000030,0x00000000,0x00020011,0x00000001,0x0006000b,
|
|
||||||
0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001,
|
|
||||||
0x000b000f,0x00000000,0x00000004,0x6e69616d,0x00000000,0x0000000a,0x00000016,0x00000022,
|
|
||||||
0x00000024,0x00000026,0x0000002e,0x00030003,0x00000002,0x000001c2,0x00090004,0x415f4c47,
|
|
||||||
0x735f4252,0x72617065,0x5f657461,0x64616873,0x6f5f7265,0x63656a62,0x00007374,0x00040005,
|
|
||||||
0x00000004,0x6e69616d,0x00000000,0x00060005,0x00000008,0x505f6c67,0x65567265,0x78657472,
|
|
||||||
0x00000000,0x00060006,0x00000008,0x00000000,0x505f6c67,0x7469736f,0x006e6f69,0x00030005,
|
|
||||||
0x0000000a,0x00000000,0x00060005,0x0000000e,0x68737550,0x736e6f43,0x746e6174,0x00000000,
|
|
||||||
0x00060006,0x0000000e,0x00000000,0x4d70766d,0x69727461,0x00000078,0x00030005,0x00000010,
|
|
||||||
0x00006370,0x00050005,0x00000016,0x65566e69,0x78657472,0x00000000,0x00050005,0x00000022,
|
|
||||||
0x43786574,0x64726f6f,0x00000000,0x00050005,0x00000024,0x65546e69,0x6f6f4378,0x00006472,
|
|
||||||
0x00040005,0x00000026,0x6f6c6f63,0x00000072,0x00070005,0x00000027,0x66696e55,0x426d726f,
|
|
||||||
0x65666675,0x6a624f72,0x00746365,0x00050006,0x00000027,0x00000000,0x6f6c6f63,0x00000072,
|
|
||||||
0x00030005,0x00000029,0x006f6275,0x00050005,0x0000002e,0x65725461,0x6c6f6873,0x00000064,
|
|
||||||
0x00050048,0x00000008,0x00000000,0x0000000b,0x00000000,0x00030047,0x00000008,0x00000002,
|
|
||||||
0x00040048,0x0000000e,0x00000000,0x00000005,0x00050048,0x0000000e,0x00000000,0x00000023,
|
|
||||||
0x00000000,0x00050048,0x0000000e,0x00000000,0x00000007,0x00000010,0x00030047,0x0000000e,
|
|
||||||
0x00000002,0x00040047,0x00000016,0x0000001e,0x00000000,0x00040047,0x00000022,0x0000001e,
|
|
||||||
0x00000000,0x00040047,0x00000024,0x0000001e,0x00000001,0x00040047,0x00000026,0x0000001e,
|
|
||||||
0x00000001,0x00050048,0x00000027,0x00000000,0x00000023,0x00000000,0x00030047,0x00000027,
|
|
||||||
0x00000002,0x00040047,0x00000029,0x00000022,0x00000001,0x00040047,0x00000029,0x00000021,
|
|
||||||
0x00000000,0x00040047,0x0000002e,0x0000001e,0x00000002,0x00020013,0x00000002,0x00030021,
|
|
||||||
0x00000003,0x00000002,0x00030016,0x00000006,0x00000020,0x00040017,0x00000007,0x00000006,
|
|
||||||
0x00000004,0x0003001e,0x00000008,0x00000007,0x00040020,0x00000009,0x00000003,0x00000008,
|
|
||||||
0x0004003b,0x00000009,0x0000000a,0x00000003,0x00040015,0x0000000b,0x00000020,0x00000001,
|
|
||||||
0x0004002b,0x0000000b,0x0000000c,0x00000000,0x00040018,0x0000000d,0x00000007,0x00000004,
|
|
||||||
0x0003001e,0x0000000e,0x0000000d,0x00040020,0x0000000f,0x00000009,0x0000000e,0x0004003b,
|
|
||||||
0x0000000f,0x00000010,0x00000009,0x00040020,0x00000011,0x00000009,0x0000000d,0x00040017,
|
|
||||||
0x00000014,0x00000006,0x00000003,0x00040020,0x00000015,0x00000001,0x00000014,0x0004003b,
|
|
||||||
0x00000015,0x00000016,0x00000001,0x0004002b,0x00000006,0x00000018,0x3f800000,0x00040020,
|
|
||||||
0x0000001e,0x00000003,0x00000007,0x00040017,0x00000020,0x00000006,0x00000002,0x00040020,
|
|
||||||
0x00000021,0x00000003,0x00000020,0x0004003b,0x00000021,0x00000022,0x00000003,0x00040020,
|
|
||||||
0x00000023,0x00000001,0x00000020,0x0004003b,0x00000023,0x00000024,0x00000001,0x0004003b,
|
|
||||||
0x0000001e,0x00000026,0x00000003,0x0003001e,0x00000027,0x00000007,0x00040020,0x00000028,
|
|
||||||
0x00000002,0x00000027,0x0004003b,0x00000028,0x00000029,0x00000002,0x00040020,0x0000002a,
|
|
||||||
0x00000002,0x00000007,0x00040020,0x0000002d,0x00000003,0x00000006,0x0004003b,0x0000002d,
|
|
||||||
0x0000002e,0x00000003,0x0004002b,0x00000006,0x0000002f,0x00000000,0x00050036,0x00000002,
|
|
||||||
0x00000004,0x00000000,0x00000003,0x000200f8,0x00000005,0x00050041,0x00000011,0x00000012,
|
|
||||||
0x00000010,0x0000000c,0x0004003d,0x0000000d,0x00000013,0x00000012,0x0004003d,0x00000014,
|
|
||||||
0x00000017,0x00000016,0x00050051,0x00000006,0x00000019,0x00000017,0x00000000,0x00050051,
|
|
||||||
0x00000006,0x0000001a,0x00000017,0x00000001,0x00050051,0x00000006,0x0000001b,0x00000017,
|
|
||||||
0x00000002,0x00070050,0x00000007,0x0000001c,0x00000019,0x0000001a,0x0000001b,0x00000018,
|
|
||||||
0x00050091,0x00000007,0x0000001d,0x00000013,0x0000001c,0x00050041,0x0000001e,0x0000001f,
|
|
||||||
0x0000000a,0x0000000c,0x0003003e,0x0000001f,0x0000001d,0x0004003d,0x00000020,0x00000025,
|
|
||||||
0x00000024,0x0003003e,0x00000022,0x00000025,0x00050041,0x0000002a,0x0000002b,0x00000029,
|
|
||||||
0x0000000c,0x0004003d,0x00000007,0x0000002c,0x0000002b,0x0003003e,0x00000026,0x0000002c,
|
|
||||||
0x0003003e,0x0000002e,0x0000002f,0x000100fd,0x00010038
|
|
||||||
};
|
|
|
@ -1,80 +0,0 @@
|
||||||
// 8.13.3559
|
|
||||||
#pragma once
|
|
||||||
const uint32_t polygon_warp_vert_spv[] = {
|
|
||||||
0x07230203,0x00010000,0x00080008,0x00000058,0x00000000,0x00020011,0x00000001,0x0006000b,
|
|
||||||
0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001,
|
|
||||||
0x000b000f,0x00000000,0x00000004,0x6e69616d,0x00000000,0x0000000a,0x0000001d,0x00000029,
|
|
||||||
0x0000002b,0x00000051,0x00000056,0x00030003,0x00000002,0x000001c2,0x00090004,0x415f4c47,
|
|
||||||
0x735f4252,0x72617065,0x5f657461,0x64616873,0x6f5f7265,0x63656a62,0x00007374,0x00040005,
|
|
||||||
0x00000004,0x6e69616d,0x00000000,0x00060005,0x00000008,0x505f6c67,0x65567265,0x78657472,
|
|
||||||
0x00000000,0x00060006,0x00000008,0x00000000,0x505f6c67,0x7469736f,0x006e6f69,0x00030005,
|
|
||||||
0x0000000a,0x00000000,0x00060005,0x0000000e,0x68737550,0x736e6f43,0x746e6174,0x00000000,
|
|
||||||
0x00060006,0x0000000e,0x00000000,0x614d7076,0x78697274,0x00000000,0x00030005,0x00000010,
|
|
||||||
0x00006370,0x00070005,0x00000014,0x66696e55,0x426d726f,0x65666675,0x6a624f72,0x00746365,
|
|
||||||
0x00050006,0x00000014,0x00000000,0x65646f6d,0x0000006c,0x00050006,0x00000014,0x00000001,
|
|
||||||
0x6f6c6f63,0x00000072,0x00050006,0x00000014,0x00000002,0x656d6974,0x00000000,0x00050006,
|
|
||||||
0x00000014,0x00000003,0x6f726373,0x00006c6c,0x00030005,0x00000016,0x006f6275,0x00050005,
|
|
||||||
0x0000001d,0x65566e69,0x78657472,0x00000000,0x00050005,0x00000029,0x43786574,0x64726f6f,
|
|
||||||
0x00000000,0x00050005,0x0000002b,0x65546e69,0x6f6f4378,0x00006472,0x00040005,0x00000051,
|
|
||||||
0x6f6c6f63,0x00000072,0x00050005,0x00000056,0x65725461,0x6c6f6873,0x00000064,0x00050048,
|
|
||||||
0x00000008,0x00000000,0x0000000b,0x00000000,0x00030047,0x00000008,0x00000002,0x00040048,
|
|
||||||
0x0000000e,0x00000000,0x00000005,0x00050048,0x0000000e,0x00000000,0x00000023,0x00000000,
|
|
||||||
0x00050048,0x0000000e,0x00000000,0x00000007,0x00000010,0x00030047,0x0000000e,0x00000002,
|
|
||||||
0x00040048,0x00000014,0x00000000,0x00000005,0x00050048,0x00000014,0x00000000,0x00000023,
|
|
||||||
0x00000000,0x00050048,0x00000014,0x00000000,0x00000007,0x00000010,0x00050048,0x00000014,
|
|
||||||
0x00000001,0x00000023,0x00000040,0x00050048,0x00000014,0x00000002,0x00000023,0x00000050,
|
|
||||||
0x00050048,0x00000014,0x00000003,0x00000023,0x00000054,0x00030047,0x00000014,0x00000002,
|
|
||||||
0x00040047,0x00000016,0x00000022,0x00000001,0x00040047,0x00000016,0x00000021,0x00000000,
|
|
||||||
0x00040047,0x0000001d,0x0000001e,0x00000000,0x00040047,0x00000029,0x0000001e,0x00000000,
|
|
||||||
0x00040047,0x0000002b,0x0000001e,0x00000001,0x00040047,0x00000051,0x0000001e,0x00000001,
|
|
||||||
0x00040047,0x00000056,0x0000001e,0x00000002,0x00020013,0x00000002,0x00030021,0x00000003,
|
|
||||||
0x00000002,0x00030016,0x00000006,0x00000020,0x00040017,0x00000007,0x00000006,0x00000004,
|
|
||||||
0x0003001e,0x00000008,0x00000007,0x00040020,0x00000009,0x00000003,0x00000008,0x0004003b,
|
|
||||||
0x00000009,0x0000000a,0x00000003,0x00040015,0x0000000b,0x00000020,0x00000001,0x0004002b,
|
|
||||||
0x0000000b,0x0000000c,0x00000000,0x00040018,0x0000000d,0x00000007,0x00000004,0x0003001e,
|
|
||||||
0x0000000e,0x0000000d,0x00040020,0x0000000f,0x00000009,0x0000000e,0x0004003b,0x0000000f,
|
|
||||||
0x00000010,0x00000009,0x00040020,0x00000011,0x00000009,0x0000000d,0x0006001e,0x00000014,
|
|
||||||
0x0000000d,0x00000007,0x00000006,0x00000006,0x00040020,0x00000015,0x00000002,0x00000014,
|
|
||||||
0x0004003b,0x00000015,0x00000016,0x00000002,0x00040020,0x00000017,0x00000002,0x0000000d,
|
|
||||||
0x00040017,0x0000001b,0x00000006,0x00000003,0x00040020,0x0000001c,0x00000001,0x0000001b,
|
|
||||||
0x0004003b,0x0000001c,0x0000001d,0x00000001,0x0004002b,0x00000006,0x0000001f,0x3f800000,
|
|
||||||
0x00040020,0x00000025,0x00000003,0x00000007,0x00040017,0x00000027,0x00000006,0x00000002,
|
|
||||||
0x00040020,0x00000028,0x00000003,0x00000027,0x0004003b,0x00000028,0x00000029,0x00000003,
|
|
||||||
0x00040020,0x0000002a,0x00000001,0x00000027,0x0004003b,0x0000002a,0x0000002b,0x00000001,
|
|
||||||
0x0004002b,0x00000006,0x0000002d,0x40000000,0x0004002b,0x0000000b,0x0000002e,0x00000002,
|
|
||||||
0x00040020,0x0000002f,0x00000002,0x00000006,0x00040015,0x00000033,0x00000020,0x00000000,
|
|
||||||
0x0004002b,0x00000033,0x00000034,0x00000001,0x00040020,0x00000035,0x00000001,0x00000006,
|
|
||||||
0x0004002b,0x00000006,0x00000038,0x4051eb85,0x0004002b,0x00000033,0x0000003f,0x00000000,
|
|
||||||
0x0004002b,0x00000006,0x00000046,0x3d4ccccd,0x0004002b,0x0000000b,0x00000049,0x00000003,
|
|
||||||
0x00040020,0x0000004c,0x00000003,0x00000006,0x0004003b,0x00000025,0x00000051,0x00000003,
|
|
||||||
0x0004002b,0x0000000b,0x00000052,0x00000001,0x00040020,0x00000053,0x00000002,0x00000007,
|
|
||||||
0x0004003b,0x0000004c,0x00000056,0x00000003,0x0004002b,0x00000006,0x00000057,0x00000000,
|
|
||||||
0x00050036,0x00000002,0x00000004,0x00000000,0x00000003,0x000200f8,0x00000005,0x00050041,
|
|
||||||
0x00000011,0x00000012,0x00000010,0x0000000c,0x0004003d,0x0000000d,0x00000013,0x00000012,
|
|
||||||
0x00050041,0x00000017,0x00000018,0x00000016,0x0000000c,0x0004003d,0x0000000d,0x00000019,
|
|
||||||
0x00000018,0x00050092,0x0000000d,0x0000001a,0x00000013,0x00000019,0x0004003d,0x0000001b,
|
|
||||||
0x0000001e,0x0000001d,0x00050051,0x00000006,0x00000020,0x0000001e,0x00000000,0x00050051,
|
|
||||||
0x00000006,0x00000021,0x0000001e,0x00000001,0x00050051,0x00000006,0x00000022,0x0000001e,
|
|
||||||
0x00000002,0x00070050,0x00000007,0x00000023,0x00000020,0x00000021,0x00000022,0x0000001f,
|
|
||||||
0x00050091,0x00000007,0x00000024,0x0000001a,0x00000023,0x00050041,0x00000025,0x00000026,
|
|
||||||
0x0000000a,0x0000000c,0x0003003e,0x00000026,0x00000024,0x0004003d,0x00000027,0x0000002c,
|
|
||||||
0x0000002b,0x00050041,0x0000002f,0x00000030,0x00000016,0x0000002e,0x0004003d,0x00000006,
|
|
||||||
0x00000031,0x00000030,0x00050085,0x00000006,0x00000032,0x0000002d,0x00000031,0x00050041,
|
|
||||||
0x00000035,0x00000036,0x0000002b,0x00000034,0x0004003d,0x00000006,0x00000037,0x00000036,
|
|
||||||
0x00050085,0x00000006,0x00000039,0x00000037,0x00000038,0x00050081,0x00000006,0x0000003a,
|
|
||||||
0x00000032,0x00000039,0x0006000c,0x00000006,0x0000003b,0x00000001,0x0000000d,0x0000003a,
|
|
||||||
0x00050041,0x0000002f,0x0000003c,0x00000016,0x0000002e,0x0004003d,0x00000006,0x0000003d,
|
|
||||||
0x0000003c,0x00050085,0x00000006,0x0000003e,0x0000002d,0x0000003d,0x00050041,0x00000035,
|
|
||||||
0x00000040,0x0000002b,0x0000003f,0x0004003d,0x00000006,0x00000041,0x00000040,0x00050085,
|
|
||||||
0x00000006,0x00000042,0x00000041,0x00000038,0x00050081,0x00000006,0x00000043,0x0000003e,
|
|
||||||
0x00000042,0x0006000c,0x00000006,0x00000044,0x00000001,0x0000000d,0x00000043,0x00050050,
|
|
||||||
0x00000027,0x00000045,0x0000003b,0x00000044,0x0005008e,0x00000027,0x00000047,0x00000045,
|
|
||||||
0x00000046,0x00050081,0x00000027,0x00000048,0x0000002c,0x00000047,0x0003003e,0x00000029,
|
|
||||||
0x00000048,0x00050041,0x0000002f,0x0000004a,0x00000016,0x00000049,0x0004003d,0x00000006,
|
|
||||||
0x0000004b,0x0000004a,0x00050041,0x0000004c,0x0000004d,0x00000029,0x0000003f,0x0004003d,
|
|
||||||
0x00000006,0x0000004e,0x0000004d,0x00050081,0x00000006,0x0000004f,0x0000004e,0x0000004b,
|
|
||||||
0x00050041,0x0000004c,0x00000050,0x00000029,0x0000003f,0x0003003e,0x00000050,0x0000004f,
|
|
||||||
0x00050041,0x00000053,0x00000054,0x00000016,0x00000052,0x0004003d,0x00000007,0x00000055,
|
|
||||||
0x00000054,0x0003003e,0x00000051,0x00000055,0x0003003e,0x00000056,0x00000057,0x000100fd,
|
|
||||||
0x00010038
|
|
||||||
};
|
|
|
@ -1,64 +0,0 @@
|
||||||
// 1011.0.0
|
|
||||||
#pragma once
|
|
||||||
const uint32_t postprocess_frag_spv[] = {
|
|
||||||
0x07230203,0x00010000,0x0008000a,0x00000046,0x00000000,0x00020011,0x00000001,0x0006000b,
|
|
||||||
0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001,
|
|
||||||
0x0007000f,0x00000004,0x00000004,0x6e69616d,0x00000000,0x0000000b,0x0000002c,0x00030010,
|
|
||||||
0x00000004,0x00000007,0x00030003,0x00000002,0x000001c2,0x00090004,0x415f4c47,0x735f4252,
|
|
||||||
0x72617065,0x5f657461,0x64616873,0x6f5f7265,0x63656a62,0x00007374,0x00040005,0x00000004,
|
|
||||||
0x6e69616d,0x00000000,0x00060005,0x00000009,0x6f6e6e75,0x65546d72,0x6f6f4378,0x00006472,
|
|
||||||
0x00050005,0x0000000b,0x43786574,0x64726f6f,0x00000000,0x00060005,0x0000000d,0x68737550,
|
|
||||||
0x736e6f43,0x746e6174,0x00000000,0x00060006,0x0000000d,0x00000000,0x74736f70,0x636f7270,
|
|
||||||
0x00737365,0x00050006,0x0000000d,0x00000001,0x6d6d6167,0x00000061,0x00060006,0x0000000d,
|
|
||||||
0x00000002,0x57726373,0x68746469,0x00000000,0x00060006,0x0000000d,0x00000003,0x48726373,
|
|
||||||
0x68676965,0x00000074,0x00050006,0x0000000d,0x00000004,0x7366666f,0x00587465,0x00050006,
|
|
||||||
0x0000000d,0x00000005,0x7366666f,0x00597465,0x00030005,0x0000000f,0x00006370,0x00060005,
|
|
||||||
0x0000002c,0x67617266,0x746e656d,0x6f6c6f43,0x00000072,0x00050005,0x00000030,0x78655473,
|
|
||||||
0x65727574,0x00000000,0x00040047,0x0000000b,0x0000001e,0x00000000,0x00050048,0x0000000d,
|
|
||||||
0x00000000,0x00000023,0x00000044,0x00050048,0x0000000d,0x00000001,0x00000023,0x00000048,
|
|
||||||
0x00050048,0x0000000d,0x00000002,0x00000023,0x0000004c,0x00050048,0x0000000d,0x00000003,
|
|
||||||
0x00000023,0x00000050,0x00050048,0x0000000d,0x00000004,0x00000023,0x00000054,0x00050048,
|
|
||||||
0x0000000d,0x00000005,0x00000023,0x00000058,0x00030047,0x0000000d,0x00000002,0x00040047,
|
|
||||||
0x0000002c,0x0000001e,0x00000000,0x00040047,0x00000030,0x00000022,0x00000000,0x00040047,
|
|
||||||
0x00000030,0x00000021,0x00000000,0x00020013,0x00000002,0x00030021,0x00000003,0x00000002,
|
|
||||||
0x00030016,0x00000006,0x00000020,0x00040017,0x00000007,0x00000006,0x00000002,0x00040020,
|
|
||||||
0x00000008,0x00000007,0x00000007,0x00040020,0x0000000a,0x00000001,0x00000007,0x0004003b,
|
|
||||||
0x0000000a,0x0000000b,0x00000001,0x0008001e,0x0000000d,0x00000006,0x00000006,0x00000006,
|
|
||||||
0x00000006,0x00000006,0x00000006,0x00040020,0x0000000e,0x00000009,0x0000000d,0x0004003b,
|
|
||||||
0x0000000e,0x0000000f,0x00000009,0x00040015,0x00000010,0x00000020,0x00000001,0x0004002b,
|
|
||||||
0x00000010,0x00000011,0x00000002,0x00040020,0x00000012,0x00000009,0x00000006,0x0004002b,
|
|
||||||
0x00000010,0x00000015,0x00000003,0x0004002b,0x00000010,0x0000001a,0x00000004,0x0004002b,
|
|
||||||
0x00000010,0x0000001d,0x00000005,0x0004002b,0x00000010,0x00000022,0x00000000,0x0004002b,
|
|
||||||
0x00000006,0x00000025,0x00000000,0x00020014,0x00000026,0x00040017,0x0000002a,0x00000006,
|
|
||||||
0x00000004,0x00040020,0x0000002b,0x00000003,0x0000002a,0x0004003b,0x0000002b,0x0000002c,
|
|
||||||
0x00000003,0x00090019,0x0000002d,0x00000006,0x00000001,0x00000000,0x00000000,0x00000000,
|
|
||||||
0x00000001,0x00000000,0x0003001b,0x0000002e,0x0000002d,0x00040020,0x0000002f,0x00000000,
|
|
||||||
0x0000002e,0x0004003b,0x0000002f,0x00000030,0x00000000,0x00040017,0x00000034,0x00000006,
|
|
||||||
0x00000003,0x0004002b,0x00000006,0x00000036,0x3fc00000,0x0004002b,0x00000010,0x00000038,
|
|
||||||
0x00000001,0x0004002b,0x00000006,0x0000003d,0x3f800000,0x00050036,0x00000002,0x00000004,
|
|
||||||
0x00000000,0x00000003,0x000200f8,0x00000005,0x0004003b,0x00000008,0x00000009,0x00000007,
|
|
||||||
0x0004003d,0x00000007,0x0000000c,0x0000000b,0x00050041,0x00000012,0x00000013,0x0000000f,
|
|
||||||
0x00000011,0x0004003d,0x00000006,0x00000014,0x00000013,0x00050041,0x00000012,0x00000016,
|
|
||||||
0x0000000f,0x00000015,0x0004003d,0x00000006,0x00000017,0x00000016,0x00050050,0x00000007,
|
|
||||||
0x00000018,0x00000014,0x00000017,0x00050085,0x00000007,0x00000019,0x0000000c,0x00000018,
|
|
||||||
0x00050041,0x00000012,0x0000001b,0x0000000f,0x0000001a,0x0004003d,0x00000006,0x0000001c,
|
|
||||||
0x0000001b,0x00050041,0x00000012,0x0000001e,0x0000000f,0x0000001d,0x0004003d,0x00000006,
|
|
||||||
0x0000001f,0x0000001e,0x00050050,0x00000007,0x00000020,0x0000001c,0x0000001f,0x00050081,
|
|
||||||
0x00000007,0x00000021,0x00000019,0x00000020,0x0003003e,0x00000009,0x00000021,0x00050041,
|
|
||||||
0x00000012,0x00000023,0x0000000f,0x00000022,0x0004003d,0x00000006,0x00000024,0x00000023,
|
|
||||||
0x000500ba,0x00000026,0x00000027,0x00000024,0x00000025,0x000300f7,0x00000029,0x00000000,
|
|
||||||
0x000400fa,0x00000027,0x00000028,0x00000042,0x000200f8,0x00000028,0x0004003d,0x0000002e,
|
|
||||||
0x00000031,0x00000030,0x0004003d,0x00000007,0x00000032,0x00000009,0x00070058,0x0000002a,
|
|
||||||
0x00000033,0x00000031,0x00000032,0x00000002,0x00000025,0x0008004f,0x00000034,0x00000035,
|
|
||||||
0x00000033,0x00000033,0x00000000,0x00000001,0x00000002,0x0005008e,0x00000034,0x00000037,
|
|
||||||
0x00000035,0x00000036,0x00050041,0x00000012,0x00000039,0x0000000f,0x00000038,0x0004003d,
|
|
||||||
0x00000006,0x0000003a,0x00000039,0x00060050,0x00000034,0x0000003b,0x0000003a,0x0000003a,
|
|
||||||
0x0000003a,0x0007000c,0x00000034,0x0000003c,0x00000001,0x0000001a,0x00000037,0x0000003b,
|
|
||||||
0x00050051,0x00000006,0x0000003e,0x0000003c,0x00000000,0x00050051,0x00000006,0x0000003f,
|
|
||||||
0x0000003c,0x00000001,0x00050051,0x00000006,0x00000040,0x0000003c,0x00000002,0x00070050,
|
|
||||||
0x0000002a,0x00000041,0x0000003e,0x0000003f,0x00000040,0x0000003d,0x0003003e,0x0000002c,
|
|
||||||
0x00000041,0x000200f9,0x00000029,0x000200f8,0x00000042,0x0004003d,0x0000002e,0x00000043,
|
|
||||||
0x00000030,0x0004003d,0x00000007,0x00000044,0x00000009,0x00070058,0x0000002a,0x00000045,
|
|
||||||
0x00000043,0x00000044,0x00000002,0x00000025,0x0003003e,0x0000002c,0x00000045,0x000200f9,
|
|
||||||
0x00000029,0x000200f8,0x00000029,0x000100fd,0x00010038
|
|
||||||
};
|
|
|
@ -1,36 +0,0 @@
|
||||||
// 8.13.3559
|
|
||||||
#pragma once
|
|
||||||
const uint32_t postprocess_vert_spv[] = {
|
|
||||||
0x07230203,0x00010000,0x00080008,0x00000029,0x00000000,0x00020011,0x00000001,0x0006000b,
|
|
||||||
0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001,
|
|
||||||
0x0008000f,0x00000000,0x00000004,0x6e69616d,0x00000000,0x00000009,0x0000000c,0x0000001a,
|
|
||||||
0x00030003,0x00000002,0x000001c2,0x00090004,0x415f4c47,0x735f4252,0x72617065,0x5f657461,
|
|
||||||
0x64616873,0x6f5f7265,0x63656a62,0x00007374,0x00040005,0x00000004,0x6e69616d,0x00000000,
|
|
||||||
0x00050005,0x00000009,0x43786574,0x64726f6f,0x00000000,0x00060005,0x0000000c,0x565f6c67,
|
|
||||||
0x65747265,0x646e4978,0x00007865,0x00060005,0x00000018,0x505f6c67,0x65567265,0x78657472,
|
|
||||||
0x00000000,0x00060006,0x00000018,0x00000000,0x505f6c67,0x7469736f,0x006e6f69,0x00030005,
|
|
||||||
0x0000001a,0x00000000,0x00040047,0x00000009,0x0000001e,0x00000000,0x00040047,0x0000000c,
|
|
||||||
0x0000000b,0x0000002a,0x00050048,0x00000018,0x00000000,0x0000000b,0x00000000,0x00030047,
|
|
||||||
0x00000018,0x00000002,0x00020013,0x00000002,0x00030021,0x00000003,0x00000002,0x00030016,
|
|
||||||
0x00000006,0x00000020,0x00040017,0x00000007,0x00000006,0x00000002,0x00040020,0x00000008,
|
|
||||||
0x00000003,0x00000007,0x0004003b,0x00000008,0x00000009,0x00000003,0x00040015,0x0000000a,
|
|
||||||
0x00000020,0x00000001,0x00040020,0x0000000b,0x00000001,0x0000000a,0x0004003b,0x0000000b,
|
|
||||||
0x0000000c,0x00000001,0x0004002b,0x0000000a,0x0000000e,0x00000001,0x0004002b,0x0000000a,
|
|
||||||
0x00000010,0x00000002,0x00040017,0x00000017,0x00000006,0x00000004,0x0003001e,0x00000018,
|
|
||||||
0x00000017,0x00040020,0x00000019,0x00000003,0x00000018,0x0004003b,0x00000019,0x0000001a,
|
|
||||||
0x00000003,0x0004002b,0x0000000a,0x0000001b,0x00000000,0x0004002b,0x00000006,0x0000001d,
|
|
||||||
0x40000000,0x0004002b,0x00000006,0x0000001f,0xbf800000,0x0004002b,0x00000006,0x00000022,
|
|
||||||
0x00000000,0x0004002b,0x00000006,0x00000023,0x3f800000,0x00040020,0x00000027,0x00000003,
|
|
||||||
0x00000017,0x00050036,0x00000002,0x00000004,0x00000000,0x00000003,0x000200f8,0x00000005,
|
|
||||||
0x0004003d,0x0000000a,0x0000000d,0x0000000c,0x000500c4,0x0000000a,0x0000000f,0x0000000d,
|
|
||||||
0x0000000e,0x000500c7,0x0000000a,0x00000011,0x0000000f,0x00000010,0x0004006f,0x00000006,
|
|
||||||
0x00000012,0x00000011,0x0004003d,0x0000000a,0x00000013,0x0000000c,0x000500c7,0x0000000a,
|
|
||||||
0x00000014,0x00000013,0x00000010,0x0004006f,0x00000006,0x00000015,0x00000014,0x00050050,
|
|
||||||
0x00000007,0x00000016,0x00000012,0x00000015,0x0003003e,0x00000009,0x00000016,0x0004003d,
|
|
||||||
0x00000007,0x0000001c,0x00000009,0x0005008e,0x00000007,0x0000001e,0x0000001c,0x0000001d,
|
|
||||||
0x00050050,0x00000007,0x00000020,0x0000001f,0x0000001f,0x00050081,0x00000007,0x00000021,
|
|
||||||
0x0000001e,0x00000020,0x00050051,0x00000006,0x00000024,0x00000021,0x00000000,0x00050051,
|
|
||||||
0x00000006,0x00000025,0x00000021,0x00000001,0x00070050,0x00000017,0x00000026,0x00000024,
|
|
||||||
0x00000025,0x00000022,0x00000023,0x00050041,0x00000027,0x00000028,0x0000001a,0x0000001b,
|
|
||||||
0x0003003e,0x00000028,0x00000026,0x000100fd,0x00010038
|
|
||||||
};
|
|
|
@ -1,46 +0,0 @@
|
||||||
// 8.13.3559
|
|
||||||
#pragma once
|
|
||||||
const uint32_t shadows_vert_spv[] = {
|
|
||||||
0x07230203,0x00010000,0x00080008,0x0000002b,0x00000000,0x00020011,0x00000001,0x0006000b,
|
|
||||||
0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001,
|
|
||||||
0x0008000f,0x00000000,0x00000004,0x6e69616d,0x00000000,0x0000000a,0x0000001d,0x00000027,
|
|
||||||
0x00030003,0x00000002,0x000001c2,0x00090004,0x415f4c47,0x735f4252,0x72617065,0x5f657461,
|
|
||||||
0x64616873,0x6f5f7265,0x63656a62,0x00007374,0x00040005,0x00000004,0x6e69616d,0x00000000,
|
|
||||||
0x00060005,0x00000008,0x505f6c67,0x65567265,0x78657472,0x00000000,0x00060006,0x00000008,
|
|
||||||
0x00000000,0x505f6c67,0x7469736f,0x006e6f69,0x00030005,0x0000000a,0x00000000,0x00060005,
|
|
||||||
0x0000000e,0x68737550,0x736e6f43,0x746e6174,0x00000000,0x00060006,0x0000000e,0x00000000,
|
|
||||||
0x614d7076,0x78697274,0x00000000,0x00030005,0x00000010,0x00006370,0x00070005,0x00000014,
|
|
||||||
0x66696e55,0x426d726f,0x65666675,0x6a624f72,0x00746365,0x00050006,0x00000014,0x00000000,
|
|
||||||
0x65646f6d,0x0000006c,0x00030005,0x00000016,0x006f6275,0x00050005,0x0000001d,0x65566e69,
|
|
||||||
0x78657472,0x00000000,0x00040005,0x00000027,0x6f6c6f63,0x00000072,0x00050048,0x00000008,
|
|
||||||
0x00000000,0x0000000b,0x00000000,0x00030047,0x00000008,0x00000002,0x00040048,0x0000000e,
|
|
||||||
0x00000000,0x00000005,0x00050048,0x0000000e,0x00000000,0x00000023,0x00000000,0x00050048,
|
|
||||||
0x0000000e,0x00000000,0x00000007,0x00000010,0x00030047,0x0000000e,0x00000002,0x00040048,
|
|
||||||
0x00000014,0x00000000,0x00000005,0x00050048,0x00000014,0x00000000,0x00000023,0x00000000,
|
|
||||||
0x00050048,0x00000014,0x00000000,0x00000007,0x00000010,0x00030047,0x00000014,0x00000002,
|
|
||||||
0x00040047,0x00000016,0x00000022,0x00000000,0x00040047,0x00000016,0x00000021,0x00000000,
|
|
||||||
0x00040047,0x0000001d,0x0000001e,0x00000000,0x00040047,0x00000027,0x0000001e,0x00000000,
|
|
||||||
0x00020013,0x00000002,0x00030021,0x00000003,0x00000002,0x00030016,0x00000006,0x00000020,
|
|
||||||
0x00040017,0x00000007,0x00000006,0x00000004,0x0003001e,0x00000008,0x00000007,0x00040020,
|
|
||||||
0x00000009,0x00000003,0x00000008,0x0004003b,0x00000009,0x0000000a,0x00000003,0x00040015,
|
|
||||||
0x0000000b,0x00000020,0x00000001,0x0004002b,0x0000000b,0x0000000c,0x00000000,0x00040018,
|
|
||||||
0x0000000d,0x00000007,0x00000004,0x0003001e,0x0000000e,0x0000000d,0x00040020,0x0000000f,
|
|
||||||
0x00000009,0x0000000e,0x0004003b,0x0000000f,0x00000010,0x00000009,0x00040020,0x00000011,
|
|
||||||
0x00000009,0x0000000d,0x0003001e,0x00000014,0x0000000d,0x00040020,0x00000015,0x00000002,
|
|
||||||
0x00000014,0x0004003b,0x00000015,0x00000016,0x00000002,0x00040020,0x00000017,0x00000002,
|
|
||||||
0x0000000d,0x00040017,0x0000001b,0x00000006,0x00000003,0x00040020,0x0000001c,0x00000001,
|
|
||||||
0x0000001b,0x0004003b,0x0000001c,0x0000001d,0x00000001,0x0004002b,0x00000006,0x0000001f,
|
|
||||||
0x3f800000,0x00040020,0x00000025,0x00000003,0x00000007,0x0004003b,0x00000025,0x00000027,
|
|
||||||
0x00000003,0x0004002b,0x00000006,0x00000028,0x00000000,0x0004002b,0x00000006,0x00000029,
|
|
||||||
0x3f000000,0x0007002c,0x00000007,0x0000002a,0x00000028,0x00000028,0x00000028,0x00000029,
|
|
||||||
0x00050036,0x00000002,0x00000004,0x00000000,0x00000003,0x000200f8,0x00000005,0x00050041,
|
|
||||||
0x00000011,0x00000012,0x00000010,0x0000000c,0x0004003d,0x0000000d,0x00000013,0x00000012,
|
|
||||||
0x00050041,0x00000017,0x00000018,0x00000016,0x0000000c,0x0004003d,0x0000000d,0x00000019,
|
|
||||||
0x00000018,0x00050092,0x0000000d,0x0000001a,0x00000013,0x00000019,0x0004003d,0x0000001b,
|
|
||||||
0x0000001e,0x0000001d,0x00050051,0x00000006,0x00000020,0x0000001e,0x00000000,0x00050051,
|
|
||||||
0x00000006,0x00000021,0x0000001e,0x00000001,0x00050051,0x00000006,0x00000022,0x0000001e,
|
|
||||||
0x00000002,0x00070050,0x00000007,0x00000023,0x00000020,0x00000021,0x00000022,0x0000001f,
|
|
||||||
0x00050091,0x00000007,0x00000024,0x0000001a,0x00000023,0x00050041,0x00000025,0x00000026,
|
|
||||||
0x0000000a,0x0000000c,0x0003003e,0x00000026,0x00000024,0x0003003e,0x00000027,0x0000002a,
|
|
||||||
0x000100fd,0x00010038
|
|
||||||
};
|
|
|
@ -1,54 +0,0 @@
|
||||||
// 8.13.3559
|
|
||||||
#pragma once
|
|
||||||
const uint32_t skybox_vert_spv[] = {
|
|
||||||
0x07230203,0x00010000,0x00080008,0x00000032,0x00000000,0x00020011,0x00000001,0x0006000b,
|
|
||||||
0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001,
|
|
||||||
0x000b000f,0x00000000,0x00000004,0x6e69616d,0x00000000,0x0000000a,0x0000001d,0x00000029,
|
|
||||||
0x0000002b,0x0000002d,0x00000030,0x00030003,0x00000002,0x000001c2,0x00090004,0x415f4c47,
|
|
||||||
0x735f4252,0x72617065,0x5f657461,0x64616873,0x6f5f7265,0x63656a62,0x00007374,0x00040005,
|
|
||||||
0x00000004,0x6e69616d,0x00000000,0x00060005,0x00000008,0x505f6c67,0x65567265,0x78657472,
|
|
||||||
0x00000000,0x00060006,0x00000008,0x00000000,0x505f6c67,0x7469736f,0x006e6f69,0x00030005,
|
|
||||||
0x0000000a,0x00000000,0x00060005,0x0000000e,0x68737550,0x736e6f43,0x746e6174,0x00000000,
|
|
||||||
0x00060006,0x0000000e,0x00000000,0x614d7076,0x78697274,0x00000000,0x00030005,0x00000010,
|
|
||||||
0x00006370,0x00070005,0x00000014,0x66696e55,0x426d726f,0x65666675,0x6a624f72,0x00746365,
|
|
||||||
0x00050006,0x00000014,0x00000000,0x65646f6d,0x0000006c,0x00030005,0x00000016,0x006f6275,
|
|
||||||
0x00050005,0x0000001d,0x65566e69,0x78657472,0x00000000,0x00050005,0x00000029,0x43786574,
|
|
||||||
0x64726f6f,0x00000000,0x00050005,0x0000002b,0x65546e69,0x6f6f4378,0x00006472,0x00040005,
|
|
||||||
0x0000002d,0x6f6c6f63,0x00000072,0x00050005,0x00000030,0x65725461,0x6c6f6873,0x00000064,
|
|
||||||
0x00050048,0x00000008,0x00000000,0x0000000b,0x00000000,0x00030047,0x00000008,0x00000002,
|
|
||||||
0x00040048,0x0000000e,0x00000000,0x00000005,0x00050048,0x0000000e,0x00000000,0x00000023,
|
|
||||||
0x00000000,0x00050048,0x0000000e,0x00000000,0x00000007,0x00000010,0x00030047,0x0000000e,
|
|
||||||
0x00000002,0x00040048,0x00000014,0x00000000,0x00000005,0x00050048,0x00000014,0x00000000,
|
|
||||||
0x00000023,0x00000000,0x00050048,0x00000014,0x00000000,0x00000007,0x00000010,0x00030047,
|
|
||||||
0x00000014,0x00000002,0x00040047,0x00000016,0x00000022,0x00000001,0x00040047,0x00000016,
|
|
||||||
0x00000021,0x00000000,0x00040047,0x0000001d,0x0000001e,0x00000000,0x00040047,0x00000029,
|
|
||||||
0x0000001e,0x00000000,0x00040047,0x0000002b,0x0000001e,0x00000001,0x00040047,0x0000002d,
|
|
||||||
0x0000001e,0x00000001,0x00040047,0x00000030,0x0000001e,0x00000002,0x00020013,0x00000002,
|
|
||||||
0x00030021,0x00000003,0x00000002,0x00030016,0x00000006,0x00000020,0x00040017,0x00000007,
|
|
||||||
0x00000006,0x00000004,0x0003001e,0x00000008,0x00000007,0x00040020,0x00000009,0x00000003,
|
|
||||||
0x00000008,0x0004003b,0x00000009,0x0000000a,0x00000003,0x00040015,0x0000000b,0x00000020,
|
|
||||||
0x00000001,0x0004002b,0x0000000b,0x0000000c,0x00000000,0x00040018,0x0000000d,0x00000007,
|
|
||||||
0x00000004,0x0003001e,0x0000000e,0x0000000d,0x00040020,0x0000000f,0x00000009,0x0000000e,
|
|
||||||
0x0004003b,0x0000000f,0x00000010,0x00000009,0x00040020,0x00000011,0x00000009,0x0000000d,
|
|
||||||
0x0003001e,0x00000014,0x0000000d,0x00040020,0x00000015,0x00000002,0x00000014,0x0004003b,
|
|
||||||
0x00000015,0x00000016,0x00000002,0x00040020,0x00000017,0x00000002,0x0000000d,0x00040017,
|
|
||||||
0x0000001b,0x00000006,0x00000003,0x00040020,0x0000001c,0x00000001,0x0000001b,0x0004003b,
|
|
||||||
0x0000001c,0x0000001d,0x00000001,0x0004002b,0x00000006,0x0000001f,0x3f800000,0x00040020,
|
|
||||||
0x00000025,0x00000003,0x00000007,0x00040017,0x00000027,0x00000006,0x00000002,0x00040020,
|
|
||||||
0x00000028,0x00000003,0x00000027,0x0004003b,0x00000028,0x00000029,0x00000003,0x00040020,
|
|
||||||
0x0000002a,0x00000001,0x00000027,0x0004003b,0x0000002a,0x0000002b,0x00000001,0x0004003b,
|
|
||||||
0x00000025,0x0000002d,0x00000003,0x0007002c,0x00000007,0x0000002e,0x0000001f,0x0000001f,
|
|
||||||
0x0000001f,0x0000001f,0x00040020,0x0000002f,0x00000003,0x00000006,0x0004003b,0x0000002f,
|
|
||||||
0x00000030,0x00000003,0x0004002b,0x00000006,0x00000031,0x00000000,0x00050036,0x00000002,
|
|
||||||
0x00000004,0x00000000,0x00000003,0x000200f8,0x00000005,0x00050041,0x00000011,0x00000012,
|
|
||||||
0x00000010,0x0000000c,0x0004003d,0x0000000d,0x00000013,0x00000012,0x00050041,0x00000017,
|
|
||||||
0x00000018,0x00000016,0x0000000c,0x0004003d,0x0000000d,0x00000019,0x00000018,0x00050092,
|
|
||||||
0x0000000d,0x0000001a,0x00000013,0x00000019,0x0004003d,0x0000001b,0x0000001e,0x0000001d,
|
|
||||||
0x00050051,0x00000006,0x00000020,0x0000001e,0x00000000,0x00050051,0x00000006,0x00000021,
|
|
||||||
0x0000001e,0x00000001,0x00050051,0x00000006,0x00000022,0x0000001e,0x00000002,0x00070050,
|
|
||||||
0x00000007,0x00000023,0x00000020,0x00000021,0x00000022,0x0000001f,0x00050091,0x00000007,
|
|
||||||
0x00000024,0x0000001a,0x00000023,0x00050041,0x00000025,0x00000026,0x0000000a,0x0000000c,
|
|
||||||
0x0003003e,0x00000026,0x00000024,0x0004003d,0x00000027,0x0000002c,0x0000002b,0x0003003e,
|
|
||||||
0x00000029,0x0000002c,0x0003003e,0x0000002d,0x0000002e,0x0003003e,0x00000030,0x00000031,
|
|
||||||
0x000100fd,0x00010038
|
|
||||||
};
|
|
|
@ -1,49 +0,0 @@
|
||||||
// 8.13.3559
|
|
||||||
#pragma once
|
|
||||||
const uint32_t sprite_vert_spv[] = {
|
|
||||||
0x07230203,0x00010000,0x00080008,0x0000002f,0x00000000,0x00020011,0x00000001,0x0006000b,
|
|
||||||
0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001,
|
|
||||||
0x000b000f,0x00000000,0x00000004,0x6e69616d,0x00000000,0x0000000a,0x00000016,0x00000022,
|
|
||||||
0x00000024,0x00000026,0x0000002d,0x00030003,0x00000002,0x000001c2,0x00090004,0x415f4c47,
|
|
||||||
0x735f4252,0x72617065,0x5f657461,0x64616873,0x6f5f7265,0x63656a62,0x00007374,0x00040005,
|
|
||||||
0x00000004,0x6e69616d,0x00000000,0x00060005,0x00000008,0x505f6c67,0x65567265,0x78657472,
|
|
||||||
0x00000000,0x00060006,0x00000008,0x00000000,0x505f6c67,0x7469736f,0x006e6f69,0x00030005,
|
|
||||||
0x0000000a,0x00000000,0x00060005,0x0000000e,0x68737550,0x736e6f43,0x746e6174,0x00000000,
|
|
||||||
0x00060006,0x0000000e,0x00000000,0x4d70766d,0x69727461,0x00000078,0x00050006,0x0000000e,
|
|
||||||
0x00000001,0x68706c61,0x00000061,0x00030005,0x00000010,0x00006370,0x00050005,0x00000016,
|
|
||||||
0x65566e69,0x78657472,0x00000000,0x00050005,0x00000022,0x43786574,0x64726f6f,0x00000000,
|
|
||||||
0x00050005,0x00000024,0x65546e69,0x6f6f4378,0x00006472,0x00040005,0x00000026,0x6f6c6f63,
|
|
||||||
0x00000072,0x00050005,0x0000002d,0x65725461,0x6c6f6873,0x00000064,0x00050048,0x00000008,
|
|
||||||
0x00000000,0x0000000b,0x00000000,0x00030047,0x00000008,0x00000002,0x00040048,0x0000000e,
|
|
||||||
0x00000000,0x00000005,0x00050048,0x0000000e,0x00000000,0x00000023,0x00000000,0x00050048,
|
|
||||||
0x0000000e,0x00000000,0x00000007,0x00000010,0x00050048,0x0000000e,0x00000001,0x00000023,
|
|
||||||
0x00000040,0x00030047,0x0000000e,0x00000002,0x00040047,0x00000016,0x0000001e,0x00000000,
|
|
||||||
0x00040047,0x00000022,0x0000001e,0x00000000,0x00040047,0x00000024,0x0000001e,0x00000001,
|
|
||||||
0x00040047,0x00000026,0x0000001e,0x00000001,0x00040047,0x0000002d,0x0000001e,0x00000002,
|
|
||||||
0x00020013,0x00000002,0x00030021,0x00000003,0x00000002,0x00030016,0x00000006,0x00000020,
|
|
||||||
0x00040017,0x00000007,0x00000006,0x00000004,0x0003001e,0x00000008,0x00000007,0x00040020,
|
|
||||||
0x00000009,0x00000003,0x00000008,0x0004003b,0x00000009,0x0000000a,0x00000003,0x00040015,
|
|
||||||
0x0000000b,0x00000020,0x00000001,0x0004002b,0x0000000b,0x0000000c,0x00000000,0x00040018,
|
|
||||||
0x0000000d,0x00000007,0x00000004,0x0004001e,0x0000000e,0x0000000d,0x00000006,0x00040020,
|
|
||||||
0x0000000f,0x00000009,0x0000000e,0x0004003b,0x0000000f,0x00000010,0x00000009,0x00040020,
|
|
||||||
0x00000011,0x00000009,0x0000000d,0x00040017,0x00000014,0x00000006,0x00000003,0x00040020,
|
|
||||||
0x00000015,0x00000001,0x00000014,0x0004003b,0x00000015,0x00000016,0x00000001,0x0004002b,
|
|
||||||
0x00000006,0x00000018,0x3f800000,0x00040020,0x0000001e,0x00000003,0x00000007,0x00040017,
|
|
||||||
0x00000020,0x00000006,0x00000002,0x00040020,0x00000021,0x00000003,0x00000020,0x0004003b,
|
|
||||||
0x00000021,0x00000022,0x00000003,0x00040020,0x00000023,0x00000001,0x00000020,0x0004003b,
|
|
||||||
0x00000023,0x00000024,0x00000001,0x0004003b,0x0000001e,0x00000026,0x00000003,0x0004002b,
|
|
||||||
0x0000000b,0x00000027,0x00000001,0x00040020,0x00000028,0x00000009,0x00000006,0x00040020,
|
|
||||||
0x0000002c,0x00000003,0x00000006,0x0004003b,0x0000002c,0x0000002d,0x00000003,0x0004002b,
|
|
||||||
0x00000006,0x0000002e,0x3d886595,0x00050036,0x00000002,0x00000004,0x00000000,0x00000003,
|
|
||||||
0x000200f8,0x00000005,0x00050041,0x00000011,0x00000012,0x00000010,0x0000000c,0x0004003d,
|
|
||||||
0x0000000d,0x00000013,0x00000012,0x0004003d,0x00000014,0x00000017,0x00000016,0x00050051,
|
|
||||||
0x00000006,0x00000019,0x00000017,0x00000000,0x00050051,0x00000006,0x0000001a,0x00000017,
|
|
||||||
0x00000001,0x00050051,0x00000006,0x0000001b,0x00000017,0x00000002,0x00070050,0x00000007,
|
|
||||||
0x0000001c,0x00000019,0x0000001a,0x0000001b,0x00000018,0x00050091,0x00000007,0x0000001d,
|
|
||||||
0x00000013,0x0000001c,0x00050041,0x0000001e,0x0000001f,0x0000000a,0x0000000c,0x0003003e,
|
|
||||||
0x0000001f,0x0000001d,0x0004003d,0x00000020,0x00000025,0x00000024,0x0003003e,0x00000022,
|
|
||||||
0x00000025,0x00050041,0x00000028,0x00000029,0x00000010,0x00000027,0x0004003d,0x00000006,
|
|
||||||
0x0000002a,0x00000029,0x00070050,0x00000007,0x0000002b,0x00000018,0x00000018,0x00000018,
|
|
||||||
0x0000002a,0x0003003e,0x00000026,0x0000002b,0x0003003e,0x0000002d,0x0000002e,0x000100fd,
|
|
||||||
0x00010038
|
|
||||||
};
|
|
|
@ -1,154 +0,0 @@
|
||||||
// 1011.0.0
|
|
||||||
#pragma once
|
|
||||||
const uint32_t world_warp_frag_spv[] = {
|
|
||||||
0x07230203,0x00010000,0x0008000a,0x000000c1,0x00000000,0x00020011,0x00000001,0x0006000b,
|
|
||||||
0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001,
|
|
||||||
0x0007000f,0x00000004,0x00000004,0x6e69616d,0x00000000,0x00000019,0x000000b9,0x00030010,
|
|
||||||
0x00000004,0x00000007,0x00030003,0x00000002,0x000001c2,0x00090004,0x415f4c47,0x735f4252,
|
|
||||||
0x72617065,0x5f657461,0x64616873,0x6f5f7265,0x63656a62,0x00007374,0x00040005,0x00000004,
|
|
||||||
0x6e69616d,0x00000000,0x00040005,0x00000009,0x53726373,0x00657a69,0x00060005,0x0000000a,
|
|
||||||
0x68737550,0x736e6f43,0x746e6174,0x00000000,0x00050006,0x0000000a,0x00000000,0x656d6974,
|
|
||||||
0x00000000,0x00050006,0x0000000a,0x00000001,0x6c616373,0x00000065,0x00060006,0x0000000a,
|
|
||||||
0x00000002,0x57726373,0x68746469,0x00000000,0x00060006,0x0000000a,0x00000003,0x48726373,
|
|
||||||
0x68676965,0x00000074,0x00050006,0x0000000a,0x00000004,0x7366666f,0x00587465,0x00050006,
|
|
||||||
0x0000000a,0x00000005,0x7366666f,0x00597465,0x00060006,0x0000000a,0x00000006,0x65786970,
|
|
||||||
0x7a69536c,0x00000065,0x00050006,0x0000000a,0x00000007,0x64666572,0x00586665,0x00050006,
|
|
||||||
0x0000000a,0x00000008,0x64666572,0x00596665,0x00060006,0x0000000a,0x00000009,0x64666572,
|
|
||||||
0x69576665,0x00687464,0x00070006,0x0000000a,0x0000000a,0x64666572,0x65486665,0x74686769,
|
|
||||||
0x00000000,0x00030005,0x0000000c,0x00006370,0x00050005,0x00000016,0x67617266,0x726f6f43,
|
|
||||||
0x00000064,0x00060005,0x00000019,0x465f6c67,0x43676172,0x64726f6f,0x00000000,0x00030005,
|
|
||||||
0x00000024,0x00007675,0x00040005,0x00000029,0x6e694d78,0x00000000,0x00040005,0x0000002d,
|
|
||||||
0x78614d78,0x00000000,0x00040005,0x00000034,0x6e694d79,0x00000000,0x00040005,0x00000038,
|
|
||||||
0x78614d79,0x00000000,0x00030005,0x00000066,0x00007873,0x00030005,0x00000077,0x00007973,
|
|
||||||
0x00040005,0x00000086,0x69685378,0x00007466,0x00040005,0x00000091,0x69685379,0x00007466,
|
|
||||||
0x00050005,0x0000009a,0x74736964,0x6974726f,0x00006e6f,0x00060005,0x000000b9,0x67617266,
|
|
||||||
0x746e656d,0x6f6c6f43,0x00000072,0x00050005,0x000000bd,0x78655473,0x65727574,0x00000000,
|
|
||||||
0x00050048,0x0000000a,0x00000000,0x00000023,0x00000044,0x00050048,0x0000000a,0x00000001,
|
|
||||||
0x00000023,0x00000048,0x00050048,0x0000000a,0x00000002,0x00000023,0x0000004c,0x00050048,
|
|
||||||
0x0000000a,0x00000003,0x00000023,0x00000050,0x00050048,0x0000000a,0x00000004,0x00000023,
|
|
||||||
0x00000054,0x00050048,0x0000000a,0x00000005,0x00000023,0x00000058,0x00050048,0x0000000a,
|
|
||||||
0x00000006,0x00000023,0x0000005c,0x00050048,0x0000000a,0x00000007,0x00000023,0x00000060,
|
|
||||||
0x00050048,0x0000000a,0x00000008,0x00000023,0x00000064,0x00050048,0x0000000a,0x00000009,
|
|
||||||
0x00000023,0x00000068,0x00050048,0x0000000a,0x0000000a,0x00000023,0x0000006c,0x00030047,
|
|
||||||
0x0000000a,0x00000002,0x00040047,0x00000019,0x0000000b,0x0000000f,0x00040047,0x000000b9,
|
|
||||||
0x0000001e,0x00000000,0x00040047,0x000000bd,0x00000022,0x00000000,0x00040047,0x000000bd,
|
|
||||||
0x00000021,0x00000000,0x00020013,0x00000002,0x00030021,0x00000003,0x00000002,0x00030016,
|
|
||||||
0x00000006,0x00000020,0x00040017,0x00000007,0x00000006,0x00000002,0x00040020,0x00000008,
|
|
||||||
0x00000007,0x00000007,0x000d001e,0x0000000a,0x00000006,0x00000006,0x00000006,0x00000006,
|
|
||||||
0x00000006,0x00000006,0x00000006,0x00000006,0x00000006,0x00000006,0x00000006,0x00040020,
|
|
||||||
0x0000000b,0x00000009,0x0000000a,0x0004003b,0x0000000b,0x0000000c,0x00000009,0x00040015,
|
|
||||||
0x0000000d,0x00000020,0x00000001,0x0004002b,0x0000000d,0x0000000e,0x00000002,0x00040020,
|
|
||||||
0x0000000f,0x00000009,0x00000006,0x0004002b,0x0000000d,0x00000012,0x00000003,0x00040017,
|
|
||||||
0x00000017,0x00000006,0x00000004,0x00040020,0x00000018,0x00000001,0x00000017,0x0004003b,
|
|
||||||
0x00000018,0x00000019,0x00000001,0x0004002b,0x0000000d,0x0000001c,0x00000004,0x0004002b,
|
|
||||||
0x0000000d,0x0000001f,0x00000005,0x00040020,0x00000028,0x00000007,0x00000006,0x0004002b,
|
|
||||||
0x0000000d,0x0000002a,0x00000007,0x0004002b,0x0000000d,0x00000030,0x00000009,0x0004002b,
|
|
||||||
0x0000000d,0x00000035,0x00000008,0x0004002b,0x0000000d,0x0000003b,0x0000000a,0x00020014,
|
|
||||||
0x0000003f,0x0004002b,0x0000000d,0x00000040,0x00000000,0x0004002b,0x00000006,0x00000043,
|
|
||||||
0x00000000,0x00040015,0x00000047,0x00000020,0x00000000,0x0004002b,0x00000047,0x00000048,
|
|
||||||
0x00000000,0x0004002b,0x00000047,0x00000057,0x00000001,0x0004002b,0x0000000d,0x00000067,
|
|
||||||
0x00000001,0x0004002b,0x00000006,0x0000006c,0x40000000,0x0004002b,0x00000006,0x0000008c,
|
|
||||||
0x40490e56,0x0004002b,0x00000006,0x0000008e,0x41200000,0x0004002b,0x00000006,0x000000a4,
|
|
||||||
0x3bda3c21,0x0004002b,0x0000000d,0x000000a9,0x00000006,0x0005002c,0x00000007,0x000000b2,
|
|
||||||
0x00000043,0x00000043,0x0004002b,0x00000006,0x000000b4,0x3f000000,0x0005002c,0x00000007,
|
|
||||||
0x000000b5,0x000000b4,0x000000b4,0x00040020,0x000000b8,0x00000003,0x00000017,0x0004003b,
|
|
||||||
0x000000b8,0x000000b9,0x00000003,0x00090019,0x000000ba,0x00000006,0x00000001,0x00000000,
|
|
||||||
0x00000000,0x00000000,0x00000001,0x00000000,0x0003001b,0x000000bb,0x000000ba,0x00040020,
|
|
||||||
0x000000bc,0x00000000,0x000000bb,0x0004003b,0x000000bc,0x000000bd,0x00000000,0x00050036,
|
|
||||||
0x00000002,0x00000004,0x00000000,0x00000003,0x000200f8,0x00000005,0x0004003b,0x00000008,
|
|
||||||
0x00000009,0x00000007,0x0004003b,0x00000008,0x00000016,0x00000007,0x0004003b,0x00000008,
|
|
||||||
0x00000024,0x00000007,0x0004003b,0x00000028,0x00000029,0x00000007,0x0004003b,0x00000028,
|
|
||||||
0x0000002d,0x00000007,0x0004003b,0x00000028,0x00000034,0x00000007,0x0004003b,0x00000028,
|
|
||||||
0x00000038,0x00000007,0x0004003b,0x00000028,0x00000066,0x00000007,0x0004003b,0x00000028,
|
|
||||||
0x00000077,0x00000007,0x0004003b,0x00000028,0x00000086,0x00000007,0x0004003b,0x00000028,
|
|
||||||
0x00000091,0x00000007,0x0004003b,0x00000008,0x0000009a,0x00000007,0x00050041,0x0000000f,
|
|
||||||
0x00000010,0x0000000c,0x0000000e,0x0004003d,0x00000006,0x00000011,0x00000010,0x00050041,
|
|
||||||
0x0000000f,0x00000013,0x0000000c,0x00000012,0x0004003d,0x00000006,0x00000014,0x00000013,
|
|
||||||
0x00050050,0x00000007,0x00000015,0x00000011,0x00000014,0x0003003e,0x00000009,0x00000015,
|
|
||||||
0x0004003d,0x00000017,0x0000001a,0x00000019,0x0007004f,0x00000007,0x0000001b,0x0000001a,
|
|
||||||
0x0000001a,0x00000000,0x00000001,0x00050041,0x0000000f,0x0000001d,0x0000000c,0x0000001c,
|
|
||||||
0x0004003d,0x00000006,0x0000001e,0x0000001d,0x00050041,0x0000000f,0x00000020,0x0000000c,
|
|
||||||
0x0000001f,0x0004003d,0x00000006,0x00000021,0x00000020,0x00050050,0x00000007,0x00000022,
|
|
||||||
0x0000001e,0x00000021,0x00050083,0x00000007,0x00000023,0x0000001b,0x00000022,0x0003003e,
|
|
||||||
0x00000016,0x00000023,0x0004003d,0x00000007,0x00000025,0x00000016,0x0004003d,0x00000007,
|
|
||||||
0x00000026,0x00000009,0x00050088,0x00000007,0x00000027,0x00000025,0x00000026,0x0003003e,
|
|
||||||
0x00000024,0x00000027,0x00050041,0x0000000f,0x0000002b,0x0000000c,0x0000002a,0x0004003d,
|
|
||||||
0x00000006,0x0000002c,0x0000002b,0x0003003e,0x00000029,0x0000002c,0x00050041,0x0000000f,
|
|
||||||
0x0000002e,0x0000000c,0x0000002a,0x0004003d,0x00000006,0x0000002f,0x0000002e,0x00050041,
|
|
||||||
0x0000000f,0x00000031,0x0000000c,0x00000030,0x0004003d,0x00000006,0x00000032,0x00000031,
|
|
||||||
0x00050081,0x00000006,0x00000033,0x0000002f,0x00000032,0x0003003e,0x0000002d,0x00000033,
|
|
||||||
0x00050041,0x0000000f,0x00000036,0x0000000c,0x00000035,0x0004003d,0x00000006,0x00000037,
|
|
||||||
0x00000036,0x0003003e,0x00000034,0x00000037,0x00050041,0x0000000f,0x00000039,0x0000000c,
|
|
||||||
0x00000035,0x0004003d,0x00000006,0x0000003a,0x00000039,0x00050041,0x0000000f,0x0000003c,
|
|
||||||
0x0000000c,0x0000003b,0x0004003d,0x00000006,0x0000003d,0x0000003c,0x00050081,0x00000006,
|
|
||||||
0x0000003e,0x0000003a,0x0000003d,0x0003003e,0x00000038,0x0000003e,0x00050041,0x0000000f,
|
|
||||||
0x00000041,0x0000000c,0x00000040,0x0004003d,0x00000006,0x00000042,0x00000041,0x000500ba,
|
|
||||||
0x0000003f,0x00000044,0x00000042,0x00000043,0x000300f7,0x00000046,0x00000000,0x000400fa,
|
|
||||||
0x00000044,0x00000045,0x00000046,0x000200f8,0x00000045,0x00050041,0x00000028,0x00000049,
|
|
||||||
0x00000016,0x00000048,0x0004003d,0x00000006,0x0000004a,0x00000049,0x0004003d,0x00000006,
|
|
||||||
0x0000004b,0x00000029,0x000500ba,0x0000003f,0x0000004c,0x0000004a,0x0000004b,0x000200f9,
|
|
||||||
0x00000046,0x000200f8,0x00000046,0x000700f5,0x0000003f,0x0000004d,0x00000044,0x00000005,
|
|
||||||
0x0000004c,0x00000045,0x000300f7,0x0000004f,0x00000000,0x000400fa,0x0000004d,0x0000004e,
|
|
||||||
0x0000004f,0x000200f8,0x0000004e,0x00050041,0x00000028,0x00000050,0x00000016,0x00000048,
|
|
||||||
0x0004003d,0x00000006,0x00000051,0x00000050,0x0004003d,0x00000006,0x00000052,0x0000002d,
|
|
||||||
0x000500b8,0x0000003f,0x00000053,0x00000051,0x00000052,0x000200f9,0x0000004f,0x000200f8,
|
|
||||||
0x0000004f,0x000700f5,0x0000003f,0x00000054,0x0000004d,0x00000046,0x00000053,0x0000004e,
|
|
||||||
0x000300f7,0x00000056,0x00000000,0x000400fa,0x00000054,0x00000055,0x00000056,0x000200f8,
|
|
||||||
0x00000055,0x00050041,0x00000028,0x00000058,0x00000016,0x00000057,0x0004003d,0x00000006,
|
|
||||||
0x00000059,0x00000058,0x0004003d,0x00000006,0x0000005a,0x00000034,0x000500ba,0x0000003f,
|
|
||||||
0x0000005b,0x00000059,0x0000005a,0x000200f9,0x00000056,0x000200f8,0x00000056,0x000700f5,
|
|
||||||
0x0000003f,0x0000005c,0x00000054,0x0000004f,0x0000005b,0x00000055,0x000300f7,0x0000005e,
|
|
||||||
0x00000000,0x000400fa,0x0000005c,0x0000005d,0x0000005e,0x000200f8,0x0000005d,0x00050041,
|
|
||||||
0x00000028,0x0000005f,0x00000016,0x00000057,0x0004003d,0x00000006,0x00000060,0x0000005f,
|
|
||||||
0x0004003d,0x00000006,0x00000061,0x00000038,0x000500b8,0x0000003f,0x00000062,0x00000060,
|
|
||||||
0x00000061,0x000200f9,0x0000005e,0x000200f8,0x0000005e,0x000700f5,0x0000003f,0x00000063,
|
|
||||||
0x0000005c,0x00000056,0x00000062,0x0000005d,0x000300f7,0x00000065,0x00000000,0x000400fa,
|
|
||||||
0x00000063,0x00000064,0x00000065,0x000200f8,0x00000064,0x00050041,0x0000000f,0x00000068,
|
|
||||||
0x0000000c,0x00000067,0x0004003d,0x00000006,0x00000069,0x00000068,0x00050041,0x0000000f,
|
|
||||||
0x0000006a,0x0000000c,0x0000000e,0x0004003d,0x00000006,0x0000006b,0x0000006a,0x00050088,
|
|
||||||
0x00000006,0x0000006d,0x0000006b,0x0000006c,0x00050041,0x00000028,0x0000006e,0x00000016,
|
|
||||||
0x00000048,0x0004003d,0x00000006,0x0000006f,0x0000006e,0x00050083,0x00000006,0x00000070,
|
|
||||||
0x0000006d,0x0000006f,0x0006000c,0x00000006,0x00000071,0x00000001,0x00000004,0x00000070,
|
|
||||||
0x00050085,0x00000006,0x00000072,0x00000071,0x0000006c,0x00050041,0x0000000f,0x00000073,
|
|
||||||
0x0000000c,0x0000000e,0x0004003d,0x00000006,0x00000074,0x00000073,0x00050088,0x00000006,
|
|
||||||
0x00000075,0x00000072,0x00000074,0x00050083,0x00000006,0x00000076,0x00000069,0x00000075,
|
|
||||||
0x0003003e,0x00000066,0x00000076,0x00050041,0x0000000f,0x00000078,0x0000000c,0x00000067,
|
|
||||||
0x0004003d,0x00000006,0x00000079,0x00000078,0x00050041,0x0000000f,0x0000007a,0x0000000c,
|
|
||||||
0x00000012,0x0004003d,0x00000006,0x0000007b,0x0000007a,0x00050088,0x00000006,0x0000007c,
|
|
||||||
0x0000007b,0x0000006c,0x00050041,0x00000028,0x0000007d,0x00000016,0x00000057,0x0004003d,
|
|
||||||
0x00000006,0x0000007e,0x0000007d,0x00050083,0x00000006,0x0000007f,0x0000007c,0x0000007e,
|
|
||||||
0x0006000c,0x00000006,0x00000080,0x00000001,0x00000004,0x0000007f,0x00050085,0x00000006,
|
|
||||||
0x00000081,0x00000080,0x0000006c,0x00050041,0x0000000f,0x00000082,0x0000000c,0x00000012,
|
|
||||||
0x0004003d,0x00000006,0x00000083,0x00000082,0x00050088,0x00000006,0x00000084,0x00000081,
|
|
||||||
0x00000083,0x00050083,0x00000006,0x00000085,0x00000079,0x00000084,0x0003003e,0x00000077,
|
|
||||||
0x00000085,0x00050041,0x0000000f,0x00000087,0x0000000c,0x00000040,0x0004003d,0x00000006,
|
|
||||||
0x00000088,0x00000087,0x00050085,0x00000006,0x00000089,0x0000006c,0x00000088,0x00050041,
|
|
||||||
0x00000028,0x0000008a,0x00000024,0x00000057,0x0004003d,0x00000006,0x0000008b,0x0000008a,
|
|
||||||
0x00050085,0x00000006,0x0000008d,0x0000008b,0x0000008c,0x00050085,0x00000006,0x0000008f,
|
|
||||||
0x0000008d,0x0000008e,0x00050081,0x00000006,0x00000090,0x00000089,0x0000008f,0x0003003e,
|
|
||||||
0x00000086,0x00000090,0x00050041,0x0000000f,0x00000092,0x0000000c,0x00000040,0x0004003d,
|
|
||||||
0x00000006,0x00000093,0x00000092,0x00050085,0x00000006,0x00000094,0x0000006c,0x00000093,
|
|
||||||
0x00050041,0x00000028,0x00000095,0x00000024,0x00000048,0x0004003d,0x00000006,0x00000096,
|
|
||||||
0x00000095,0x00050085,0x00000006,0x00000097,0x00000096,0x0000008c,0x00050085,0x00000006,
|
|
||||||
0x00000098,0x00000097,0x0000008e,0x00050081,0x00000006,0x00000099,0x00000094,0x00000098,
|
|
||||||
0x0003003e,0x00000091,0x00000099,0x0004003d,0x00000006,0x0000009b,0x00000086,0x0006000c,
|
|
||||||
0x00000006,0x0000009c,0x00000001,0x0000000d,0x0000009b,0x0004003d,0x00000006,0x0000009d,
|
|
||||||
0x00000066,0x00050085,0x00000006,0x0000009e,0x0000009c,0x0000009d,0x0004003d,0x00000006,
|
|
||||||
0x0000009f,0x00000091,0x0006000c,0x00000006,0x000000a0,0x00000001,0x0000000d,0x0000009f,
|
|
||||||
0x0004003d,0x00000006,0x000000a1,0x00000077,0x00050085,0x00000006,0x000000a2,0x000000a0,
|
|
||||||
0x000000a1,0x00050050,0x00000007,0x000000a3,0x0000009e,0x000000a2,0x0005008e,0x00000007,
|
|
||||||
0x000000a5,0x000000a3,0x000000a4,0x0003003e,0x0000009a,0x000000a5,0x0004003d,0x00000007,
|
|
||||||
0x000000a6,0x0000009a,0x0004003d,0x00000007,0x000000a7,0x00000024,0x00050081,0x00000007,
|
|
||||||
0x000000a8,0x000000a7,0x000000a6,0x0003003e,0x00000024,0x000000a8,0x000200f9,0x00000065,
|
|
||||||
0x000200f8,0x00000065,0x00050041,0x0000000f,0x000000aa,0x0000000c,0x000000a9,0x0004003d,
|
|
||||||
0x00000006,0x000000ab,0x000000aa,0x0004003d,0x00000007,0x000000ac,0x00000024,0x00050050,
|
|
||||||
0x00000007,0x000000ad,0x000000ab,0x000000ab,0x00050088,0x00000007,0x000000ae,0x000000ac,
|
|
||||||
0x000000ad,0x0003003e,0x00000024,0x000000ae,0x0004003d,0x00000007,0x000000af,0x00000024,
|
|
||||||
0x0004003d,0x00000007,0x000000b0,0x00000009,0x00050085,0x00000007,0x000000b1,0x000000af,
|
|
||||||
0x000000b0,0x0004003d,0x00000007,0x000000b3,0x00000009,0x00050083,0x00000007,0x000000b6,
|
|
||||||
0x000000b3,0x000000b5,0x0008000c,0x00000007,0x000000b7,0x00000001,0x0000002b,0x000000b1,
|
|
||||||
0x000000b2,0x000000b6,0x0003003e,0x00000024,0x000000b7,0x0004003d,0x000000bb,0x000000be,
|
|
||||||
0x000000bd,0x0004003d,0x00000007,0x000000bf,0x00000024,0x00070058,0x00000017,0x000000c0,
|
|
||||||
0x000000be,0x000000bf,0x00000002,0x00000043,0x0003003e,0x000000b9,0x000000c0,0x000100fd,
|
|
||||||
0x00010038
|
|
||||||
};
|
|
|
@ -1,33 +0,0 @@
|
||||||
// 8.13.3559
|
|
||||||
#pragma once
|
|
||||||
const uint32_t world_warp_vert_spv[] = {
|
|
||||||
0x07230203,0x00010000,0x00080008,0x00000024,0x00000000,0x00020011,0x00000001,0x0006000b,
|
|
||||||
0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001,
|
|
||||||
0x0007000f,0x00000000,0x00000004,0x6e69616d,0x00000000,0x00000017,0x0000001b,0x00030003,
|
|
||||||
0x00000002,0x000001c2,0x00090004,0x415f4c47,0x735f4252,0x72617065,0x5f657461,0x64616873,
|
|
||||||
0x6f5f7265,0x63656a62,0x00007374,0x00040005,0x00000004,0x6e69616d,0x00000000,0x00050005,
|
|
||||||
0x0000000c,0x69736f70,0x6e6f6974,0x00000073,0x00060005,0x00000015,0x505f6c67,0x65567265,
|
|
||||||
0x78657472,0x00000000,0x00060006,0x00000015,0x00000000,0x505f6c67,0x7469736f,0x006e6f69,
|
|
||||||
0x00030005,0x00000017,0x00000000,0x00060005,0x0000001b,0x565f6c67,0x65747265,0x646e4978,
|
|
||||||
0x00007865,0x00050048,0x00000015,0x00000000,0x0000000b,0x00000000,0x00030047,0x00000015,
|
|
||||||
0x00000002,0x00040047,0x0000001b,0x0000000b,0x0000002a,0x00020013,0x00000002,0x00030021,
|
|
||||||
0x00000003,0x00000002,0x00030016,0x00000006,0x00000020,0x00040017,0x00000007,0x00000006,
|
|
||||||
0x00000004,0x00040015,0x00000008,0x00000020,0x00000000,0x0004002b,0x00000008,0x00000009,
|
|
||||||
0x00000003,0x0004001c,0x0000000a,0x00000007,0x00000009,0x00040020,0x0000000b,0x00000007,
|
|
||||||
0x0000000a,0x0004002b,0x00000006,0x0000000d,0xbf800000,0x0004002b,0x00000006,0x0000000e,
|
|
||||||
0x00000000,0x0004002b,0x00000006,0x0000000f,0x3f800000,0x0007002c,0x00000007,0x00000010,
|
|
||||||
0x0000000d,0x0000000d,0x0000000e,0x0000000f,0x0004002b,0x00000006,0x00000011,0x40400000,
|
|
||||||
0x0007002c,0x00000007,0x00000012,0x00000011,0x0000000d,0x0000000e,0x0000000f,0x0007002c,
|
|
||||||
0x00000007,0x00000013,0x0000000d,0x00000011,0x0000000e,0x0000000f,0x0006002c,0x0000000a,
|
|
||||||
0x00000014,0x00000010,0x00000012,0x00000013,0x0003001e,0x00000015,0x00000007,0x00040020,
|
|
||||||
0x00000016,0x00000003,0x00000015,0x0004003b,0x00000016,0x00000017,0x00000003,0x00040015,
|
|
||||||
0x00000018,0x00000020,0x00000001,0x0004002b,0x00000018,0x00000019,0x00000000,0x00040020,
|
|
||||||
0x0000001a,0x00000001,0x00000018,0x0004003b,0x0000001a,0x0000001b,0x00000001,0x0004002b,
|
|
||||||
0x00000018,0x0000001d,0x00000003,0x00040020,0x0000001f,0x00000007,0x00000007,0x00040020,
|
|
||||||
0x00000022,0x00000003,0x00000007,0x00050036,0x00000002,0x00000004,0x00000000,0x00000003,
|
|
||||||
0x000200f8,0x00000005,0x0004003b,0x0000000b,0x0000000c,0x00000007,0x0003003e,0x0000000c,
|
|
||||||
0x00000014,0x0004003d,0x00000018,0x0000001c,0x0000001b,0x0005008b,0x00000018,0x0000001e,
|
|
||||||
0x0000001c,0x0000001d,0x00050041,0x0000001f,0x00000020,0x0000000c,0x0000001e,0x0004003d,
|
|
||||||
0x00000007,0x00000021,0x00000020,0x00050041,0x00000022,0x00000023,0x00000017,0x00000019,
|
|
||||||
0x0003003e,0x00000023,0x00000021,0x000100fd,0x00010038
|
|
||||||
};
|
|
|
@ -1,205 +0,0 @@
|
||||||
/*
|
|
||||||
Copyright (C) 2018-2019 Krzysztof Kondrak
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or
|
|
||||||
modify it under the terms of the GNU General Public License
|
|
||||||
as published by the Free Software Foundation; either version 2
|
|
||||||
of the License, or (at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
||||||
|
|
||||||
See the GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "header/local.h"
|
|
||||||
|
|
||||||
// internal helper
|
|
||||||
static void
|
|
||||||
copyBuffer(const VkBuffer * src, VkBuffer * dst, VkDeviceSize size)
|
|
||||||
{
|
|
||||||
VkCommandBuffer commandBuffer = QVk_CreateCommandBuffer(&vk_transferCommandPool,
|
|
||||||
VK_COMMAND_BUFFER_LEVEL_PRIMARY);
|
|
||||||
QVk_BeginCommand(&commandBuffer);
|
|
||||||
|
|
||||||
VkBufferCopy copyRegion = {
|
|
||||||
.srcOffset = 0,
|
|
||||||
.dstOffset = 0,
|
|
||||||
.size = size
|
|
||||||
};
|
|
||||||
vkCmdCopyBuffer(commandBuffer, *src, *dst, 1, ©Region);
|
|
||||||
|
|
||||||
QVk_SubmitCommand(&commandBuffer, &vk_device.transferQueue);
|
|
||||||
vkFreeCommandBuffers(vk_device.logical, vk_transferCommandPool, 1,
|
|
||||||
&commandBuffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
// internal helper
|
|
||||||
static void
|
|
||||||
createStagedBuffer(const void *data, VkDeviceSize size, qvkbuffer_t * dstBuffer,
|
|
||||||
qvkbufferopts_t bufferOpts)
|
|
||||||
{
|
|
||||||
qvkstagingbuffer_t *stgBuffer;
|
|
||||||
stgBuffer = (qvkstagingbuffer_t *) malloc(sizeof(qvkstagingbuffer_t));
|
|
||||||
VK_VERIFY(QVk_CreateStagingBuffer(size, stgBuffer,
|
|
||||||
VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT |
|
|
||||||
VK_MEMORY_PROPERTY_HOST_COHERENT_BIT,
|
|
||||||
VK_MEMORY_PROPERTY_HOST_CACHED_BIT));
|
|
||||||
|
|
||||||
if (data)
|
|
||||||
{
|
|
||||||
void *dst;
|
|
||||||
// staging buffers in vkQuake2 are required to be host coherent,
|
|
||||||
// so no flushing/invalidation is involved
|
|
||||||
dst = buffer_map(&stgBuffer->resource);
|
|
||||||
memcpy(dst, data, (size_t) size);
|
|
||||||
buffer_unmap(&stgBuffer->resource);
|
|
||||||
}
|
|
||||||
|
|
||||||
VK_VERIFY(QVk_CreateBuffer(size, dstBuffer, bufferOpts));
|
|
||||||
copyBuffer(&stgBuffer->resource.buffer, &dstBuffer->resource.buffer, size);
|
|
||||||
|
|
||||||
QVk_FreeStagingBuffer(stgBuffer);
|
|
||||||
free(stgBuffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
VkResult
|
|
||||||
QVk_CreateBuffer(VkDeviceSize size, qvkbuffer_t *dstBuffer,
|
|
||||||
const qvkbufferopts_t options)
|
|
||||||
{
|
|
||||||
VkBufferCreateInfo bcInfo = {
|
|
||||||
.sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO,
|
|
||||||
.pNext = NULL,
|
|
||||||
.flags = 0,
|
|
||||||
.size = size,
|
|
||||||
.usage = options.usage,
|
|
||||||
.sharingMode = VK_SHARING_MODE_EXCLUSIVE,
|
|
||||||
.queueFamilyIndexCount = 0,
|
|
||||||
.pQueueFamilyIndices = NULL,
|
|
||||||
};
|
|
||||||
|
|
||||||
// separate transfer queue makes sense only if the buffer is targetted
|
|
||||||
// for being transfered to GPU, so ignore it if it's CPU-only
|
|
||||||
uint32_t queueFamilies[] = {
|
|
||||||
(uint32_t)vk_device.gfxFamilyIndex,
|
|
||||||
(uint32_t)vk_device.transferFamilyIndex
|
|
||||||
};
|
|
||||||
|
|
||||||
if (vk_device.gfxFamilyIndex != vk_device.transferFamilyIndex)
|
|
||||||
{
|
|
||||||
bcInfo.sharingMode = VK_SHARING_MODE_CONCURRENT;
|
|
||||||
bcInfo.queueFamilyIndexCount = 2;
|
|
||||||
bcInfo.pQueueFamilyIndices = queueFamilies;
|
|
||||||
}
|
|
||||||
|
|
||||||
dstBuffer->currentOffset = 0;
|
|
||||||
return buffer_create(&dstBuffer->resource, bcInfo,
|
|
||||||
options.reqMemFlags, options.prefMemFlags);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
QVk_FreeBuffer(qvkbuffer_t *buffer)
|
|
||||||
{
|
|
||||||
buffer_destroy(&buffer->resource);
|
|
||||||
buffer->currentOffset = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
QVk_FreeStagingBuffer(qvkstagingbuffer_t *buffer)
|
|
||||||
{
|
|
||||||
buffer_destroy(&buffer->resource);
|
|
||||||
buffer->currentOffset = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
VkResult
|
|
||||||
QVk_CreateStagingBuffer(VkDeviceSize size, qvkstagingbuffer_t *dstBuffer,
|
|
||||||
VkMemoryPropertyFlags reqMemFlags,
|
|
||||||
VkMemoryPropertyFlags prefMemFlags)
|
|
||||||
{
|
|
||||||
VkBufferCreateInfo bcInfo = {
|
|
||||||
.sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO,
|
|
||||||
.pNext = NULL,
|
|
||||||
.flags = 0,
|
|
||||||
.size = ROUNDUP(size, 1024),
|
|
||||||
.usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT,
|
|
||||||
.sharingMode = VK_SHARING_MODE_EXCLUSIVE,
|
|
||||||
.queueFamilyIndexCount = 0,
|
|
||||||
.pQueueFamilyIndices = NULL,
|
|
||||||
};
|
|
||||||
|
|
||||||
reqMemFlags |= VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT;
|
|
||||||
|
|
||||||
dstBuffer->currentOffset = 0;
|
|
||||||
return buffer_create(&dstBuffer->resource, bcInfo, reqMemFlags,
|
|
||||||
prefMemFlags);
|
|
||||||
}
|
|
||||||
|
|
||||||
VkResult
|
|
||||||
QVk_CreateUniformBuffer(VkDeviceSize size, qvkbuffer_t *dstBuffer,
|
|
||||||
VkMemoryPropertyFlags reqMemFlags,
|
|
||||||
VkMemoryPropertyFlags prefMemFlags)
|
|
||||||
{
|
|
||||||
qvkbufferopts_t dstOpts = {
|
|
||||||
.usage = VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT,
|
|
||||||
.reqMemFlags = reqMemFlags,
|
|
||||||
.prefMemFlags = prefMemFlags,
|
|
||||||
};
|
|
||||||
|
|
||||||
dstOpts.reqMemFlags |= VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT;
|
|
||||||
|
|
||||||
if((vk_device.properties.deviceType != VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU) ||
|
|
||||||
(dstOpts.prefMemFlags & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) == 0)
|
|
||||||
{
|
|
||||||
dstOpts.prefMemFlags |= VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT;
|
|
||||||
}
|
|
||||||
|
|
||||||
return QVk_CreateBuffer(size, dstBuffer, dstOpts);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
QVk_CreateVertexBuffer(const void *data, VkDeviceSize size,
|
|
||||||
qvkbuffer_t *dstBuffer,
|
|
||||||
VkMemoryPropertyFlags reqMemFlags,
|
|
||||||
VkMemoryPropertyFlags prefMemFlags)
|
|
||||||
{
|
|
||||||
qvkbufferopts_t dstOpts = {
|
|
||||||
.usage = VK_BUFFER_USAGE_TRANSFER_DST_BIT |
|
|
||||||
VK_BUFFER_USAGE_VERTEX_BUFFER_BIT,
|
|
||||||
.reqMemFlags = reqMemFlags,
|
|
||||||
.prefMemFlags = prefMemFlags,
|
|
||||||
};
|
|
||||||
|
|
||||||
if((vk_device.properties.deviceType != VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU) ||
|
|
||||||
(dstOpts.prefMemFlags & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) == 0)
|
|
||||||
{
|
|
||||||
dstOpts.prefMemFlags |= VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT;
|
|
||||||
}
|
|
||||||
|
|
||||||
createStagedBuffer(data, size, dstBuffer, dstOpts);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
QVk_CreateIndexBuffer(const void *data, VkDeviceSize size,
|
|
||||||
qvkbuffer_t *dstBuffer,
|
|
||||||
VkMemoryPropertyFlags reqMemFlags,
|
|
||||||
VkMemoryPropertyFlags prefMemFlags)
|
|
||||||
{
|
|
||||||
qvkbufferopts_t dstOpts = {
|
|
||||||
.usage = VK_BUFFER_USAGE_TRANSFER_DST_BIT | VK_BUFFER_USAGE_INDEX_BUFFER_BIT,
|
|
||||||
.reqMemFlags = reqMemFlags,
|
|
||||||
.prefMemFlags = prefMemFlags,
|
|
||||||
};
|
|
||||||
|
|
||||||
if((vk_device.properties.deviceType != VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU) ||
|
|
||||||
(dstOpts.prefMemFlags & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) == 0)
|
|
||||||
{
|
|
||||||
dstOpts.prefMemFlags |= VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT;
|
|
||||||
}
|
|
||||||
|
|
||||||
createStagedBuffer(data, size, dstBuffer, dstOpts);
|
|
||||||
}
|
|
|
@ -1,91 +0,0 @@
|
||||||
/*
|
|
||||||
Copyright (C) 2018-2019 Krzysztof Kondrak
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or
|
|
||||||
modify it under the terms of the GNU General Public License
|
|
||||||
as published by the Free Software Foundation; either version 2
|
|
||||||
of the License, or (at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
||||||
|
|
||||||
See the GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "header/local.h"
|
|
||||||
|
|
||||||
VkResult QVk_BeginCommand(const VkCommandBuffer *commandBuffer)
|
|
||||||
{
|
|
||||||
VkCommandBufferBeginInfo cmdInfo = {
|
|
||||||
.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,
|
|
||||||
.pNext = NULL,
|
|
||||||
.flags = VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT,
|
|
||||||
.pInheritanceInfo = NULL
|
|
||||||
};
|
|
||||||
|
|
||||||
return vkBeginCommandBuffer(*commandBuffer, &cmdInfo);
|
|
||||||
}
|
|
||||||
|
|
||||||
void QVk_SubmitCommand(const VkCommandBuffer *commandBuffer, const VkQueue *queue)
|
|
||||||
{
|
|
||||||
VK_VERIFY(vkEndCommandBuffer(*commandBuffer));
|
|
||||||
|
|
||||||
VkSubmitInfo submitInfo = {
|
|
||||||
.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO,
|
|
||||||
.pNext = NULL,
|
|
||||||
.waitSemaphoreCount = 0,
|
|
||||||
.pWaitSemaphores = NULL,
|
|
||||||
.pWaitDstStageMask = NULL,
|
|
||||||
.commandBufferCount = 1,
|
|
||||||
.pCommandBuffers = commandBuffer,
|
|
||||||
.signalSemaphoreCount = 0,
|
|
||||||
.pSignalSemaphores = NULL
|
|
||||||
};
|
|
||||||
|
|
||||||
VkFenceCreateInfo fCreateInfo = {
|
|
||||||
.sType = VK_STRUCTURE_TYPE_FENCE_CREATE_INFO,
|
|
||||||
.pNext = NULL,
|
|
||||||
.flags = 0
|
|
||||||
};
|
|
||||||
|
|
||||||
VkFence queueFence;
|
|
||||||
VK_VERIFY(vkCreateFence(vk_device.logical, &fCreateInfo, NULL, &queueFence));
|
|
||||||
VK_VERIFY(vkQueueSubmit(*queue, 1, &submitInfo, queueFence));
|
|
||||||
VK_VERIFY(vkWaitForFences(vk_device.logical, 1, &queueFence, VK_TRUE, UINT64_MAX));
|
|
||||||
|
|
||||||
vkDestroyFence(vk_device.logical, queueFence, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
VkResult QVk_CreateCommandPool(VkCommandPool *commandPool, uint32_t queueFamilyIndex)
|
|
||||||
{
|
|
||||||
VkCommandPoolCreateInfo cpCreateInfo = {
|
|
||||||
.sType = VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO,
|
|
||||||
.pNext = NULL,
|
|
||||||
// allow the command pool to be explicitly reset without reallocating it manually during recording each frame
|
|
||||||
.flags = VK_COMMAND_POOL_CREATE_TRANSIENT_BIT,
|
|
||||||
.queueFamilyIndex = queueFamilyIndex
|
|
||||||
};
|
|
||||||
|
|
||||||
return vkCreateCommandPool(vk_device.logical, &cpCreateInfo, NULL, commandPool);
|
|
||||||
}
|
|
||||||
|
|
||||||
VkCommandBuffer QVk_CreateCommandBuffer(const VkCommandPool *commandPool, VkCommandBufferLevel level)
|
|
||||||
{
|
|
||||||
VkCommandBuffer commandBuffer = VK_NULL_HANDLE;
|
|
||||||
VkCommandBufferAllocateInfo allocInfo = {
|
|
||||||
.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO,
|
|
||||||
.pNext = NULL,
|
|
||||||
.commandPool = *commandPool,
|
|
||||||
.level = level,
|
|
||||||
.commandBufferCount = 1
|
|
||||||
};
|
|
||||||
|
|
||||||
VK_VERIFY(vkAllocateCommandBuffers(vk_device.logical, &allocInfo, &commandBuffer));
|
|
||||||
return commandBuffer;
|
|
||||||
}
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,365 +0,0 @@
|
||||||
/*
|
|
||||||
Copyright (C) 2018-2019 Krzysztof Kondrak
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or
|
|
||||||
modify it under the terms of the GNU General Public License
|
|
||||||
as published by the Free Software Foundation; either version 2
|
|
||||||
of the License, or (at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
||||||
|
|
||||||
See the GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "header/local.h"
|
|
||||||
|
|
||||||
// internal helper
|
|
||||||
static qboolean deviceExtensionsSupported(const VkPhysicalDevice *physicalDevice, const char* extensionName)
|
|
||||||
{
|
|
||||||
uint32_t availableExtCount = 0;
|
|
||||||
qboolean vk_extension_available = false;
|
|
||||||
VK_VERIFY(vkEnumerateDeviceExtensionProperties(*physicalDevice, NULL, &availableExtCount, NULL));
|
|
||||||
|
|
||||||
if (availableExtCount > 0)
|
|
||||||
{
|
|
||||||
VkExtensionProperties *extensions = (VkExtensionProperties *)malloc(availableExtCount * sizeof(VkExtensionProperties));
|
|
||||||
VK_VERIFY(vkEnumerateDeviceExtensionProperties(*physicalDevice, NULL, &availableExtCount, extensions));
|
|
||||||
|
|
||||||
for (uint32_t i = 0; i < availableExtCount; ++i)
|
|
||||||
{
|
|
||||||
vk_extension_available |= strcmp(extensions[i].extensionName, extensionName) == 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
free(extensions);
|
|
||||||
}
|
|
||||||
|
|
||||||
// lack of extension disqualifies the device
|
|
||||||
return vk_extension_available;
|
|
||||||
}
|
|
||||||
|
|
||||||
// internal helper
|
|
||||||
static void getBestPhysicalDevice(const VkPhysicalDevice *devices, int preferredIdx, int count)
|
|
||||||
{
|
|
||||||
VkPhysicalDeviceProperties deviceProperties;
|
|
||||||
VkPhysicalDeviceFeatures deviceFeatures;
|
|
||||||
uint32_t queueFamilyCount = 0;
|
|
||||||
|
|
||||||
for (int i = 0; i < count; ++i)
|
|
||||||
{
|
|
||||||
vkGetPhysicalDeviceProperties(devices[i], &deviceProperties);
|
|
||||||
vkGetPhysicalDeviceFeatures(devices[i], &deviceFeatures);
|
|
||||||
vkGetPhysicalDeviceQueueFamilyProperties(devices[i], &queueFamilyCount, NULL);
|
|
||||||
|
|
||||||
if (queueFamilyCount == 0)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
// prefer discrete GPU but if it's the only one available then don't be picky
|
|
||||||
// also - if the user specifies a preferred device, select it
|
|
||||||
qboolean bestProperties = deviceProperties.deviceType == VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU;
|
|
||||||
if (preferredIdx == i || (bestProperties && preferredIdx < 0) || count == 1)
|
|
||||||
{
|
|
||||||
uint32_t formatCount = 0;
|
|
||||||
uint32_t presentModesCount = 0;
|
|
||||||
|
|
||||||
// check if requested device extensions are present
|
|
||||||
qboolean extSupported = deviceExtensionsSupported(&devices[i], VK_KHR_SWAPCHAIN_EXTENSION_NAME);
|
|
||||||
|
|
||||||
// no required extensions? try next device
|
|
||||||
if (!extSupported)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
// if extensions are fine, query surface formats and present modes to see if the device can be used
|
|
||||||
VK_VERIFY(vkGetPhysicalDeviceSurfaceFormatsKHR(devices[i], vk_surface, &formatCount, NULL));
|
|
||||||
VK_VERIFY(vkGetPhysicalDeviceSurfacePresentModesKHR(devices[i], vk_surface, &presentModesCount, NULL));
|
|
||||||
|
|
||||||
if (formatCount == 0 || presentModesCount == 0)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
VkQueueFamilyProperties *queueFamilies = (VkQueueFamilyProperties *)malloc(queueFamilyCount * sizeof(VkQueueFamilyProperties));
|
|
||||||
vkGetPhysicalDeviceQueueFamilyProperties(devices[i], &queueFamilyCount, queueFamilies);
|
|
||||||
|
|
||||||
// secondary check - device is OK if there's at least on queue with VK_QUEUE_GRAPHICS_BIT set
|
|
||||||
for (uint32_t j = 0; j < queueFamilyCount; ++j)
|
|
||||||
{
|
|
||||||
// check if this queue family has support for presentation
|
|
||||||
VkBool32 presentSupported;
|
|
||||||
VK_VERIFY(vkGetPhysicalDeviceSurfaceSupportKHR(devices[i], j, vk_surface, &presentSupported));
|
|
||||||
|
|
||||||
// good optimization would be to find a queue where presentIdx == gfxQueueIdx for less overhead
|
|
||||||
if (vk_device.presentFamilyIndex < 0 && queueFamilies[j].queueCount > 0 && presentSupported)
|
|
||||||
{
|
|
||||||
vk_device.presentFamilyIndex = j;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (vk_device.gfxFamilyIndex < 0 && queueFamilies[j].queueCount > 0 && (queueFamilies[j].queueFlags & VK_QUEUE_GRAPHICS_BIT))
|
|
||||||
{
|
|
||||||
vk_device.gfxFamilyIndex = j;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (vk_device.transferFamilyIndex < 0 && queueFamilies[j].queueCount > 0 && !(queueFamilies[j].queueFlags & VK_QUEUE_GRAPHICS_BIT) && (queueFamilies[j].queueFlags & VK_QUEUE_TRANSFER_BIT))
|
|
||||||
{
|
|
||||||
vk_device.transferFamilyIndex = j;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
free(queueFamilies);
|
|
||||||
|
|
||||||
// accept only device that has support for presentation and drawing
|
|
||||||
if (vk_device.presentFamilyIndex >= 0 && vk_device.gfxFamilyIndex >= 0)
|
|
||||||
{
|
|
||||||
if (vk_device.transferFamilyIndex < 0)
|
|
||||||
{
|
|
||||||
vk_device.transferFamilyIndex = vk_device.gfxFamilyIndex;
|
|
||||||
}
|
|
||||||
|
|
||||||
vk_device.physical = devices[i];
|
|
||||||
vk_device.properties = deviceProperties;
|
|
||||||
vk_device.features = deviceFeatures;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// internal helper
|
|
||||||
static qboolean selectPhysicalDevice(int preferredDeviceIdx)
|
|
||||||
{
|
|
||||||
uint32_t physicalDeviceCount = 0;
|
|
||||||
VK_VERIFY(vkEnumeratePhysicalDevices(vk_instance, &physicalDeviceCount, NULL));
|
|
||||||
|
|
||||||
if (physicalDeviceCount == 0)
|
|
||||||
{
|
|
||||||
R_Printf(PRINT_ALL, "No Vulkan-capable devices found!\n");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
R_Printf(PRINT_ALL, "...found %d Vulkan-capable device(s)\n", physicalDeviceCount);
|
|
||||||
|
|
||||||
VkPhysicalDevice *physicalDevices = (VkPhysicalDevice *)malloc(physicalDeviceCount * sizeof(VkPhysicalDevice));
|
|
||||||
VK_VERIFY(vkEnumeratePhysicalDevices(vk_instance, &physicalDeviceCount, physicalDevices));
|
|
||||||
|
|
||||||
getBestPhysicalDevice(physicalDevices, preferredDeviceIdx < physicalDeviceCount ? preferredDeviceIdx : -1, physicalDeviceCount);
|
|
||||||
free(physicalDevices);
|
|
||||||
|
|
||||||
if (vk_device.physical == VK_NULL_HANDLE)
|
|
||||||
{
|
|
||||||
R_Printf(PRINT_ALL, "Could not find a suitable physical device!\n");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!vk_device.features.samplerAnisotropy)
|
|
||||||
{
|
|
||||||
R_Printf(PRINT_ALL, "...anisotropy filtering is unsupported.\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// internal helper
|
|
||||||
static VkResult createLogicalDevice()
|
|
||||||
{
|
|
||||||
// at least one queue (graphics and present combined) has to be present
|
|
||||||
uint32_t numQueues = 1;
|
|
||||||
float queuePriority = 1.f;
|
|
||||||
VkDeviceQueueCreateInfo queueCreateInfo[3];
|
|
||||||
queueCreateInfo[0].sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO;
|
|
||||||
queueCreateInfo[0].pNext = NULL;
|
|
||||||
queueCreateInfo[0].flags = 0;
|
|
||||||
queueCreateInfo[0].queueFamilyIndex = vk_device.gfxFamilyIndex;
|
|
||||||
queueCreateInfo[0].queueCount = 1;
|
|
||||||
queueCreateInfo[0].pQueuePriorities = &queuePriority;
|
|
||||||
queueCreateInfo[1].sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO;
|
|
||||||
queueCreateInfo[1].pNext = NULL;
|
|
||||||
queueCreateInfo[1].flags = 0;
|
|
||||||
queueCreateInfo[1].queueFamilyIndex = 0;
|
|
||||||
queueCreateInfo[1].queueCount = 1;
|
|
||||||
queueCreateInfo[1].pQueuePriorities = &queuePriority;
|
|
||||||
queueCreateInfo[2].sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO;
|
|
||||||
queueCreateInfo[2].pNext = NULL;
|
|
||||||
queueCreateInfo[2].flags = 0;
|
|
||||||
queueCreateInfo[2].queueFamilyIndex = 0;
|
|
||||||
queueCreateInfo[2].queueCount = 1;
|
|
||||||
queueCreateInfo[2].pQueuePriorities = &queuePriority;
|
|
||||||
|
|
||||||
VkPhysicalDeviceFeatures wantedDeviceFeatures = {
|
|
||||||
.samplerAnisotropy = vk_device.features.samplerAnisotropy,
|
|
||||||
.fillModeNonSolid = vk_device.features.fillModeNonSolid, // for wireframe rendering
|
|
||||||
.sampleRateShading = vk_device.features.sampleRateShading, // for sample shading
|
|
||||||
};
|
|
||||||
|
|
||||||
// a graphics and present queue are different - two queues have to be created
|
|
||||||
if (vk_device.gfxFamilyIndex != vk_device.presentFamilyIndex)
|
|
||||||
{
|
|
||||||
queueCreateInfo[numQueues++].queueFamilyIndex = vk_device.presentFamilyIndex;
|
|
||||||
}
|
|
||||||
|
|
||||||
// a separate transfer queue exists that's different from present and graphics queue?
|
|
||||||
if (vk_device.transferFamilyIndex != vk_device.gfxFamilyIndex && vk_device.transferFamilyIndex != vk_device.presentFamilyIndex)
|
|
||||||
{
|
|
||||||
queueCreateInfo[numQueues++].queueFamilyIndex = vk_device.transferFamilyIndex;
|
|
||||||
}
|
|
||||||
|
|
||||||
const char *deviceExtensions[] = { VK_KHR_SWAPCHAIN_EXTENSION_NAME };
|
|
||||||
|
|
||||||
VkDeviceCreateInfo deviceCreateInfo = {
|
|
||||||
.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO,
|
|
||||||
.pEnabledFeatures = &wantedDeviceFeatures,
|
|
||||||
.ppEnabledExtensionNames = deviceExtensions,
|
|
||||||
.enabledExtensionCount = 1,
|
|
||||||
.enabledLayerCount = 0,
|
|
||||||
.ppEnabledLayerNames = NULL,
|
|
||||||
.queueCreateInfoCount = numQueues,
|
|
||||||
.pQueueCreateInfos = queueCreateInfo
|
|
||||||
};
|
|
||||||
|
|
||||||
#if VK_HEADER_VERSION > 101
|
|
||||||
const char *validationLayers[] = { "VK_LAYER_KHRONOS_validation" };
|
|
||||||
#else
|
|
||||||
const char *validationLayers[] = { "VK_LAYER_LUNARG_standard_validation" };
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (vk_validation->value)
|
|
||||||
{
|
|
||||||
deviceCreateInfo.enabledLayerCount = sizeof(validationLayers)/sizeof(validationLayers[0]);
|
|
||||||
deviceCreateInfo.ppEnabledLayerNames = validationLayers;
|
|
||||||
}
|
|
||||||
|
|
||||||
return vkCreateDevice(vk_device.physical, &deviceCreateInfo, NULL, &vk_device.logical);
|
|
||||||
}
|
|
||||||
|
|
||||||
// internal helper
|
|
||||||
static const char *deviceTypeString(VkPhysicalDeviceType dType)
|
|
||||||
{
|
|
||||||
#define DEVTYPESTR(r) case VK_ ##r: return "VK_"#r
|
|
||||||
switch (dType)
|
|
||||||
{
|
|
||||||
DEVTYPESTR(PHYSICAL_DEVICE_TYPE_OTHER);
|
|
||||||
DEVTYPESTR(PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU);
|
|
||||||
DEVTYPESTR(PHYSICAL_DEVICE_TYPE_DISCRETE_GPU);
|
|
||||||
DEVTYPESTR(PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU);
|
|
||||||
DEVTYPESTR(PHYSICAL_DEVICE_TYPE_CPU);
|
|
||||||
default: return "<unknown>";
|
|
||||||
}
|
|
||||||
#undef DEVTYPESTR
|
|
||||||
return "UNKNOWN DEVICE";
|
|
||||||
}
|
|
||||||
|
|
||||||
// internal helper
|
|
||||||
static const char *vendorNameString(uint32_t vendorId)
|
|
||||||
{
|
|
||||||
switch (vendorId)
|
|
||||||
{
|
|
||||||
case 0x1002: return "AMD";
|
|
||||||
case 0x1010: return "ImgTec";
|
|
||||||
case 0x10DE: return "NVIDIA";
|
|
||||||
case 0x13B5: return "ARM";
|
|
||||||
case 0x5143: return "Qualcomm";
|
|
||||||
case 0x8086: return "Intel";
|
|
||||||
default: return "unknown";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
qboolean QVk_CreateDevice(int preferredDeviceIdx)
|
|
||||||
{
|
|
||||||
if (!selectPhysicalDevice(preferredDeviceIdx))
|
|
||||||
return false;
|
|
||||||
|
|
||||||
vk_config.vendor_name = vendorNameString(vk_device.properties.vendorID);
|
|
||||||
vk_config.device_type = deviceTypeString(vk_device.properties.deviceType);
|
|
||||||
|
|
||||||
VkResult res = createLogicalDevice();
|
|
||||||
if (res != VK_SUCCESS)
|
|
||||||
{
|
|
||||||
R_Printf(PRINT_ALL, "Could not create Vulkan logical device: %s\n", QVk_GetError(res));
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
vkGetDeviceQueue(vk_device.logical, vk_device.gfxFamilyIndex, 0, &vk_device.gfxQueue);
|
|
||||||
vkGetDeviceQueue(vk_device.logical, vk_device.presentFamilyIndex, 0, &vk_device.presentQueue);
|
|
||||||
vkGetDeviceQueue(vk_device.logical, vk_device.transferFamilyIndex, 0, &vk_device.transferQueue);
|
|
||||||
vkGetPhysicalDeviceMemoryProperties(vk_device.physical, &vk_device.mem_properties);
|
|
||||||
// init our memory management
|
|
||||||
vulkan_memory_init();
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// debug label related functions
|
|
||||||
void QVk_DebugSetObjectName(uint64_t obj, VkObjectType objType, const char *objName)
|
|
||||||
{
|
|
||||||
if (qvkSetDebugUtilsObjectNameEXT)
|
|
||||||
{
|
|
||||||
VkDebugUtilsObjectNameInfoEXT oNameInf = {
|
|
||||||
.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT,
|
|
||||||
.pNext = NULL,
|
|
||||||
.objectType = objType,
|
|
||||||
.objectHandle = obj,
|
|
||||||
.pObjectName = objName
|
|
||||||
};
|
|
||||||
|
|
||||||
qvkSetDebugUtilsObjectNameEXT(vk_device.logical, &oNameInf);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void QVk_DebugSetObjectTag(uint64_t obj, VkObjectType objType, uint64_t tagName,
|
|
||||||
size_t tagSize, const void *tagData)
|
|
||||||
{
|
|
||||||
if (qvkSetDebugUtilsObjectTagEXT)
|
|
||||||
{
|
|
||||||
VkDebugUtilsObjectTagInfoEXT oTagInf = {
|
|
||||||
.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_TAG_INFO_EXT,
|
|
||||||
.pNext = NULL,
|
|
||||||
.objectType = objType,
|
|
||||||
.objectHandle = obj,
|
|
||||||
.tagName = tagName,
|
|
||||||
.tagSize = tagSize,
|
|
||||||
.pTag = tagData
|
|
||||||
};
|
|
||||||
|
|
||||||
qvkSetDebugUtilsObjectTagEXT(vk_device.logical, &oTagInf);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void QVk_DebugLabelBegin(const VkCommandBuffer *cmdBuffer, const char *labelName, const float r, const float g, const float b)
|
|
||||||
{
|
|
||||||
if (qvkCmdBeginDebugUtilsLabelEXT)
|
|
||||||
{
|
|
||||||
VkDebugUtilsLabelEXT labelInfo = {
|
|
||||||
.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT,
|
|
||||||
.pNext = NULL,
|
|
||||||
.pLabelName = labelName,
|
|
||||||
.color = { r, g, b, 1.f }
|
|
||||||
};
|
|
||||||
|
|
||||||
qvkCmdBeginDebugUtilsLabelEXT(*cmdBuffer, &labelInfo);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void QVk_DebugLabelEnd(const VkCommandBuffer *cmdBuffer)
|
|
||||||
{
|
|
||||||
if (qvkCmdEndDebugUtilsLabelEXT)
|
|
||||||
{
|
|
||||||
qvkCmdEndDebugUtilsLabelEXT(*cmdBuffer);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void QVk_DebugLabelInsert(const VkCommandBuffer *cmdBuffer, const char *labelName, const float r, const float g, const float b)
|
|
||||||
{
|
|
||||||
if (qvkInsertDebugUtilsLabelEXT)
|
|
||||||
{
|
|
||||||
VkDebugUtilsLabelEXT labelInfo = {
|
|
||||||
.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT,
|
|
||||||
.pNext = NULL,
|
|
||||||
.pLabelName = labelName,
|
|
||||||
.color = { r, g, b, 1.f }
|
|
||||||
};
|
|
||||||
|
|
||||||
qvkInsertDebugUtilsLabelEXT(*cmdBuffer, &labelInfo);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,371 +0,0 @@
|
||||||
/*
|
|
||||||
Copyright (C) 1997-2001 Id Software, Inc.
|
|
||||||
Copyright (C) 2018-2019 Krzysztof Kondrak
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or
|
|
||||||
modify it under the terms of the GNU General Public License
|
|
||||||
as published by the Free Software Foundation; either version 2
|
|
||||||
of the License, or (at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
||||||
|
|
||||||
See the GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
||||||
*/
|
|
||||||
|
|
||||||
// vk_draw.c
|
|
||||||
|
|
||||||
#include "header/local.h"
|
|
||||||
|
|
||||||
static image_t *draw_chars;
|
|
||||||
|
|
||||||
/*
|
|
||||||
===============
|
|
||||||
Draw_InitLocal
|
|
||||||
===============
|
|
||||||
*/
|
|
||||||
void Draw_InitLocal (void)
|
|
||||||
{
|
|
||||||
draw_chars = Vk_FindImage("pics/conchars.pcx", it_pic);
|
|
||||||
if (!draw_chars)
|
|
||||||
{
|
|
||||||
ri.Sys_Error(ERR_FATAL, "%s: Couldn't load pics/conchars.pcx", __func__);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
================
|
|
||||||
RE_Draw_CharScaled
|
|
||||||
|
|
||||||
Draws one 8*8 graphics character with 0 being transparent.
|
|
||||||
It can be clipped to the top of the screen to allow the console to be
|
|
||||||
smoothly scrolled off.
|
|
||||||
================
|
|
||||||
*/
|
|
||||||
void RE_Draw_CharScaled (int x, int y, int num, float scale)
|
|
||||||
{
|
|
||||||
int row, col;
|
|
||||||
float frow, fcol, size;
|
|
||||||
|
|
||||||
if (!vk_frameStarted)
|
|
||||||
return;
|
|
||||||
|
|
||||||
num &= 255;
|
|
||||||
|
|
||||||
if ((num & 127) == 32)
|
|
||||||
return; // space
|
|
||||||
|
|
||||||
if (y <= -8)
|
|
||||||
return; // totally off screen
|
|
||||||
|
|
||||||
row = num >> 4;
|
|
||||||
col = num & 15;
|
|
||||||
|
|
||||||
frow = row * 0.0625;
|
|
||||||
fcol = col * 0.0625;
|
|
||||||
size = 0.0625;
|
|
||||||
|
|
||||||
float imgTransform[] = { (float)x / vid.width, (float)y / vid.height,
|
|
||||||
8.f * scale / vid.width, 8.f * scale / vid.height,
|
|
||||||
fcol, frow, size, size };
|
|
||||||
QVk_DrawTexRect(imgTransform, sizeof(imgTransform), &draw_chars->vk_texture);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
=============
|
|
||||||
RE_Draw_FindPic
|
|
||||||
=============
|
|
||||||
*/
|
|
||||||
image_t *RE_Draw_FindPic (char *name)
|
|
||||||
{
|
|
||||||
image_t *vk;
|
|
||||||
|
|
||||||
if (name[0] != '/' && name[0] != '\\')
|
|
||||||
{
|
|
||||||
char fullname[MAX_QPATH];
|
|
||||||
|
|
||||||
Com_sprintf(fullname, sizeof(fullname), "pics/%s.pcx", name);
|
|
||||||
vk = Vk_FindImage(fullname, it_pic);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
vk = Vk_FindImage(name + 1, it_pic);
|
|
||||||
|
|
||||||
return vk;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
=============
|
|
||||||
RE_Draw_GetPicSize
|
|
||||||
=============
|
|
||||||
*/
|
|
||||||
void RE_Draw_GetPicSize (int *w, int *h, char *name)
|
|
||||||
{
|
|
||||||
image_t *vk;
|
|
||||||
|
|
||||||
vk = RE_Draw_FindPic(name);
|
|
||||||
if (!vk)
|
|
||||||
{
|
|
||||||
*w = *h = -1;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
*w = vk->width;
|
|
||||||
*h = vk->height;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
=============
|
|
||||||
RE_Draw_StretchPic
|
|
||||||
=============
|
|
||||||
*/
|
|
||||||
void RE_Draw_StretchPic (int x, int y, int w, int h, char *name)
|
|
||||||
{
|
|
||||||
image_t *vk;
|
|
||||||
|
|
||||||
if (!vk_frameStarted)
|
|
||||||
return;
|
|
||||||
|
|
||||||
vk = RE_Draw_FindPic(name);
|
|
||||||
if (!vk)
|
|
||||||
{
|
|
||||||
R_Printf(PRINT_ALL, "%s(): Can't find pic: %s\n", __func__, name);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
float imgTransform[] = { (float)x / vid.width, (float)y / vid.height,
|
|
||||||
(float)w / vid.width, (float)h / vid.height,
|
|
||||||
0, 0, 1, 1 };
|
|
||||||
QVk_DrawTexRect(imgTransform, sizeof(imgTransform), &vk->vk_texture);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
=============
|
|
||||||
RE_Draw_PicScaled
|
|
||||||
=============
|
|
||||||
*/
|
|
||||||
void RE_Draw_PicScaled (int x, int y, char *name, float scale)
|
|
||||||
{
|
|
||||||
image_t *vk;
|
|
||||||
|
|
||||||
vk = RE_Draw_FindPic(name);
|
|
||||||
if (!vk)
|
|
||||||
{
|
|
||||||
R_Printf(PRINT_ALL, "%s(): Can't find pic: %s\n", __func__, name);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
RE_Draw_StretchPic(x, y, vk->width*scale, vk->height*scale, name);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
=============
|
|
||||||
RE_Draw_TileClear
|
|
||||||
|
|
||||||
This repeats a 64*64 tile graphic to fill the screen around a sized down
|
|
||||||
refresh window.
|
|
||||||
=============
|
|
||||||
*/
|
|
||||||
void RE_Draw_TileClear (int x, int y, int w, int h, char *name)
|
|
||||||
{
|
|
||||||
image_t *image;
|
|
||||||
|
|
||||||
if (!vk_frameStarted)
|
|
||||||
return;
|
|
||||||
|
|
||||||
image = RE_Draw_FindPic(name);
|
|
||||||
if (!image)
|
|
||||||
{
|
|
||||||
R_Printf(PRINT_ALL, "%s(): Can't find pic: %s\n", __func__, name);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Change viewport and scissor to draw in the top left corner as the world view.
|
|
||||||
VkViewport tileViewport = vk_viewport;
|
|
||||||
VkRect2D tileScissor = vk_scissor;
|
|
||||||
|
|
||||||
tileViewport.x = 0.f;
|
|
||||||
tileViewport.y = 0.f;
|
|
||||||
tileScissor.offset.x = 0;
|
|
||||||
tileScissor.offset.y = 0;
|
|
||||||
|
|
||||||
vkCmdSetViewport(vk_activeCmdbuffer, 0u, 1u, &tileViewport);
|
|
||||||
vkCmdSetScissor(vk_activeCmdbuffer, 0u, 1u, &tileScissor);
|
|
||||||
|
|
||||||
const float divisor = (vk_pixel_size->value < 1.0f ? 1.0f : vk_pixel_size->value);
|
|
||||||
float imgTransform[] = { (float)x / (vid.width * divisor), (float)y / (vid.height * divisor),
|
|
||||||
(float)w / (vid.width * divisor), (float)h / (vid.height * divisor),
|
|
||||||
(float)x / (64.0 * divisor), (float)y / (64.0 * divisor),
|
|
||||||
(float)w / (64.0 * divisor), (float)h / (64.0 * divisor) };
|
|
||||||
QVk_DrawTexRect(imgTransform, sizeof(imgTransform), &image->vk_texture);
|
|
||||||
|
|
||||||
// Restore viewport and scissor.
|
|
||||||
vkCmdSetViewport(vk_activeCmdbuffer, 0u, 1u, &vk_viewport);
|
|
||||||
vkCmdSetScissor(vk_activeCmdbuffer, 0u, 1u, &vk_scissor);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
=============
|
|
||||||
RE_Draw_Fill
|
|
||||||
|
|
||||||
Fills a box of pixels with a single color
|
|
||||||
=============
|
|
||||||
*/
|
|
||||||
void RE_Draw_Fill (int x, int y, int w, int h, int c)
|
|
||||||
{
|
|
||||||
union
|
|
||||||
{
|
|
||||||
unsigned c;
|
|
||||||
byte v[4];
|
|
||||||
} color;
|
|
||||||
|
|
||||||
if (!vk_frameStarted)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if ((unsigned)c > 255)
|
|
||||||
ri.Sys_Error(ERR_FATAL, "%s: bad color", __func__);
|
|
||||||
|
|
||||||
color.c = d_8to24table[c];
|
|
||||||
|
|
||||||
float imgTransform[] = { (float)x / vid.width, (float)y / vid.height,
|
|
||||||
(float)w / vid.width, (float)h / vid.height,
|
|
||||||
color.v[0] / 255.f, color.v[1] / 255.f, color.v[2] / 255.f, 1.f };
|
|
||||||
QVk_DrawColorRect(imgTransform, sizeof(imgTransform), RP_UI);
|
|
||||||
}
|
|
||||||
|
|
||||||
//=============================================================================
|
|
||||||
|
|
||||||
/*
|
|
||||||
================
|
|
||||||
RE_Draw_FadeScreen
|
|
||||||
|
|
||||||
================
|
|
||||||
*/
|
|
||||||
void RE_Draw_FadeScreen (void)
|
|
||||||
{
|
|
||||||
float imgTransform[] = { 0.f, 0.f, vid.width, vid.height, 0.f, 0.f, 0.f, .8f };
|
|
||||||
|
|
||||||
if (!vk_frameStarted)
|
|
||||||
return;
|
|
||||||
|
|
||||||
QVk_DrawColorRect(imgTransform, sizeof(imgTransform), RP_UI);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//====================================================================
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
=============
|
|
||||||
RE_Draw_StretchRaw
|
|
||||||
=============
|
|
||||||
*/
|
|
||||||
extern unsigned r_rawpalette[256];
|
|
||||||
extern qvktexture_t vk_rawTexture;
|
|
||||||
static int scaled_size = 512;
|
|
||||||
|
|
||||||
void RE_Draw_StretchRaw (int x, int y, int w, int h, int cols, int rows, byte *data)
|
|
||||||
{
|
|
||||||
|
|
||||||
int i, j;
|
|
||||||
int hscale, vscale;
|
|
||||||
unsigned *dest;
|
|
||||||
byte *source;
|
|
||||||
byte *image_scaled;
|
|
||||||
unsigned *raw_image32;
|
|
||||||
|
|
||||||
if (!vk_frameStarted)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (vk_retexturing->value)
|
|
||||||
{
|
|
||||||
// triple scaling
|
|
||||||
if (cols < (vid.width / 3) || rows < (vid.height / 3))
|
|
||||||
{
|
|
||||||
image_scaled = malloc(cols * rows * 9);
|
|
||||||
|
|
||||||
scale3x(data, image_scaled, cols, rows);
|
|
||||||
|
|
||||||
cols = cols * 3;
|
|
||||||
rows = rows * 3;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
// double scaling
|
|
||||||
{
|
|
||||||
image_scaled = malloc(cols * rows * 4);
|
|
||||||
|
|
||||||
scale2x(data, image_scaled, cols, rows);
|
|
||||||
|
|
||||||
cols = cols * 2;
|
|
||||||
rows = rows * 2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
image_scaled = data;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (vk_rawTexture.resource.image == VK_NULL_HANDLE)
|
|
||||||
{
|
|
||||||
// get power of two image size,
|
|
||||||
// could be updated only size only after recreate texture
|
|
||||||
for (scaled_size = 512; scaled_size < cols && scaled_size < rows; scaled_size <<= 1)
|
|
||||||
;
|
|
||||||
}
|
|
||||||
|
|
||||||
raw_image32 = malloc(scaled_size * scaled_size * sizeof(unsigned));
|
|
||||||
|
|
||||||
hscale = cols * 0x10000 / scaled_size;
|
|
||||||
vscale = rows * 0x10000 / scaled_size;
|
|
||||||
|
|
||||||
source = image_scaled;
|
|
||||||
dest = raw_image32;
|
|
||||||
for (i = 0; i < scaled_size; i++)
|
|
||||||
{
|
|
||||||
for (j = 0; j < scaled_size; j++)
|
|
||||||
{
|
|
||||||
*dest = r_rawpalette[*(source + ((j * hscale) >> 16))];
|
|
||||||
dest ++;
|
|
||||||
}
|
|
||||||
source = image_scaled + (((i * vscale) >> 16) * cols);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (vk_retexturing->value)
|
|
||||||
{
|
|
||||||
free(image_scaled);
|
|
||||||
SmoothColorImage(raw_image32, scaled_size * scaled_size, scaled_size >> 7);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (vk_rawTexture.resource.image != VK_NULL_HANDLE)
|
|
||||||
{
|
|
||||||
QVk_UpdateTextureData(&vk_rawTexture, (unsigned char*)raw_image32, 0, 0, scaled_size, scaled_size);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
QVVKTEXTURE_CLEAR(vk_rawTexture);
|
|
||||||
QVk_CreateTexture(&vk_rawTexture, (unsigned char*)raw_image32, scaled_size, scaled_size,
|
|
||||||
vk_current_sampler, false);
|
|
||||||
QVk_DebugSetObjectName((uint64_t)vk_rawTexture.resource.image,
|
|
||||||
VK_OBJECT_TYPE_IMAGE, "Image: raw texture");
|
|
||||||
QVk_DebugSetObjectName((uint64_t)vk_rawTexture.imageView,
|
|
||||||
VK_OBJECT_TYPE_IMAGE_VIEW, "Image View: raw texture");
|
|
||||||
QVk_DebugSetObjectName((uint64_t)vk_rawTexture.descriptorSet,
|
|
||||||
VK_OBJECT_TYPE_DESCRIPTOR_SET, "Descriptor Set: raw texture");
|
|
||||||
QVk_DebugSetObjectName((uint64_t)vk_rawTexture.resource.memory,
|
|
||||||
VK_OBJECT_TYPE_DEVICE_MEMORY, "Memory: raw texture");
|
|
||||||
}
|
|
||||||
free(raw_image32);
|
|
||||||
|
|
||||||
float imgTransform[] = { (float)x / vid.width, (float)y / vid.height,
|
|
||||||
(float)w / vid.width, (float)h / vid.height,
|
|
||||||
0.f, 0.f, 1.f, 1.0f };
|
|
||||||
QVk_DrawTexRect(imgTransform, sizeof(imgTransform), &vk_rawTexture);
|
|
||||||
}
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,626 +0,0 @@
|
||||||
/*
|
|
||||||
Copyright (C) 1997-2001 Id Software, Inc.
|
|
||||||
Copyright (C) 2018-2019 Krzysztof Kondrak
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or
|
|
||||||
modify it under the terms of the GNU General Public License
|
|
||||||
as published by the Free Software Foundation; either version 2
|
|
||||||
of the License, or (at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
||||||
|
|
||||||
See the GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
||||||
|
|
||||||
*/
|
|
||||||
// vk_light.c
|
|
||||||
|
|
||||||
#include "header/local.h"
|
|
||||||
|
|
||||||
static int r_dlightframecount;
|
|
||||||
|
|
||||||
#define DLIGHT_CUTOFF 64
|
|
||||||
|
|
||||||
/*
|
|
||||||
=============================================================================
|
|
||||||
|
|
||||||
DYNAMIC LIGHTS BLEND RENDERING
|
|
||||||
|
|
||||||
=============================================================================
|
|
||||||
*/
|
|
||||||
|
|
||||||
void R_RenderDlight (dlight_t *light)
|
|
||||||
{
|
|
||||||
int i, j;
|
|
||||||
float rad;
|
|
||||||
|
|
||||||
rad = light->intensity * 0.35;
|
|
||||||
|
|
||||||
struct {
|
|
||||||
vec3_t verts;
|
|
||||||
float color[3];
|
|
||||||
} lightVerts[18];
|
|
||||||
|
|
||||||
for (i = 0; i < 3; i++)
|
|
||||||
lightVerts[0].verts[i] = light->origin[i] - vpn[i] * rad;
|
|
||||||
|
|
||||||
lightVerts[0].color[0] = light->color[0] * 0.2;
|
|
||||||
lightVerts[0].color[1] = light->color[1] * 0.2;
|
|
||||||
lightVerts[0].color[2] = light->color[2] * 0.2;
|
|
||||||
|
|
||||||
for (i = 16; i >= 0; i--)
|
|
||||||
{
|
|
||||||
float a;
|
|
||||||
|
|
||||||
a = i / 16.0 * M_PI * 2;
|
|
||||||
for (j = 0; j < 3; j++)
|
|
||||||
{
|
|
||||||
lightVerts[i+1].verts[j] = light->origin[j] + vright[j] * cos(a)*rad
|
|
||||||
+ vup[j] * sin(a)*rad;
|
|
||||||
lightVerts[i+1].color[j] = 0.f;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
QVk_BindPipeline(&vk_drawDLightPipeline);
|
|
||||||
|
|
||||||
VkBuffer vbo;
|
|
||||||
VkDeviceSize vboOffset;
|
|
||||||
uint32_t uboOffset;
|
|
||||||
VkDescriptorSet uboDescriptorSet;
|
|
||||||
uint8_t *vertData = QVk_GetVertexBuffer(sizeof(lightVerts), &vbo, &vboOffset);
|
|
||||||
uint8_t *uboData = QVk_GetUniformBuffer(sizeof(r_viewproj_matrix), &uboOffset, &uboDescriptorSet);
|
|
||||||
memcpy(vertData, lightVerts, sizeof(lightVerts));
|
|
||||||
memcpy(uboData, r_viewproj_matrix, sizeof(r_viewproj_matrix));
|
|
||||||
|
|
||||||
vkCmdBindVertexBuffers(vk_activeCmdbuffer, 0, 1, &vbo, &vboOffset);
|
|
||||||
vkCmdBindDescriptorSets(vk_activeCmdbuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, vk_drawDLightPipeline.layout, 0, 1, &uboDescriptorSet, 1, &uboOffset);
|
|
||||||
vkCmdBindIndexBuffer(vk_activeCmdbuffer, QVk_GetTriangleFanIbo(48), 0, VK_INDEX_TYPE_UINT16);
|
|
||||||
vkCmdDrawIndexed(vk_activeCmdbuffer, 48, 1, 0, 0, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
=============
|
|
||||||
R_RenderDlights
|
|
||||||
=============
|
|
||||||
*/
|
|
||||||
void R_RenderDlights (void)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
dlight_t *l;
|
|
||||||
|
|
||||||
if (!vk_flashblend->value)
|
|
||||||
return;
|
|
||||||
|
|
||||||
r_dlightframecount = r_framecount + 1; // because the count hasn't
|
|
||||||
// advanced yet for this frame
|
|
||||||
l = r_newrefdef.dlights;
|
|
||||||
for (i=0 ; i<r_newrefdef.num_dlights ; i++, l++)
|
|
||||||
R_RenderDlight (l);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
=============================================================================
|
|
||||||
|
|
||||||
DYNAMIC LIGHTS
|
|
||||||
|
|
||||||
=============================================================================
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
=============
|
|
||||||
R_MarkLights
|
|
||||||
=============
|
|
||||||
*/
|
|
||||||
void R_MarkLights (dlight_t *light, int bit, mnode_t *node)
|
|
||||||
{
|
|
||||||
cplane_t *splitplane;
|
|
||||||
float dist;
|
|
||||||
msurface_t *surf;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
if (node->contents != -1)
|
|
||||||
return;
|
|
||||||
|
|
||||||
splitplane = node->plane;
|
|
||||||
dist = DotProduct (light->origin, splitplane->normal) - splitplane->dist;
|
|
||||||
|
|
||||||
if (dist > light->intensity-DLIGHT_CUTOFF)
|
|
||||||
{
|
|
||||||
R_MarkLights (light, bit, node->children[0]);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (dist < -light->intensity+DLIGHT_CUTOFF)
|
|
||||||
{
|
|
||||||
R_MarkLights (light, bit, node->children[1]);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// mark the polygons
|
|
||||||
surf = r_worldmodel->surfaces + node->firstsurface;
|
|
||||||
for (i=0 ; i<node->numsurfaces ; i++, surf++)
|
|
||||||
{
|
|
||||||
if (surf->dlightframe != r_dlightframecount)
|
|
||||||
{
|
|
||||||
surf->dlightbits = 0;
|
|
||||||
surf->dlightframe = r_dlightframecount;
|
|
||||||
}
|
|
||||||
surf->dlightbits |= bit;
|
|
||||||
}
|
|
||||||
|
|
||||||
R_MarkLights (light, bit, node->children[0]);
|
|
||||||
R_MarkLights (light, bit, node->children[1]);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
=============
|
|
||||||
R_PushDlights
|
|
||||||
=============
|
|
||||||
*/
|
|
||||||
void R_PushDlights (void)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
dlight_t *l;
|
|
||||||
|
|
||||||
if (vk_flashblend->value)
|
|
||||||
return;
|
|
||||||
|
|
||||||
r_dlightframecount = r_framecount + 1; // because the count hasn't
|
|
||||||
// advanced yet for this frame
|
|
||||||
l = r_newrefdef.dlights;
|
|
||||||
for (i=0 ; i<r_newrefdef.num_dlights ; i++, l++)
|
|
||||||
R_MarkLights ( l, 1<<i, r_worldmodel->nodes );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
=============================================================================
|
|
||||||
|
|
||||||
LIGHT SAMPLING
|
|
||||||
|
|
||||||
=============================================================================
|
|
||||||
*/
|
|
||||||
|
|
||||||
vec3_t pointcolor;
|
|
||||||
cplane_t *lightplane; // used as shadow plane
|
|
||||||
vec3_t lightspot;
|
|
||||||
|
|
||||||
static int RecursiveLightPoint (mnode_t *node, vec3_t start, vec3_t end)
|
|
||||||
{
|
|
||||||
float front, back, frac;
|
|
||||||
int side;
|
|
||||||
cplane_t *plane;
|
|
||||||
vec3_t mid;
|
|
||||||
msurface_t *surf;
|
|
||||||
int s, t, ds, dt;
|
|
||||||
int i;
|
|
||||||
mtexinfo_t *tex;
|
|
||||||
byte *lightmap;
|
|
||||||
int maps;
|
|
||||||
int r;
|
|
||||||
|
|
||||||
if (node->contents != -1)
|
|
||||||
return -1; // didn't hit anything
|
|
||||||
|
|
||||||
// calculate mid point
|
|
||||||
|
|
||||||
// FIXME: optimize for axial
|
|
||||||
plane = node->plane;
|
|
||||||
front = DotProduct (start, plane->normal) - plane->dist;
|
|
||||||
back = DotProduct (end, plane->normal) - plane->dist;
|
|
||||||
side = front < 0;
|
|
||||||
|
|
||||||
if ( (back < 0) == side)
|
|
||||||
return RecursiveLightPoint (node->children[side], start, end);
|
|
||||||
|
|
||||||
frac = front / (front-back);
|
|
||||||
mid[0] = start[0] + (end[0] - start[0])*frac;
|
|
||||||
mid[1] = start[1] + (end[1] - start[1])*frac;
|
|
||||||
mid[2] = start[2] + (end[2] - start[2])*frac;
|
|
||||||
|
|
||||||
// go down front side
|
|
||||||
r = RecursiveLightPoint (node->children[side], start, mid);
|
|
||||||
if (r >= 0)
|
|
||||||
return r; // hit something
|
|
||||||
|
|
||||||
// check for impact on this node
|
|
||||||
VectorCopy (mid, lightspot);
|
|
||||||
lightplane = plane;
|
|
||||||
|
|
||||||
surf = r_worldmodel->surfaces + node->firstsurface;
|
|
||||||
for (i=0 ; i<node->numsurfaces ; i++, surf++)
|
|
||||||
{
|
|
||||||
vec3_t scale;
|
|
||||||
|
|
||||||
if (surf->flags&(SURF_DRAWTURB|SURF_DRAWSKY))
|
|
||||||
continue; // no lightmaps
|
|
||||||
|
|
||||||
tex = surf->texinfo;
|
|
||||||
|
|
||||||
s = DotProduct (mid, tex->vecs[0]) + tex->vecs[0][3];
|
|
||||||
t = DotProduct (mid, tex->vecs[1]) + tex->vecs[1][3];;
|
|
||||||
|
|
||||||
if (s < surf->texturemins[0] ||
|
|
||||||
t < surf->texturemins[1])
|
|
||||||
continue;
|
|
||||||
|
|
||||||
ds = s - surf->texturemins[0];
|
|
||||||
dt = t - surf->texturemins[1];
|
|
||||||
|
|
||||||
if ( ds > surf->extents[0] || dt > surf->extents[1] )
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (!surf->samples)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
ds >>= 4;
|
|
||||||
dt >>= 4;
|
|
||||||
|
|
||||||
lightmap = surf->samples;
|
|
||||||
VectorCopy (vec3_origin, pointcolor);
|
|
||||||
|
|
||||||
lightmap += 3*(dt * ((surf->extents[0]>>4)+1) + ds);
|
|
||||||
|
|
||||||
for (maps = 0 ; maps < MAXLIGHTMAPS && surf->styles[maps] != 255 ;
|
|
||||||
maps++)
|
|
||||||
{
|
|
||||||
for (int j=0 ; j<3 ; j++)
|
|
||||||
scale[j] = r_modulate->value*r_newrefdef.lightstyles[surf->styles[maps]].rgb[j];
|
|
||||||
|
|
||||||
pointcolor[0] += lightmap[0] * scale[0] * (1.0/255);
|
|
||||||
pointcolor[1] += lightmap[1] * scale[1] * (1.0/255);
|
|
||||||
pointcolor[2] += lightmap[2] * scale[2] * (1.0/255);
|
|
||||||
lightmap += 3*((surf->extents[0]>>4)+1) *
|
|
||||||
((surf->extents[1]>>4)+1);
|
|
||||||
}
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// go down back side
|
|
||||||
return RecursiveLightPoint (node->children[!side], mid, end);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
===============
|
|
||||||
R_LightPoint
|
|
||||||
===============
|
|
||||||
*/
|
|
||||||
void R_LightPoint (vec3_t p, vec3_t color, entity_t *currententity)
|
|
||||||
{
|
|
||||||
vec3_t end;
|
|
||||||
float r;
|
|
||||||
int lnum;
|
|
||||||
dlight_t *dl;
|
|
||||||
vec3_t dist;
|
|
||||||
|
|
||||||
if (!r_worldmodel->lightdata || !currententity)
|
|
||||||
{
|
|
||||||
color[0] = color[1] = color[2] = 1.0;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
end[0] = p[0];
|
|
||||||
end[1] = p[1];
|
|
||||||
end[2] = p[2] - 2048;
|
|
||||||
|
|
||||||
r = RecursiveLightPoint (r_worldmodel->nodes, p, end);
|
|
||||||
|
|
||||||
if (r == -1)
|
|
||||||
{
|
|
||||||
VectorCopy (vec3_origin, color);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
VectorCopy (pointcolor, color);
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// add dynamic lights
|
|
||||||
//
|
|
||||||
dl = r_newrefdef.dlights;
|
|
||||||
for (lnum=0 ; lnum<r_newrefdef.num_dlights ; lnum++, dl++)
|
|
||||||
{
|
|
||||||
float add;
|
|
||||||
|
|
||||||
VectorSubtract (currententity->origin,
|
|
||||||
dl->origin,
|
|
||||||
dist);
|
|
||||||
add = dl->intensity - VectorLength(dist);
|
|
||||||
add *= (1.0/256);
|
|
||||||
if (add > 0)
|
|
||||||
{
|
|
||||||
VectorMA (color, add, dl->color, color);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
VectorScale (color, r_modulate->value, color);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//===================================================================
|
|
||||||
|
|
||||||
static float s_blocklights[34*34*3];
|
|
||||||
/*
|
|
||||||
===============
|
|
||||||
R_AddDynamicLights
|
|
||||||
===============
|
|
||||||
*/
|
|
||||||
static void R_AddDynamicLights (msurface_t *surf)
|
|
||||||
{
|
|
||||||
int lnum;
|
|
||||||
int sd, td;
|
|
||||||
float fdist, frad, fminlight;
|
|
||||||
vec3_t impact, local;
|
|
||||||
int s, t;
|
|
||||||
int i;
|
|
||||||
int smax, tmax;
|
|
||||||
mtexinfo_t *tex;
|
|
||||||
dlight_t *dl;
|
|
||||||
float *pfBL;
|
|
||||||
float fsacc, ftacc;
|
|
||||||
|
|
||||||
smax = (surf->extents[0]>>4)+1;
|
|
||||||
tmax = (surf->extents[1]>>4)+1;
|
|
||||||
tex = surf->texinfo;
|
|
||||||
|
|
||||||
for (lnum=0 ; lnum<r_newrefdef.num_dlights ; lnum++)
|
|
||||||
{
|
|
||||||
if ( !(surf->dlightbits & (1<<lnum) ) )
|
|
||||||
continue; // not lit by this light
|
|
||||||
|
|
||||||
dl = &r_newrefdef.dlights[lnum];
|
|
||||||
frad = dl->intensity;
|
|
||||||
fdist = DotProduct (dl->origin, surf->plane->normal) -
|
|
||||||
surf->plane->dist;
|
|
||||||
frad -= fabs(fdist);
|
|
||||||
// rad is now the highest intensity on the plane
|
|
||||||
|
|
||||||
fminlight = DLIGHT_CUTOFF; // FIXME: make configurable?
|
|
||||||
if (frad < fminlight)
|
|
||||||
continue;
|
|
||||||
fminlight = frad - fminlight;
|
|
||||||
|
|
||||||
for (i=0 ; i<3 ; i++)
|
|
||||||
{
|
|
||||||
impact[i] = dl->origin[i] -
|
|
||||||
surf->plane->normal[i]*fdist;
|
|
||||||
}
|
|
||||||
|
|
||||||
local[0] = DotProduct (impact, tex->vecs[0]) + tex->vecs[0][3] - surf->texturemins[0];
|
|
||||||
local[1] = DotProduct (impact, tex->vecs[1]) + tex->vecs[1][3] - surf->texturemins[1];
|
|
||||||
|
|
||||||
pfBL = s_blocklights;
|
|
||||||
for (t = 0, ftacc = 0 ; t<tmax ; t++, ftacc += 16)
|
|
||||||
{
|
|
||||||
td = local[1] - ftacc;
|
|
||||||
if ( td < 0 )
|
|
||||||
td = -td;
|
|
||||||
|
|
||||||
for ( s=0, fsacc = 0 ; s<smax ; s++, fsacc += 16, pfBL += 3)
|
|
||||||
{
|
|
||||||
sd = Q_ftol( local[0] - fsacc );
|
|
||||||
|
|
||||||
if ( sd < 0 )
|
|
||||||
sd = -sd;
|
|
||||||
|
|
||||||
if (sd > td)
|
|
||||||
fdist = sd + (td>>1);
|
|
||||||
else
|
|
||||||
fdist = td + (sd>>1);
|
|
||||||
|
|
||||||
if ( fdist < fminlight )
|
|
||||||
{
|
|
||||||
pfBL[0] += ( frad - fdist ) * dl->color[0];
|
|
||||||
pfBL[1] += ( frad - fdist ) * dl->color[1];
|
|
||||||
pfBL[2] += ( frad - fdist ) * dl->color[2];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
** R_SetCacheState
|
|
||||||
*/
|
|
||||||
void R_SetCacheState( msurface_t *surf )
|
|
||||||
{
|
|
||||||
int maps;
|
|
||||||
|
|
||||||
for (maps = 0 ; maps < MAXLIGHTMAPS && surf->styles[maps] != 255 ;
|
|
||||||
maps++)
|
|
||||||
{
|
|
||||||
surf->cached_light[maps] = r_newrefdef.lightstyles[surf->styles[maps]].white;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
===============
|
|
||||||
R_BuildLightMap
|
|
||||||
|
|
||||||
Combine and scale multiple lightmaps into the floating format in blocklights
|
|
||||||
===============
|
|
||||||
*/
|
|
||||||
void R_BuildLightMap (msurface_t *surf, byte *dest, int stride)
|
|
||||||
{
|
|
||||||
int smax, tmax;
|
|
||||||
int r, g, b, a, max;
|
|
||||||
int i, j, size;
|
|
||||||
byte *lightmap;
|
|
||||||
float scale[4];
|
|
||||||
int nummaps;
|
|
||||||
float *bl;
|
|
||||||
|
|
||||||
if ( surf->texinfo->flags & (SURF_SKY|SURF_TRANS33|SURF_TRANS66|SURF_WARP) )
|
|
||||||
ri.Sys_Error (ERR_DROP, "R_BuildLightMap called for non-lit surface");
|
|
||||||
|
|
||||||
smax = (surf->extents[0]>>4)+1;
|
|
||||||
tmax = (surf->extents[1]>>4)+1;
|
|
||||||
size = smax*tmax;
|
|
||||||
if (size > (sizeof(s_blocklights)>>4) )
|
|
||||||
ri.Sys_Error (ERR_DROP, "Bad s_blocklights size");
|
|
||||||
|
|
||||||
// set to full bright if no light data
|
|
||||||
if (!surf->samples)
|
|
||||||
{
|
|
||||||
for (i=0 ; i<size*3 ; i++)
|
|
||||||
s_blocklights[i] = 255;
|
|
||||||
goto store;
|
|
||||||
}
|
|
||||||
|
|
||||||
// count the # of maps
|
|
||||||
for ( nummaps = 0 ; nummaps < MAXLIGHTMAPS && surf->styles[nummaps] != 255 ;
|
|
||||||
nummaps++)
|
|
||||||
;
|
|
||||||
|
|
||||||
lightmap = surf->samples;
|
|
||||||
|
|
||||||
// add all the lightmaps
|
|
||||||
if ( nummaps == 1 )
|
|
||||||
{
|
|
||||||
int maps;
|
|
||||||
|
|
||||||
for (maps = 0 ; maps < MAXLIGHTMAPS && surf->styles[maps] != 255 ;
|
|
||||||
maps++)
|
|
||||||
{
|
|
||||||
bl = s_blocklights;
|
|
||||||
|
|
||||||
for (i=0 ; i<3 ; i++)
|
|
||||||
scale[i] = r_modulate->value*r_newrefdef.lightstyles[surf->styles[maps]].rgb[i];
|
|
||||||
|
|
||||||
if ( scale[0] == 1.0F &&
|
|
||||||
scale[1] == 1.0F &&
|
|
||||||
scale[2] == 1.0F )
|
|
||||||
{
|
|
||||||
for (i=0 ; i<size ; i++, bl+=3)
|
|
||||||
{
|
|
||||||
bl[0] = lightmap[i*3+0];
|
|
||||||
bl[1] = lightmap[i*3+1];
|
|
||||||
bl[2] = lightmap[i*3+2];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
for (i=0 ; i<size ; i++, bl+=3)
|
|
||||||
{
|
|
||||||
bl[0] = lightmap[i*3+0] * scale[0];
|
|
||||||
bl[1] = lightmap[i*3+1] * scale[1];
|
|
||||||
bl[2] = lightmap[i*3+2] * scale[2];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
lightmap += size*3; // skip to next lightmap
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
int maps;
|
|
||||||
|
|
||||||
memset( s_blocklights, 0, sizeof( s_blocklights[0] ) * size * 3 );
|
|
||||||
|
|
||||||
for (maps = 0 ; maps < MAXLIGHTMAPS && surf->styles[maps] != 255 ;
|
|
||||||
maps++)
|
|
||||||
{
|
|
||||||
bl = s_blocklights;
|
|
||||||
|
|
||||||
for (i=0 ; i<3 ; i++)
|
|
||||||
scale[i] = r_modulate->value*r_newrefdef.lightstyles[surf->styles[maps]].rgb[i];
|
|
||||||
|
|
||||||
if ( scale[0] == 1.0F &&
|
|
||||||
scale[1] == 1.0F &&
|
|
||||||
scale[2] == 1.0F )
|
|
||||||
{
|
|
||||||
for (i=0 ; i<size ; i++, bl+=3 )
|
|
||||||
{
|
|
||||||
bl[0] += lightmap[i*3+0];
|
|
||||||
bl[1] += lightmap[i*3+1];
|
|
||||||
bl[2] += lightmap[i*3+2];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
for (i=0 ; i<size ; i++, bl+=3)
|
|
||||||
{
|
|
||||||
bl[0] += lightmap[i*3+0] * scale[0];
|
|
||||||
bl[1] += lightmap[i*3+1] * scale[1];
|
|
||||||
bl[2] += lightmap[i*3+2] * scale[2];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
lightmap += size*3; // skip to next lightmap
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// add all the dynamic lights
|
|
||||||
if (surf->dlightframe == r_framecount)
|
|
||||||
R_AddDynamicLights (surf);
|
|
||||||
|
|
||||||
store:
|
|
||||||
// put into texture format
|
|
||||||
stride -= (smax<<2);
|
|
||||||
bl = s_blocklights;
|
|
||||||
|
|
||||||
for (i = 0; i < tmax; i++, dest += stride)
|
|
||||||
{
|
|
||||||
for (j = 0; j < smax; j++)
|
|
||||||
{
|
|
||||||
|
|
||||||
r = Q_ftol(bl[0]);
|
|
||||||
g = Q_ftol(bl[1]);
|
|
||||||
b = Q_ftol(bl[2]);
|
|
||||||
|
|
||||||
// catch negative lights
|
|
||||||
if (r < 0)
|
|
||||||
r = 0;
|
|
||||||
if (g < 0)
|
|
||||||
g = 0;
|
|
||||||
if (b < 0)
|
|
||||||
b = 0;
|
|
||||||
|
|
||||||
/*
|
|
||||||
** determine the brightest of the three color components
|
|
||||||
*/
|
|
||||||
if (r > g)
|
|
||||||
max = r;
|
|
||||||
else
|
|
||||||
max = g;
|
|
||||||
if (b > max)
|
|
||||||
max = b;
|
|
||||||
|
|
||||||
/*
|
|
||||||
** alpha is ONLY used for the mono lightmap case. For this reason
|
|
||||||
** we set it to the brightest of the color components so that
|
|
||||||
** things don't get too dim.
|
|
||||||
*/
|
|
||||||
a = max;
|
|
||||||
|
|
||||||
/*
|
|
||||||
** rescale all the color components if the intensity of the greatest
|
|
||||||
** channel exceeds 1.0
|
|
||||||
*/
|
|
||||||
if (max > 255)
|
|
||||||
{
|
|
||||||
float t = 255.0F / max;
|
|
||||||
|
|
||||||
r = r * t;
|
|
||||||
g = g * t;
|
|
||||||
b = b * t;
|
|
||||||
a = a * t;
|
|
||||||
}
|
|
||||||
|
|
||||||
dest[0] = r;
|
|
||||||
dest[1] = g;
|
|
||||||
dest[2] = b;
|
|
||||||
dest[3] = a;
|
|
||||||
|
|
||||||
bl += 3;
|
|
||||||
dest += 4;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,999 +0,0 @@
|
||||||
/*
|
|
||||||
Copyright (C) 1997-2001 Id Software, Inc.
|
|
||||||
Copyright (C) 2018-2019 Krzysztof Kondrak
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or
|
|
||||||
modify it under the terms of the GNU General Public License
|
|
||||||
as published by the Free Software Foundation; either version 2
|
|
||||||
of the License, or (at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
||||||
|
|
||||||
See the GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
||||||
|
|
||||||
*/
|
|
||||||
// vk_mesh.c: triangle model functions
|
|
||||||
|
|
||||||
#include "header/local.h"
|
|
||||||
|
|
||||||
/*
|
|
||||||
=============================================================
|
|
||||||
|
|
||||||
ALIAS MODELS
|
|
||||||
|
|
||||||
=============================================================
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define NUMVERTEXNORMALS 162
|
|
||||||
|
|
||||||
static float r_avertexnormals[NUMVERTEXNORMALS][3] = {
|
|
||||||
#include "../constants/anorms.h"
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef float vec4_t[4];
|
|
||||||
|
|
||||||
enum {
|
|
||||||
TRIANGLE_STRIP = 0,
|
|
||||||
TRIANGLE_FAN = 1
|
|
||||||
} pipelineIdx;
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
vec3_t vertex;
|
|
||||||
float color[4];
|
|
||||||
float texCoord[2];
|
|
||||||
} modelvert;
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
int vertexCount;
|
|
||||||
int firstVertex;
|
|
||||||
} drawinfo_t;
|
|
||||||
|
|
||||||
polyvert_t *verts_buffer = NULL;
|
|
||||||
lmappolyvert_t *lmappolyverts_buffer = NULL;
|
|
||||||
static drawinfo_t *drawInfo[2] = {NULL, NULL};
|
|
||||||
static modelvert *vertList[2] = {NULL, NULL};
|
|
||||||
static vec4_t *s_lerped = NULL;
|
|
||||||
static vec3_t *shadowverts = NULL;
|
|
||||||
static int verts_count = 0;
|
|
||||||
|
|
||||||
vec3_t shadevector;
|
|
||||||
float shadelight[3];
|
|
||||||
|
|
||||||
// precalculated dot products for quantized angles
|
|
||||||
#define SHADEDOT_QUANT 16
|
|
||||||
static float r_avertexnormal_dots[SHADEDOT_QUANT][256] = {
|
|
||||||
#include "../constants/anormtab.h"
|
|
||||||
};
|
|
||||||
|
|
||||||
float *shadedots = r_avertexnormal_dots[0];
|
|
||||||
|
|
||||||
extern float r_view_matrix[16];
|
|
||||||
extern float r_projection_matrix[16];
|
|
||||||
extern float r_viewproj_matrix[16];
|
|
||||||
|
|
||||||
// correction matrix with "hacked depth" for models with RF_DEPTHHACK flag set
|
|
||||||
static float r_vulkan_correction_dh[16] = {
|
|
||||||
1.f, 0.f, 0.f, 0.f,
|
|
||||||
0.f, -1.f, 0.f, 0.f,
|
|
||||||
0.f, 0.f, .3f, 0.f,
|
|
||||||
0.f, 0.f, .3f, 1.f
|
|
||||||
};
|
|
||||||
|
|
||||||
int
|
|
||||||
Mesh_VertsRealloc(int count)
|
|
||||||
{
|
|
||||||
void *ptr;
|
|
||||||
|
|
||||||
if (verts_count > count)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
verts_count = ROUNDUP(count * 2, 256);
|
|
||||||
|
|
||||||
ptr = realloc(s_lerped, verts_count * sizeof(vec4_t));
|
|
||||||
if (!ptr)
|
|
||||||
{
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
s_lerped = ptr;
|
|
||||||
|
|
||||||
ptr = realloc(shadowverts, verts_count * sizeof(vec3_t));
|
|
||||||
if (!ptr)
|
|
||||||
{
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
shadowverts = ptr;
|
|
||||||
|
|
||||||
ptr = realloc(verts_buffer, verts_count * sizeof(polyvert_t));
|
|
||||||
if (!ptr)
|
|
||||||
{
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
verts_buffer = ptr;
|
|
||||||
|
|
||||||
ptr = realloc(lmappolyverts_buffer, verts_count * sizeof(polyvert_t));
|
|
||||||
if (!ptr)
|
|
||||||
{
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
lmappolyverts_buffer = ptr;
|
|
||||||
|
|
||||||
ptr = realloc(vertList[0], verts_count * sizeof(modelvert));
|
|
||||||
if (!ptr)
|
|
||||||
{
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
vertList[0] = ptr;
|
|
||||||
|
|
||||||
ptr = realloc(vertList[1], verts_count * sizeof(modelvert));
|
|
||||||
if (!ptr)
|
|
||||||
{
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
vertList[1] = ptr;
|
|
||||||
|
|
||||||
ptr = realloc(drawInfo[0], verts_count * sizeof(drawinfo_t));
|
|
||||||
if (!ptr)
|
|
||||||
{
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
drawInfo[0] = ptr;
|
|
||||||
|
|
||||||
ptr = realloc(drawInfo[1], verts_count * sizeof(drawinfo_t));
|
|
||||||
if (!ptr)
|
|
||||||
{
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
drawInfo[1] = ptr;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
===============
|
|
||||||
Mesh_Init
|
|
||||||
===============
|
|
||||||
*/
|
|
||||||
void Mesh_Init (void)
|
|
||||||
{
|
|
||||||
s_lerped = NULL;
|
|
||||||
shadowverts = NULL;
|
|
||||||
verts_buffer = NULL;
|
|
||||||
lmappolyverts_buffer = NULL;
|
|
||||||
vertList[0] = NULL;
|
|
||||||
vertList[1] = NULL;
|
|
||||||
drawInfo[0] = NULL;
|
|
||||||
drawInfo[1] = NULL;
|
|
||||||
|
|
||||||
verts_count = 0;
|
|
||||||
|
|
||||||
if (Mesh_VertsRealloc(MAX_VERTS))
|
|
||||||
{
|
|
||||||
ri.Sys_Error(ERR_FATAL, "%s: can't allocate memory", __func__);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
================
|
|
||||||
Mesh_Free
|
|
||||||
================
|
|
||||||
*/
|
|
||||||
void Mesh_Free (void)
|
|
||||||
{
|
|
||||||
if (vk_validation->value > 1)
|
|
||||||
{
|
|
||||||
R_Printf(PRINT_ALL, "%s: Deallocated %d mesh verts\n",
|
|
||||||
__func__, verts_count);
|
|
||||||
}
|
|
||||||
verts_count = 0;
|
|
||||||
|
|
||||||
if (shadowverts)
|
|
||||||
{
|
|
||||||
free(shadowverts);
|
|
||||||
}
|
|
||||||
shadowverts = NULL;
|
|
||||||
|
|
||||||
if (s_lerped)
|
|
||||||
{
|
|
||||||
free(s_lerped);
|
|
||||||
}
|
|
||||||
s_lerped = NULL;
|
|
||||||
|
|
||||||
if (verts_buffer)
|
|
||||||
{
|
|
||||||
free(verts_buffer);
|
|
||||||
}
|
|
||||||
verts_buffer = NULL;
|
|
||||||
|
|
||||||
if (lmappolyverts_buffer)
|
|
||||||
{
|
|
||||||
free(lmappolyverts_buffer);
|
|
||||||
}
|
|
||||||
lmappolyverts_buffer = NULL;
|
|
||||||
|
|
||||||
if (vertList[0])
|
|
||||||
{
|
|
||||||
free(vertList[0]);
|
|
||||||
}
|
|
||||||
if (vertList[1])
|
|
||||||
{
|
|
||||||
free(vertList[1]);
|
|
||||||
}
|
|
||||||
vertList[0] = NULL;
|
|
||||||
vertList[1] = NULL;
|
|
||||||
|
|
||||||
if (drawInfo[0])
|
|
||||||
{
|
|
||||||
free(drawInfo[0]);
|
|
||||||
}
|
|
||||||
if (drawInfo[1])
|
|
||||||
{
|
|
||||||
free(drawInfo[1]);
|
|
||||||
}
|
|
||||||
drawInfo[0] = NULL;
|
|
||||||
drawInfo[1] = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static void Vk_LerpVerts( int nverts, dtrivertx_t *v, dtrivertx_t *ov, dtrivertx_t *verts, float *lerp, float move[3], float frontv[3], float backv[3], entity_t *currententity )
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
|
|
||||||
//PMM -- added RF_SHELL_DOUBLE, RF_SHELL_HALF_DAM
|
|
||||||
if ( currententity->flags & ( RF_SHELL_RED | RF_SHELL_GREEN | RF_SHELL_BLUE | RF_SHELL_DOUBLE | RF_SHELL_HALF_DAM) )
|
|
||||||
{
|
|
||||||
for (i=0 ; i < nverts; i++, v++, ov++, lerp+=4 )
|
|
||||||
{
|
|
||||||
float *normal = r_avertexnormals[verts[i].lightnormalindex];
|
|
||||||
|
|
||||||
lerp[0] = move[0] + ov->v[0]*backv[0] + v->v[0]*frontv[0] + normal[0] * POWERSUIT_SCALE;
|
|
||||||
lerp[1] = move[1] + ov->v[1]*backv[1] + v->v[1]*frontv[1] + normal[1] * POWERSUIT_SCALE;
|
|
||||||
lerp[2] = move[2] + ov->v[2]*backv[2] + v->v[2]*frontv[2] + normal[2] * POWERSUIT_SCALE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
for (i=0 ; i < nverts; i++, v++, ov++, lerp+=4)
|
|
||||||
{
|
|
||||||
lerp[0] = move[0] + ov->v[0]*backv[0] + v->v[0]*frontv[0];
|
|
||||||
lerp[1] = move[1] + ov->v[1]*backv[1] + v->v[1]*frontv[1];
|
|
||||||
lerp[2] = move[2] + ov->v[2]*backv[2] + v->v[2]*frontv[2];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
=============
|
|
||||||
Vk_DrawAliasFrameLerp
|
|
||||||
|
|
||||||
interpolates between two frames and origins
|
|
||||||
FIXME: batch lerp all vertexes
|
|
||||||
=============
|
|
||||||
*/
|
|
||||||
static void Vk_DrawAliasFrameLerp (dmdl_t *paliashdr, float backlerp, image_t *skin, float *modelMatrix, int leftHandOffset, int translucentIdx, entity_t *currententity)
|
|
||||||
{
|
|
||||||
daliasframe_t *frame, *oldframe;
|
|
||||||
dtrivertx_t *v, *ov, *verts;
|
|
||||||
int *order;
|
|
||||||
float frontlerp;
|
|
||||||
float alpha;
|
|
||||||
vec3_t move, delta, vectors[3];
|
|
||||||
vec3_t frontv, backv;
|
|
||||||
int i;
|
|
||||||
float *lerp;
|
|
||||||
|
|
||||||
frame = (daliasframe_t *)((byte *)paliashdr + paliashdr->ofs_frames
|
|
||||||
+ currententity->frame * paliashdr->framesize);
|
|
||||||
verts = v = frame->verts;
|
|
||||||
|
|
||||||
oldframe = (daliasframe_t *)((byte *)paliashdr + paliashdr->ofs_frames
|
|
||||||
+ currententity->oldframe * paliashdr->framesize);
|
|
||||||
ov = oldframe->verts;
|
|
||||||
|
|
||||||
order = (int *)((byte *)paliashdr + paliashdr->ofs_glcmds);
|
|
||||||
|
|
||||||
if (currententity->flags & RF_TRANSLUCENT)
|
|
||||||
alpha = currententity->alpha;
|
|
||||||
else
|
|
||||||
alpha = 1.0;
|
|
||||||
|
|
||||||
frontlerp = 1.0 - backlerp;
|
|
||||||
|
|
||||||
// move should be the delta back to the previous frame * backlerp
|
|
||||||
VectorSubtract (currententity->oldorigin, currententity->origin, delta);
|
|
||||||
AngleVectors (currententity->angles, vectors[0], vectors[1], vectors[2]);
|
|
||||||
|
|
||||||
move[0] = DotProduct (delta, vectors[0]); // forward
|
|
||||||
move[1] = -DotProduct (delta, vectors[1]); // left
|
|
||||||
move[2] = DotProduct (delta, vectors[2]); // up
|
|
||||||
|
|
||||||
VectorAdd (move, oldframe->translate, move);
|
|
||||||
|
|
||||||
for (i=0 ; i<3 ; i++)
|
|
||||||
{
|
|
||||||
move[i] = backlerp*move[i] + frontlerp*frame->translate[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i=0 ; i<3 ; i++)
|
|
||||||
{
|
|
||||||
frontv[i] = frontlerp*frame->scale[i];
|
|
||||||
backv[i] = backlerp*oldframe->scale[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Mesh_VertsRealloc(paliashdr->num_xyz))
|
|
||||||
{
|
|
||||||
ri.Sys_Error(ERR_FATAL, "%s: can't allocate memory", __func__);
|
|
||||||
}
|
|
||||||
|
|
||||||
lerp = s_lerped[0];
|
|
||||||
|
|
||||||
Vk_LerpVerts( paliashdr->num_xyz, v, ov, verts, lerp, move, frontv, backv, currententity );
|
|
||||||
|
|
||||||
int vertCounts[2] = { 0, 0 };
|
|
||||||
int pipeCounters[2] = { 0, 0 };
|
|
||||||
VkDeviceSize maxTriangleFanIdxCnt = 0;
|
|
||||||
|
|
||||||
if (Mesh_VertsRealloc(1))
|
|
||||||
{
|
|
||||||
ri.Sys_Error(ERR_FATAL, "%s: can't allocate memory", __func__);
|
|
||||||
}
|
|
||||||
|
|
||||||
drawInfo[0][0].firstVertex = 0;
|
|
||||||
drawInfo[1][0].firstVertex = 0;
|
|
||||||
|
|
||||||
struct {
|
|
||||||
float model[16];
|
|
||||||
int textured;
|
|
||||||
} meshUbo;
|
|
||||||
|
|
||||||
while (1)
|
|
||||||
{
|
|
||||||
int count;
|
|
||||||
|
|
||||||
// get the vertex count and primitive type
|
|
||||||
count = *order++;
|
|
||||||
if (!count)
|
|
||||||
break; // done
|
|
||||||
if (count < 0)
|
|
||||||
{
|
|
||||||
count = -count;
|
|
||||||
pipelineIdx = TRIANGLE_FAN;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
pipelineIdx = TRIANGLE_STRIP;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Mesh_VertsRealloc(pipeCounters[pipelineIdx]))
|
|
||||||
{
|
|
||||||
ri.Sys_Error(ERR_FATAL, "%s: can't allocate memory", __func__);
|
|
||||||
}
|
|
||||||
|
|
||||||
drawInfo[pipelineIdx][pipeCounters[pipelineIdx]].vertexCount = count;
|
|
||||||
maxTriangleFanIdxCnt = max(maxTriangleFanIdxCnt, ((count - 2) * 3));
|
|
||||||
|
|
||||||
if (currententity->flags & (RF_SHELL_RED | RF_SHELL_GREEN | RF_SHELL_BLUE))
|
|
||||||
{
|
|
||||||
meshUbo.textured = 0;
|
|
||||||
do
|
|
||||||
{
|
|
||||||
int vertIdx = vertCounts[pipelineIdx];
|
|
||||||
int index_xyz = order[2];
|
|
||||||
|
|
||||||
if (Mesh_VertsRealloc(vertIdx))
|
|
||||||
{
|
|
||||||
ri.Sys_Error(ERR_FATAL, "%s: can't allocate memory", __func__);
|
|
||||||
}
|
|
||||||
|
|
||||||
// unused in this case, since texturing is disabled
|
|
||||||
vertList[pipelineIdx][vertIdx].texCoord[0] = 0.f;
|
|
||||||
vertList[pipelineIdx][vertIdx].texCoord[1] = 0.f;
|
|
||||||
|
|
||||||
vertList[pipelineIdx][vertIdx].color[0] = shadelight[0];
|
|
||||||
vertList[pipelineIdx][vertIdx].color[1] = shadelight[1];
|
|
||||||
vertList[pipelineIdx][vertIdx].color[2] = shadelight[2];
|
|
||||||
vertList[pipelineIdx][vertIdx].color[3] = alpha;
|
|
||||||
|
|
||||||
if (verts_count < index_xyz)
|
|
||||||
{
|
|
||||||
R_Printf(PRINT_ALL, "%s: Model has issues with lerped index\n", __func__);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
vertList[pipelineIdx][vertIdx].vertex[0] = s_lerped[index_xyz][0];
|
|
||||||
vertList[pipelineIdx][vertIdx].vertex[1] = s_lerped[index_xyz][1];
|
|
||||||
vertList[pipelineIdx][vertIdx].vertex[2] = s_lerped[index_xyz][2];
|
|
||||||
vertCounts[pipelineIdx]++;
|
|
||||||
order += 3;
|
|
||||||
} while (--count);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
meshUbo.textured = 1;
|
|
||||||
do
|
|
||||||
{
|
|
||||||
int vertIdx = vertCounts[pipelineIdx];
|
|
||||||
int index_xyz = order[2];
|
|
||||||
float l;
|
|
||||||
|
|
||||||
if (Mesh_VertsRealloc(vertIdx))
|
|
||||||
{
|
|
||||||
ri.Sys_Error(ERR_FATAL, "%s: can't allocate memory", __func__);
|
|
||||||
}
|
|
||||||
|
|
||||||
// texture coordinates come from the draw list
|
|
||||||
vertList[pipelineIdx][vertIdx].texCoord[0] = ((float *)order)[0];
|
|
||||||
vertList[pipelineIdx][vertIdx].texCoord[1] = ((float *)order)[1];
|
|
||||||
|
|
||||||
// normals and vertexes come from the frame list
|
|
||||||
l = shadedots[verts[index_xyz].lightnormalindex];
|
|
||||||
|
|
||||||
vertList[pipelineIdx][vertIdx].color[0] = l * shadelight[0];
|
|
||||||
vertList[pipelineIdx][vertIdx].color[1] = l * shadelight[1];
|
|
||||||
vertList[pipelineIdx][vertIdx].color[2] = l * shadelight[2];
|
|
||||||
vertList[pipelineIdx][vertIdx].color[3] = alpha;
|
|
||||||
|
|
||||||
if (verts_count < index_xyz)
|
|
||||||
{
|
|
||||||
R_Printf(PRINT_ALL, "%s: Model has issues with lerped index\n", __func__);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
vertList[pipelineIdx][vertIdx].vertex[0] = s_lerped[index_xyz][0];
|
|
||||||
vertList[pipelineIdx][vertIdx].vertex[1] = s_lerped[index_xyz][1];
|
|
||||||
vertList[pipelineIdx][vertIdx].vertex[2] = s_lerped[index_xyz][2];
|
|
||||||
vertCounts[pipelineIdx]++;
|
|
||||||
order += 3;
|
|
||||||
} while (--count);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Mesh_VertsRealloc(pipeCounters[pipelineIdx] + 1))
|
|
||||||
{
|
|
||||||
ri.Sys_Error(ERR_FATAL, "%s: can't allocate memory", __func__);
|
|
||||||
}
|
|
||||||
|
|
||||||
pipeCounters[pipelineIdx]++;
|
|
||||||
drawInfo[pipelineIdx][pipeCounters[pipelineIdx]].firstVertex = vertCounts[pipelineIdx];
|
|
||||||
}
|
|
||||||
|
|
||||||
uint32_t uboOffset;
|
|
||||||
VkDescriptorSet uboDescriptorSet;
|
|
||||||
uint8_t *uboData = QVk_GetUniformBuffer(sizeof(meshUbo), &uboOffset, &uboDescriptorSet);
|
|
||||||
memcpy(meshUbo.model, modelMatrix, sizeof(float) * 16);
|
|
||||||
memcpy(uboData, &meshUbo, sizeof(meshUbo));
|
|
||||||
|
|
||||||
// player configuration screen model is using the UI renderpass
|
|
||||||
int pidx = (r_newrefdef.rdflags & RDF_NOWORLDMODEL) ? RP_UI : RP_WORLD;
|
|
||||||
// non-depth write alias models don't occur with RF_WEAPONMODEL set, so no need for additional left-handed pipelines
|
|
||||||
qvkpipeline_t pipelines[2][2] = {
|
|
||||||
{ vk_drawModelPipelineFan[pidx], vk_drawLefthandModelPipelineFan },
|
|
||||||
{ vk_drawNoDepthModelPipelineFan, vk_drawLefthandModelPipelineFan } };
|
|
||||||
for (int p = 0; p < 2; p++)
|
|
||||||
{
|
|
||||||
VkDeviceSize vaoSize = sizeof(modelvert) * vertCounts[p];
|
|
||||||
VkBuffer vbo;
|
|
||||||
VkDeviceSize vboOffset;
|
|
||||||
uint8_t *vertData = QVk_GetVertexBuffer(vaoSize, &vbo, &vboOffset);
|
|
||||||
memcpy(vertData, vertList[p], vaoSize);
|
|
||||||
|
|
||||||
QVk_BindPipeline(&pipelines[translucentIdx][leftHandOffset]);
|
|
||||||
VkDescriptorSet descriptorSets[] = { skin->vk_texture.descriptorSet, uboDescriptorSet };
|
|
||||||
vkCmdBindDescriptorSets(vk_activeCmdbuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, pipelines[translucentIdx][leftHandOffset].layout, 0, 2, descriptorSets, 1, &uboOffset);
|
|
||||||
vkCmdBindVertexBuffers(vk_activeCmdbuffer, 0, 1, &vbo, &vboOffset);
|
|
||||||
|
|
||||||
if (p == TRIANGLE_STRIP)
|
|
||||||
{
|
|
||||||
vkCmdBindIndexBuffer(vk_activeCmdbuffer, QVk_GetTriangleStripIbo(maxTriangleFanIdxCnt), 0, VK_INDEX_TYPE_UINT16);
|
|
||||||
|
|
||||||
for (i = 0; i < pipeCounters[p]; i++)
|
|
||||||
{
|
|
||||||
vkCmdDrawIndexed(vk_activeCmdbuffer, (drawInfo[p][i].vertexCount - 2) * 3, 1, 0, drawInfo[p][i].firstVertex, 0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
vkCmdBindIndexBuffer(vk_activeCmdbuffer, QVk_GetTriangleFanIbo(maxTriangleFanIdxCnt), 0, VK_INDEX_TYPE_UINT16);
|
|
||||||
|
|
||||||
for (i = 0; i < pipeCounters[p]; i++)
|
|
||||||
{
|
|
||||||
vkCmdDrawIndexed(vk_activeCmdbuffer, (drawInfo[p][i].vertexCount - 2) * 3, 1, 0, drawInfo[p][i].firstVertex, 0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
=============
|
|
||||||
Vk_DrawAliasShadow
|
|
||||||
=============
|
|
||||||
*/
|
|
||||||
extern vec3_t lightspot;
|
|
||||||
|
|
||||||
static void Vk_DrawAliasShadow (dmdl_t *paliashdr, int posenum, float *modelMatrix, entity_t *currententity)
|
|
||||||
{
|
|
||||||
int *order;
|
|
||||||
vec3_t point;
|
|
||||||
float height, lheight;
|
|
||||||
|
|
||||||
lheight = currententity->origin[2] - lightspot[2];
|
|
||||||
|
|
||||||
height = 0;
|
|
||||||
|
|
||||||
order = (int *)((byte *)paliashdr + paliashdr->ofs_glcmds);
|
|
||||||
|
|
||||||
height = -lheight + 1.0;
|
|
||||||
|
|
||||||
uint32_t uboOffset;
|
|
||||||
VkDescriptorSet uboDescriptorSet;
|
|
||||||
uint8_t *uboData = QVk_GetUniformBuffer(sizeof(float) * 16, &uboOffset, &uboDescriptorSet);
|
|
||||||
memcpy(uboData, modelMatrix, sizeof(float) * 16);
|
|
||||||
|
|
||||||
while (1)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
int count;
|
|
||||||
|
|
||||||
i = 0;
|
|
||||||
// get the vertex count and primitive type
|
|
||||||
count = *order++;
|
|
||||||
if (!count)
|
|
||||||
break; // done
|
|
||||||
if (count < 0)
|
|
||||||
{
|
|
||||||
count = -count;
|
|
||||||
pipelineIdx = TRIANGLE_FAN;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
pipelineIdx = TRIANGLE_STRIP;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Mesh_VertsRealloc(count))
|
|
||||||
{
|
|
||||||
ri.Sys_Error(ERR_FATAL, "%s: can't allocate memory", __func__);
|
|
||||||
}
|
|
||||||
|
|
||||||
do
|
|
||||||
{
|
|
||||||
if (Mesh_VertsRealloc(order[2]))
|
|
||||||
{
|
|
||||||
ri.Sys_Error(ERR_FATAL, "%s: can't allocate memory", __func__);
|
|
||||||
}
|
|
||||||
|
|
||||||
// normals and vertexes come from the frame list
|
|
||||||
memcpy( point, s_lerped[order[2]], sizeof( point ) );
|
|
||||||
|
|
||||||
point[0] -= shadevector[0]*(point[2]+lheight);
|
|
||||||
point[1] -= shadevector[1]*(point[2]+lheight);
|
|
||||||
point[2] = height;
|
|
||||||
|
|
||||||
shadowverts[i][0] = point[0];
|
|
||||||
shadowverts[i][1] = point[1];
|
|
||||||
shadowverts[i][2] = point[2];
|
|
||||||
|
|
||||||
order += 3;
|
|
||||||
i++;
|
|
||||||
} while (--count);
|
|
||||||
|
|
||||||
if (i > 0)
|
|
||||||
{
|
|
||||||
VkDeviceSize vaoSize = sizeof(vec3_t) * i;
|
|
||||||
VkBuffer vbo;
|
|
||||||
VkDeviceSize vboOffset;
|
|
||||||
uint8_t *vertData = QVk_GetVertexBuffer(vaoSize, &vbo, &vboOffset);
|
|
||||||
memcpy(vertData, shadowverts, vaoSize);
|
|
||||||
|
|
||||||
QVk_BindPipeline(&vk_shadowsPipelineFan);
|
|
||||||
vkCmdBindDescriptorSets(vk_activeCmdbuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, vk_shadowsPipelineFan.layout, 0, 1, &uboDescriptorSet, 1, &uboOffset);
|
|
||||||
vkCmdBindVertexBuffers(vk_activeCmdbuffer, 0, 1, &vbo, &vboOffset);
|
|
||||||
|
|
||||||
if (pipelineIdx == TRIANGLE_STRIP)
|
|
||||||
{
|
|
||||||
vkCmdBindIndexBuffer(vk_activeCmdbuffer, QVk_GetTriangleStripIbo((i - 2) * 3), 0, VK_INDEX_TYPE_UINT16);
|
|
||||||
vkCmdDrawIndexed(vk_activeCmdbuffer, (i - 2) * 3, 1, 0, 0, 0);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
vkCmdBindIndexBuffer(vk_activeCmdbuffer, QVk_GetTriangleFanIbo((i - 2) * 3), 0, VK_INDEX_TYPE_UINT16);
|
|
||||||
vkCmdDrawIndexed(vk_activeCmdbuffer, (i - 2) * 3, 1, 0, 0, 0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
** R_CullAliasModel
|
|
||||||
*/
|
|
||||||
static qboolean R_CullAliasModel( vec3_t bbox[8], entity_t *e, model_t *currentmodel )
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
vec3_t mins, maxs;
|
|
||||||
dmdl_t *paliashdr;
|
|
||||||
vec3_t vectors[3];
|
|
||||||
vec3_t thismins, oldmins, thismaxs, oldmaxs;
|
|
||||||
daliasframe_t *pframe, *poldframe;
|
|
||||||
vec3_t angles;
|
|
||||||
|
|
||||||
paliashdr = (dmdl_t *)currentmodel->extradata;
|
|
||||||
|
|
||||||
if ( ( e->frame >= paliashdr->num_frames ) || ( e->frame < 0 ) )
|
|
||||||
{
|
|
||||||
R_Printf(PRINT_ALL, "%s %s: no such frame %d\n",
|
|
||||||
__func__, currentmodel->name, e->frame);
|
|
||||||
e->frame = 0;
|
|
||||||
}
|
|
||||||
if ( ( e->oldframe >= paliashdr->num_frames ) || ( e->oldframe < 0 ) )
|
|
||||||
{
|
|
||||||
R_Printf(PRINT_ALL, "%s %s: no such oldframe %d\n",
|
|
||||||
__func__, currentmodel->name, e->oldframe);
|
|
||||||
e->oldframe = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
pframe = ( daliasframe_t * ) ( ( byte * ) paliashdr +
|
|
||||||
paliashdr->ofs_frames +
|
|
||||||
e->frame * paliashdr->framesize);
|
|
||||||
|
|
||||||
poldframe = ( daliasframe_t * ) ( ( byte * ) paliashdr +
|
|
||||||
paliashdr->ofs_frames +
|
|
||||||
e->oldframe * paliashdr->framesize);
|
|
||||||
|
|
||||||
/*
|
|
||||||
** compute axially aligned mins and maxs
|
|
||||||
*/
|
|
||||||
if ( pframe == poldframe )
|
|
||||||
{
|
|
||||||
for ( i = 0; i < 3; i++ )
|
|
||||||
{
|
|
||||||
mins[i] = pframe->translate[i];
|
|
||||||
maxs[i] = mins[i] + pframe->scale[i]*255;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
for ( i = 0; i < 3; i++ )
|
|
||||||
{
|
|
||||||
thismins[i] = pframe->translate[i];
|
|
||||||
thismaxs[i] = thismins[i] + pframe->scale[i]*255;
|
|
||||||
|
|
||||||
oldmins[i] = poldframe->translate[i];
|
|
||||||
oldmaxs[i] = oldmins[i] + poldframe->scale[i]*255;
|
|
||||||
|
|
||||||
if ( thismins[i] < oldmins[i] )
|
|
||||||
mins[i] = thismins[i];
|
|
||||||
else
|
|
||||||
mins[i] = oldmins[i];
|
|
||||||
|
|
||||||
if ( thismaxs[i] > oldmaxs[i] )
|
|
||||||
maxs[i] = thismaxs[i];
|
|
||||||
else
|
|
||||||
maxs[i] = oldmaxs[i];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
** compute a full bounding box
|
|
||||||
*/
|
|
||||||
for ( i = 0; i < 8; i++ )
|
|
||||||
{
|
|
||||||
vec3_t tmp;
|
|
||||||
|
|
||||||
if ( i & 1 )
|
|
||||||
tmp[0] = mins[0];
|
|
||||||
else
|
|
||||||
tmp[0] = maxs[0];
|
|
||||||
|
|
||||||
if ( i & 2 )
|
|
||||||
tmp[1] = mins[1];
|
|
||||||
else
|
|
||||||
tmp[1] = maxs[1];
|
|
||||||
|
|
||||||
if ( i & 4 )
|
|
||||||
tmp[2] = mins[2];
|
|
||||||
else
|
|
||||||
tmp[2] = maxs[2];
|
|
||||||
|
|
||||||
VectorCopy( tmp, bbox[i] );
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
** rotate the bounding box
|
|
||||||
*/
|
|
||||||
VectorCopy( e->angles, angles );
|
|
||||||
angles[YAW] = -angles[YAW];
|
|
||||||
AngleVectors( angles, vectors[0], vectors[1], vectors[2] );
|
|
||||||
|
|
||||||
for ( i = 0; i < 8; i++ )
|
|
||||||
{
|
|
||||||
vec3_t tmp;
|
|
||||||
|
|
||||||
VectorCopy( bbox[i], tmp );
|
|
||||||
|
|
||||||
bbox[i][0] = DotProduct( vectors[0], tmp );
|
|
||||||
bbox[i][1] = -DotProduct( vectors[1], tmp );
|
|
||||||
bbox[i][2] = DotProduct( vectors[2], tmp );
|
|
||||||
|
|
||||||
VectorAdd( e->origin, bbox[i], bbox[i] );
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
int p, f, aggregatemask = ~0;
|
|
||||||
|
|
||||||
for ( p = 0; p < 8; p++ )
|
|
||||||
{
|
|
||||||
int mask = 0;
|
|
||||||
|
|
||||||
for ( f = 0; f < 4; f++ )
|
|
||||||
{
|
|
||||||
float dp = DotProduct( frustum[f].normal, bbox[p] );
|
|
||||||
|
|
||||||
if ( ( dp - frustum[f].dist ) < 0 )
|
|
||||||
{
|
|
||||||
mask |= ( 1 << f );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
aggregatemask &= mask;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( aggregatemask )
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
=================
|
|
||||||
R_DrawAliasModel
|
|
||||||
|
|
||||||
=================
|
|
||||||
*/
|
|
||||||
void R_DrawAliasModel (entity_t *currententity, model_t *currentmodel)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
int leftHandOffset = 0;
|
|
||||||
dmdl_t *paliashdr;
|
|
||||||
float an;
|
|
||||||
vec3_t bbox[8];
|
|
||||||
float prev_viewproj[16];
|
|
||||||
|
|
||||||
if ( !( currententity->flags & RF_WEAPONMODEL ) )
|
|
||||||
{
|
|
||||||
if ( R_CullAliasModel( bbox, currententity, currentmodel ) )
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( currententity->flags & RF_WEAPONMODEL )
|
|
||||||
{
|
|
||||||
if ( r_lefthand->value == 2 )
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
paliashdr = (dmdl_t *)currentmodel->extradata;
|
|
||||||
|
|
||||||
//
|
|
||||||
// get lighting information
|
|
||||||
//
|
|
||||||
// PMM - rewrote, reordered to handle new shells & mixing
|
|
||||||
// PMM - 3.20 code .. replaced with original way of doing it to keep mod authors happy
|
|
||||||
//
|
|
||||||
if ( currententity->flags & ( RF_SHELL_HALF_DAM | RF_SHELL_GREEN | RF_SHELL_RED | RF_SHELL_BLUE | RF_SHELL_DOUBLE ) )
|
|
||||||
{
|
|
||||||
VectorClear (shadelight);
|
|
||||||
if (currententity->flags & RF_SHELL_HALF_DAM)
|
|
||||||
{
|
|
||||||
shadelight[0] = 0.56;
|
|
||||||
shadelight[1] = 0.59;
|
|
||||||
shadelight[2] = 0.45;
|
|
||||||
}
|
|
||||||
if ( currententity->flags & RF_SHELL_DOUBLE )
|
|
||||||
{
|
|
||||||
shadelight[0] = 0.9;
|
|
||||||
shadelight[1] = 0.7;
|
|
||||||
}
|
|
||||||
if ( currententity->flags & RF_SHELL_RED )
|
|
||||||
shadelight[0] = 1.0;
|
|
||||||
if ( currententity->flags & RF_SHELL_GREEN )
|
|
||||||
shadelight[1] = 1.0;
|
|
||||||
if ( currententity->flags & RF_SHELL_BLUE )
|
|
||||||
shadelight[2] = 1.0;
|
|
||||||
}
|
|
||||||
else if ( currententity->flags & RF_FULLBRIGHT )
|
|
||||||
{
|
|
||||||
for (i=0 ; i<3 ; i++)
|
|
||||||
shadelight[i] = 1.0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
R_LightPoint (currententity->origin, shadelight, currententity);
|
|
||||||
|
|
||||||
// player lighting hack for communication back to server
|
|
||||||
// big hack!
|
|
||||||
if ( currententity->flags & RF_WEAPONMODEL )
|
|
||||||
{
|
|
||||||
// pick the greatest component, which should be the same
|
|
||||||
// as the mono value returned by software
|
|
||||||
if (shadelight[0] > shadelight[1])
|
|
||||||
{
|
|
||||||
if (shadelight[0] > shadelight[2])
|
|
||||||
r_lightlevel->value = 150*shadelight[0];
|
|
||||||
else
|
|
||||||
r_lightlevel->value = 150*shadelight[2];
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (shadelight[1] > shadelight[2])
|
|
||||||
r_lightlevel->value = 150*shadelight[1];
|
|
||||||
else
|
|
||||||
r_lightlevel->value = 150*shadelight[2];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( currententity->flags & RF_MINLIGHT )
|
|
||||||
{
|
|
||||||
for (i=0 ; i<3 ; i++)
|
|
||||||
if (shadelight[i] > 0.1)
|
|
||||||
break;
|
|
||||||
if (i == 3)
|
|
||||||
{
|
|
||||||
shadelight[0] = 0.1;
|
|
||||||
shadelight[1] = 0.1;
|
|
||||||
shadelight[2] = 0.1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( currententity->flags & RF_GLOW )
|
|
||||||
{ // bonus items will pulse with time
|
|
||||||
float scale;
|
|
||||||
|
|
||||||
scale = 0.1 * sin(r_newrefdef.time*7);
|
|
||||||
for (i=0 ; i<3 ; i++)
|
|
||||||
{
|
|
||||||
float min;
|
|
||||||
|
|
||||||
min = shadelight[i] * 0.8;
|
|
||||||
shadelight[i] += scale;
|
|
||||||
if (shadelight[i] < min)
|
|
||||||
shadelight[i] = min;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// =================
|
|
||||||
// PGM ir goggles color override
|
|
||||||
if ( r_newrefdef.rdflags & RDF_IRGOGGLES && currententity->flags & RF_IR_VISIBLE)
|
|
||||||
{
|
|
||||||
shadelight[0] = 1.0;
|
|
||||||
shadelight[1] = 0.0;
|
|
||||||
shadelight[2] = 0.0;
|
|
||||||
}
|
|
||||||
// PGM
|
|
||||||
// =================
|
|
||||||
|
|
||||||
shadedots = r_avertexnormal_dots[((int)(currententity->angles[1] * (SHADEDOT_QUANT / 360.0))) & (SHADEDOT_QUANT - 1)];
|
|
||||||
|
|
||||||
an = currententity->angles[1]/180*M_PI;
|
|
||||||
shadevector[0] = cos(-an);
|
|
||||||
shadevector[1] = sin(-an);
|
|
||||||
shadevector[2] = 1;
|
|
||||||
VectorNormalize (shadevector);
|
|
||||||
|
|
||||||
//
|
|
||||||
// locate the proper data
|
|
||||||
//
|
|
||||||
|
|
||||||
c_alias_polys += paliashdr->num_tris;
|
|
||||||
|
|
||||||
//
|
|
||||||
// draw all the triangles
|
|
||||||
//
|
|
||||||
if (currententity->flags & RF_DEPTHHACK || r_newrefdef.rdflags & RDF_NOWORLDMODEL) { // hack the depth range to prevent view model from poking into walls
|
|
||||||
float r_proj_aspect = (float)r_newrefdef.width / r_newrefdef.height;
|
|
||||||
float r_proj_fovy = r_newrefdef.fov_y;
|
|
||||||
float dist = (r_farsee->value == 0) ? 4096.0f : 8192.0f;
|
|
||||||
// use different range for player setup screen so it doesn't collide with the viewmodel
|
|
||||||
r_vulkan_correction_dh[10] = 0.3f - (r_newrefdef.rdflags & RDF_NOWORLDMODEL) * 0.1f;
|
|
||||||
r_vulkan_correction_dh[14] = 0.3f - (r_newrefdef.rdflags & RDF_NOWORLDMODEL) * 0.1f;
|
|
||||||
|
|
||||||
memcpy(prev_viewproj, r_viewproj_matrix, sizeof(r_viewproj_matrix));
|
|
||||||
if (currententity->flags & RF_WEAPONMODEL && r_gunfov->value < 0)
|
|
||||||
{
|
|
||||||
Mat_Perspective(r_projection_matrix, r_vulkan_correction_dh, r_proj_fovy, r_proj_aspect, 4, dist);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Mat_Perspective(r_projection_matrix, r_vulkan_correction_dh, r_gunfov->value, r_proj_aspect, 4, dist);
|
|
||||||
}
|
|
||||||
Mat_Mul(r_view_matrix, r_projection_matrix, r_viewproj_matrix);
|
|
||||||
vkCmdPushConstants(vk_activeCmdbuffer, vk_drawTexQuadPipeline[vk_state.current_renderpass].layout, VK_SHADER_STAGE_VERTEX_BIT, 0, sizeof(r_viewproj_matrix), r_viewproj_matrix);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( ( currententity->flags & RF_WEAPONMODEL ) && ( r_lefthand->value == 1.0F ) )
|
|
||||||
{
|
|
||||||
Mat_Scale(r_viewproj_matrix, -1.f, 1.f, 1.f);
|
|
||||||
vkCmdPushConstants(vk_activeCmdbuffer, vk_drawTexQuadPipeline[vk_state.current_renderpass].layout, VK_SHADER_STAGE_VERTEX_BIT, 0, sizeof(r_viewproj_matrix), r_viewproj_matrix);
|
|
||||||
leftHandOffset = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
currententity->angles[PITCH] = -currententity->angles[PITCH]; // sigh.
|
|
||||||
{
|
|
||||||
float model[16];
|
|
||||||
image_t *skin;
|
|
||||||
Mat_Identity(model);
|
|
||||||
R_RotateForEntity (currententity, model);
|
|
||||||
|
|
||||||
currententity->angles[PITCH] = -currententity->angles[PITCH]; // sigh.
|
|
||||||
|
|
||||||
// select skin
|
|
||||||
if (currententity->skin)
|
|
||||||
skin = currententity->skin; // custom player skin
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (currententity->skinnum >= MAX_MD2SKINS)
|
|
||||||
skin = currentmodel->skins[0];
|
|
||||||
else
|
|
||||||
{
|
|
||||||
skin = currentmodel->skins[currententity->skinnum];
|
|
||||||
if (!skin)
|
|
||||||
skin = currentmodel->skins[0];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!skin)
|
|
||||||
skin = r_notexture; // fallback...
|
|
||||||
|
|
||||||
// draw it
|
|
||||||
if ( (currententity->frame >= paliashdr->num_frames)
|
|
||||||
|| (currententity->frame < 0) )
|
|
||||||
{
|
|
||||||
R_Printf(PRINT_ALL, "%s %s: no such frame %d\n",
|
|
||||||
__func__, currentmodel->name, currententity->frame);
|
|
||||||
currententity->frame = 0;
|
|
||||||
currententity->oldframe = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( (currententity->oldframe >= paliashdr->num_frames)
|
|
||||||
|| (currententity->oldframe < 0))
|
|
||||||
{
|
|
||||||
R_Printf(PRINT_ALL, "%s %s: no such oldframe %d\n",
|
|
||||||
__func__, currentmodel->name, currententity->oldframe);
|
|
||||||
currententity->frame = 0;
|
|
||||||
currententity->oldframe = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( !r_lerpmodels->value )
|
|
||||||
currententity->backlerp = 0;
|
|
||||||
Vk_DrawAliasFrameLerp (paliashdr, currententity->backlerp, skin, model, leftHandOffset, (currententity->flags & RF_TRANSLUCENT) ? 1 : 0, currententity);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( ( currententity->flags & RF_WEAPONMODEL ) && ( r_lefthand->value == 1.0F ) )
|
|
||||||
{
|
|
||||||
Mat_Scale(r_viewproj_matrix, -1.f, 1.f, 1.f);
|
|
||||||
vkCmdPushConstants(vk_activeCmdbuffer, vk_drawTexQuadPipeline[vk_state.current_renderpass].layout, VK_SHADER_STAGE_VERTEX_BIT, 0, sizeof(r_viewproj_matrix), r_viewproj_matrix);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (currententity->flags & RF_DEPTHHACK || r_newrefdef.rdflags & RDF_NOWORLDMODEL)
|
|
||||||
{
|
|
||||||
memcpy(r_viewproj_matrix, prev_viewproj, sizeof(prev_viewproj));
|
|
||||||
vkCmdPushConstants(vk_activeCmdbuffer, vk_drawTexQuadPipeline[vk_state.current_renderpass].layout, VK_SHADER_STAGE_VERTEX_BIT, 0, sizeof(r_viewproj_matrix), r_viewproj_matrix);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (vk_shadows->value && !(currententity->flags & (RF_TRANSLUCENT | RF_WEAPONMODEL)))
|
|
||||||
{
|
|
||||||
float model[16];
|
|
||||||
Mat_Identity(model);
|
|
||||||
R_RotateForEntity(currententity, model);
|
|
||||||
Vk_DrawAliasShadow (paliashdr, currententity->frame, model, currententity);
|
|
||||||
}
|
|
||||||
}
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,222 +0,0 @@
|
||||||
/*
|
|
||||||
Copyright (C) 2018-2019 Krzysztof Kondrak
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or
|
|
||||||
modify it under the terms of the GNU General Public License
|
|
||||||
as published by the Free Software Foundation; either version 2
|
|
||||||
of the License, or (at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
||||||
|
|
||||||
See the GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "header/local.h"
|
|
||||||
|
|
||||||
qvkshader_t QVk_CreateShader(const uint32_t *shaderSrc, size_t shaderCodeSize, VkShaderStageFlagBits shaderStage)
|
|
||||||
{
|
|
||||||
qvkshader_t shader;
|
|
||||||
VkShaderModuleCreateInfo smCreateInfo = {
|
|
||||||
.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO,
|
|
||||||
.pNext = NULL,
|
|
||||||
.flags = 0,
|
|
||||||
.codeSize = shaderCodeSize,
|
|
||||||
.pCode = shaderSrc
|
|
||||||
};
|
|
||||||
|
|
||||||
VK_VERIFY(vkCreateShaderModule(vk_device.logical, &smCreateInfo, NULL, &shader.module));
|
|
||||||
|
|
||||||
VkPipelineShaderStageCreateInfo vssCreateInfo = {
|
|
||||||
.sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO,
|
|
||||||
.pNext = NULL,
|
|
||||||
.flags = 0,
|
|
||||||
.stage = shaderStage,
|
|
||||||
.module = shader.module,
|
|
||||||
.pName = "main",
|
|
||||||
.pSpecializationInfo = NULL
|
|
||||||
};
|
|
||||||
|
|
||||||
shader.createInfo = vssCreateInfo;
|
|
||||||
|
|
||||||
return shader;
|
|
||||||
}
|
|
||||||
|
|
||||||
void QVk_CreatePipeline(const VkDescriptorSetLayout *descriptorLayout, const uint32_t descLayoutCount, const VkPipelineVertexInputStateCreateInfo *vertexInputInfo,
|
|
||||||
qvkpipeline_t *pipeline, const qvkrenderpass_t *renderpass, const qvkshader_t *shaders, uint32_t shaderCount)
|
|
||||||
{
|
|
||||||
VkPipelineShaderStageCreateInfo *ssCreateInfos = (VkPipelineShaderStageCreateInfo *)malloc(shaderCount * sizeof(VkPipelineShaderStageCreateInfo));
|
|
||||||
for (int i = 0; i < shaderCount; i++)
|
|
||||||
{
|
|
||||||
ssCreateInfos[i] = shaders[i].createInfo;
|
|
||||||
}
|
|
||||||
|
|
||||||
VkPipelineInputAssemblyStateCreateInfo iaCreateInfo = {
|
|
||||||
.sType = VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO,
|
|
||||||
.pNext = NULL,
|
|
||||||
.flags = 0,
|
|
||||||
.topology = pipeline->topology,
|
|
||||||
.primitiveRestartEnable = VK_FALSE
|
|
||||||
};
|
|
||||||
|
|
||||||
VkViewport viewport = {
|
|
||||||
.x = 0.f,
|
|
||||||
.y = 0.f,
|
|
||||||
.width = (float)vid.width,
|
|
||||||
.height = (float)vid.height,
|
|
||||||
.minDepth = 0.f,
|
|
||||||
.maxDepth = 1.f,
|
|
||||||
};
|
|
||||||
|
|
||||||
VkRect2D scissor = {
|
|
||||||
.offset.x = 0,
|
|
||||||
.offset.y = 0,
|
|
||||||
.extent = vk_swapchain.extent
|
|
||||||
};
|
|
||||||
|
|
||||||
VkPipelineViewportStateCreateInfo vpCreateInfo = {
|
|
||||||
.sType = VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO,
|
|
||||||
.pNext = NULL,
|
|
||||||
.flags = 0,
|
|
||||||
.viewportCount = 1,
|
|
||||||
.pViewports = &viewport,
|
|
||||||
.scissorCount = 1,
|
|
||||||
.pScissors = &scissor
|
|
||||||
};
|
|
||||||
|
|
||||||
VkPipelineRasterizationStateCreateInfo rCreateInfo = {
|
|
||||||
.sType = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO,
|
|
||||||
.pNext = NULL,
|
|
||||||
.flags = 0,
|
|
||||||
.depthClampEnable = VK_FALSE,
|
|
||||||
.rasterizerDiscardEnable = VK_FALSE,
|
|
||||||
.polygonMode = VK_POLYGON_MODE_FILL,
|
|
||||||
.cullMode = pipeline->cullMode,
|
|
||||||
.frontFace = VK_FRONT_FACE_CLOCKWISE,
|
|
||||||
.depthBiasEnable = VK_FALSE,
|
|
||||||
.depthBiasConstantFactor = 0.f,
|
|
||||||
.depthBiasClamp = 0.f,
|
|
||||||
.depthBiasSlopeFactor = 0.f,
|
|
||||||
.lineWidth = 1.f
|
|
||||||
};
|
|
||||||
|
|
||||||
VkPipelineMultisampleStateCreateInfo msCreateInfo = {
|
|
||||||
.sType = VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO,
|
|
||||||
.pNext = NULL,
|
|
||||||
.flags = 0,
|
|
||||||
.rasterizationSamples = renderpass->sampleCount,
|
|
||||||
.sampleShadingEnable = (vk_sampleshading->value > 0 && vk_device.features.sampleRateShading) ? VK_TRUE : VK_FALSE,
|
|
||||||
.minSampleShading = (vk_sampleshading->value > 0 && vk_device.features.sampleRateShading) ? 1.f : 0.f,
|
|
||||||
.pSampleMask = NULL,
|
|
||||||
.alphaToCoverageEnable = VK_FALSE,
|
|
||||||
.alphaToOneEnable = VK_FALSE
|
|
||||||
};
|
|
||||||
|
|
||||||
VkPipelineDepthStencilStateCreateInfo dCreateInfo = {
|
|
||||||
.sType = VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO,
|
|
||||||
.pNext = NULL,
|
|
||||||
.flags = 0,
|
|
||||||
.depthTestEnable = pipeline->depthTestEnable,
|
|
||||||
.depthWriteEnable = pipeline->depthTestEnable == VK_TRUE ? pipeline->depthWriteEnable : VK_FALSE, // there should be NO depth writes if depthTestEnable is false but Intel seems to not follow the specs fully...
|
|
||||||
.depthCompareOp = VK_COMPARE_OP_LESS,
|
|
||||||
.depthBoundsTestEnable = VK_FALSE,
|
|
||||||
.stencilTestEnable = VK_FALSE,
|
|
||||||
.front = { VK_STENCIL_OP_KEEP, VK_STENCIL_OP_KEEP, VK_STENCIL_OP_KEEP, VK_COMPARE_OP_NEVER, 0, 0, 0 },
|
|
||||||
.back = { VK_STENCIL_OP_KEEP, VK_STENCIL_OP_KEEP, VK_STENCIL_OP_KEEP, VK_COMPARE_OP_NEVER, 0, 0, 0 },
|
|
||||||
.minDepthBounds = 0.f,
|
|
||||||
.maxDepthBounds = 1.f
|
|
||||||
};
|
|
||||||
|
|
||||||
VkPipelineColorBlendStateCreateInfo cbsCreateInfo = {
|
|
||||||
.sType = VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO,
|
|
||||||
.pNext = NULL,
|
|
||||||
.flags = 0,
|
|
||||||
.logicOpEnable = VK_FALSE,
|
|
||||||
.logicOp = VK_LOGIC_OP_COPY,
|
|
||||||
.attachmentCount = 1,
|
|
||||||
.pAttachments = &pipeline->blendOpts,
|
|
||||||
.blendConstants[0] = 0.f,
|
|
||||||
.blendConstants[1] = 0.f,
|
|
||||||
.blendConstants[2] = 0.f,
|
|
||||||
.blendConstants[3] = 0.f
|
|
||||||
};
|
|
||||||
|
|
||||||
VkDynamicState dynamicStates[] = { VK_DYNAMIC_STATE_VIEWPORT, VK_DYNAMIC_STATE_SCISSOR };
|
|
||||||
VkPipelineDynamicStateCreateInfo dsCreateInfo = {
|
|
||||||
.sType = VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO,
|
|
||||||
.pNext = NULL,
|
|
||||||
.flags = 0,
|
|
||||||
.dynamicStateCount = 2,
|
|
||||||
.pDynamicStates = dynamicStates
|
|
||||||
};
|
|
||||||
|
|
||||||
// push constant sizes accomodate for maximum number of uploaded elements (should probably be checked against the hardware's maximum supported value)
|
|
||||||
VkPushConstantRange pushConstantRange[] = {
|
|
||||||
{
|
|
||||||
.stageFlags = VK_SHADER_STAGE_VERTEX_BIT,
|
|
||||||
.offset = 0,
|
|
||||||
.size = 17 * sizeof(float)
|
|
||||||
},
|
|
||||||
{
|
|
||||||
.stageFlags = VK_SHADER_STAGE_FRAGMENT_BIT,
|
|
||||||
.offset = 17 * sizeof(float),
|
|
||||||
.size = 11 * sizeof(float)
|
|
||||||
}};
|
|
||||||
|
|
||||||
VkPipelineLayoutCreateInfo plCreateInfo = {
|
|
||||||
.sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO,
|
|
||||||
.pNext = NULL,
|
|
||||||
.flags = 0,
|
|
||||||
.setLayoutCount = descLayoutCount,
|
|
||||||
.pSetLayouts = descriptorLayout,
|
|
||||||
// for simplicity assume only two push constant range is passed,
|
|
||||||
// so it's not the most flexible approach
|
|
||||||
.pushConstantRangeCount = 2,
|
|
||||||
.pPushConstantRanges = pushConstantRange
|
|
||||||
};
|
|
||||||
|
|
||||||
VK_VERIFY(vkCreatePipelineLayout(vk_device.logical, &plCreateInfo, NULL, &pipeline->layout));
|
|
||||||
|
|
||||||
// create THE pipeline
|
|
||||||
VkGraphicsPipelineCreateInfo pCreateInfo = {
|
|
||||||
.sType = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO,
|
|
||||||
.pNext = NULL,
|
|
||||||
.flags = pipeline->flags,
|
|
||||||
.stageCount = shaderCount,
|
|
||||||
.pStages = ssCreateInfos,
|
|
||||||
.pVertexInputState = vertexInputInfo,
|
|
||||||
.pInputAssemblyState = &iaCreateInfo,
|
|
||||||
.pTessellationState = NULL,
|
|
||||||
.pViewportState = &vpCreateInfo,
|
|
||||||
.pRasterizationState = &rCreateInfo,
|
|
||||||
.pMultisampleState = &msCreateInfo,
|
|
||||||
.pDepthStencilState = &dCreateInfo,
|
|
||||||
.pColorBlendState = &cbsCreateInfo,
|
|
||||||
.pDynamicState = &dsCreateInfo,
|
|
||||||
.layout = pipeline->layout,
|
|
||||||
.renderPass = renderpass->rp,
|
|
||||||
.subpass = 0,
|
|
||||||
.basePipelineHandle = VK_NULL_HANDLE,
|
|
||||||
.basePipelineIndex = -1
|
|
||||||
};
|
|
||||||
|
|
||||||
VK_VERIFY(vkCreateGraphicsPipelines(vk_device.logical, VK_NULL_HANDLE, 1, &pCreateInfo, NULL, &pipeline->pl));
|
|
||||||
free(ssCreateInfos);
|
|
||||||
}
|
|
||||||
|
|
||||||
void QVk_DestroyPipeline(qvkpipeline_t *pipeline)
|
|
||||||
{
|
|
||||||
if (pipeline->layout != VK_NULL_HANDLE)
|
|
||||||
vkDestroyPipelineLayout(vk_device.logical, pipeline->layout, NULL);
|
|
||||||
if (pipeline->pl != VK_NULL_HANDLE)
|
|
||||||
vkDestroyPipeline(vk_device.logical, pipeline->pl, NULL);
|
|
||||||
|
|
||||||
pipeline->layout = VK_NULL_HANDLE;
|
|
||||||
pipeline->pl = VK_NULL_HANDLE;
|
|
||||||
}
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,325 +0,0 @@
|
||||||
/*
|
|
||||||
Copyright (C) 1997-2001 Id Software, Inc.
|
|
||||||
Copyright (C) 2018-2019 Krzysztof Kondrak
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or
|
|
||||||
modify it under the terms of the GNU General Public License
|
|
||||||
as published by the Free Software Foundation; either version 2
|
|
||||||
of the License, or (at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
||||||
|
|
||||||
See the GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
||||||
*/
|
|
||||||
|
|
||||||
// vk_misc.c
|
|
||||||
|
|
||||||
#include "header/local.h"
|
|
||||||
|
|
||||||
/*
|
|
||||||
==================
|
|
||||||
RE_InitParticleTexture
|
|
||||||
==================
|
|
||||||
*/
|
|
||||||
static byte dottexture[8][8] =
|
|
||||||
{
|
|
||||||
{0,0,0,0,0,0,0,0},
|
|
||||||
{0,0,1,1,0,0,0,0},
|
|
||||||
{0,1,1,1,1,0,0,0},
|
|
||||||
{0,1,1,1,1,0,0,0},
|
|
||||||
{0,0,1,1,0,0,0,0},
|
|
||||||
{0,0,0,0,0,0,0,0},
|
|
||||||
{0,0,0,0,0,0,0,0},
|
|
||||||
{0,0,0,0,0,0,0,0},
|
|
||||||
};
|
|
||||||
|
|
||||||
void RE_InitParticleTexture (void)
|
|
||||||
{
|
|
||||||
int x,y,i;
|
|
||||||
byte data[8][8][4];
|
|
||||||
|
|
||||||
//
|
|
||||||
// particle texture
|
|
||||||
//
|
|
||||||
for (x=0 ; x<8 ; x++)
|
|
||||||
{
|
|
||||||
for (y=0 ; y<8 ; y++)
|
|
||||||
{
|
|
||||||
data[y][x][0] = 255;
|
|
||||||
data[y][x][1] = 255;
|
|
||||||
data[y][x][2] = 255;
|
|
||||||
data[y][x][3] = dottexture[x][y]*255;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
r_particletexture = Vk_LoadPic("***particle***", (byte *)data,
|
|
||||||
8, 8, 8, 8, it_sprite, 32);
|
|
||||||
|
|
||||||
//
|
|
||||||
// particle texture
|
|
||||||
//
|
|
||||||
for (x=0 ; x<8 ; x++)
|
|
||||||
{
|
|
||||||
for (y=0 ; y<8 ; y++)
|
|
||||||
{
|
|
||||||
for (i=0 ; i<4 ; i++)
|
|
||||||
{
|
|
||||||
data[y][x][i] = ((y < 4) && (x < 4)) ? 255 : 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
r_squaretexture = Vk_LoadPic("***square***", (byte *)data,
|
|
||||||
8, 8, 8, 8, it_sprite, 32);
|
|
||||||
|
|
||||||
//
|
|
||||||
// also use this for bad textures, but without alpha
|
|
||||||
//
|
|
||||||
for (x=0 ; x<8 ; x++)
|
|
||||||
{
|
|
||||||
for (y=0 ; y<8 ; y++)
|
|
||||||
{
|
|
||||||
data[y][x][0] = dottexture[x&3][y&3]*255;
|
|
||||||
data[y][x][1] = 0;
|
|
||||||
data[y][x][2] = 0;
|
|
||||||
data[y][x][3] = 255;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
r_notexture = Vk_LoadPic("***r_notexture***", (byte *)data,
|
|
||||||
8, 8, 8, 8, it_wall, 32);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
==============================================================================
|
|
||||||
|
|
||||||
SCREEN SHOTS
|
|
||||||
|
|
||||||
==============================================================================
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
==================
|
|
||||||
Vk_ScreenShot_f
|
|
||||||
==================
|
|
||||||
*/
|
|
||||||
void Vk_ScreenShot_f (void)
|
|
||||||
{
|
|
||||||
byte *buffer;
|
|
||||||
int i;
|
|
||||||
size_t buffSize = vid.width * vid.height * 4;
|
|
||||||
|
|
||||||
if (!vk_device.screenshotSupported)
|
|
||||||
{
|
|
||||||
R_Printf(PRINT_ALL, "%s: Screenshots are not supported by this GPU.\n", __func__);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
buffer = malloc(buffSize);
|
|
||||||
|
|
||||||
VkExtent2D extent = {
|
|
||||||
.width = (uint32_t)(vid.width),
|
|
||||||
.height = (uint32_t)(vid.height),
|
|
||||||
};
|
|
||||||
VkOffset2D offset = {
|
|
||||||
.x = (int32_t)((vk_swapchain.extent.width - extent.width) / 2u),
|
|
||||||
.y = (int32_t)((vk_swapchain.extent.height - extent.height) / 2u),
|
|
||||||
};
|
|
||||||
|
|
||||||
QVk_ReadPixels(buffer, &offset, &extent);
|
|
||||||
|
|
||||||
// swap rgb to bgr
|
|
||||||
if (vk_swapchain.format == VK_FORMAT_R8G8B8A8_UNORM ||
|
|
||||||
vk_swapchain.format == VK_FORMAT_R8G8B8A8_SRGB)
|
|
||||||
{
|
|
||||||
for (i = 0; i < buffSize; i += 4)
|
|
||||||
{
|
|
||||||
buffer[i + 3] = 255;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
for (i = 0; i < buffSize; i += 4)
|
|
||||||
{
|
|
||||||
int temp;
|
|
||||||
|
|
||||||
temp = buffer[i];
|
|
||||||
buffer[i] = buffer[i + 2];
|
|
||||||
buffer[i + 2] = temp;
|
|
||||||
buffer[i + 3] = 255; // alpha component
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ri.Vid_WriteScreenshot(vid.width, vid.height, 4, buffer);
|
|
||||||
|
|
||||||
free(buffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
** Vk_Strings_f
|
|
||||||
*/
|
|
||||||
void Vk_Strings_f(void)
|
|
||||||
{
|
|
||||||
int i = 0;
|
|
||||||
|
|
||||||
uint32_t numDevices = 0;
|
|
||||||
int usedDevice = 0;
|
|
||||||
VkPhysicalDevice *physicalDevices;
|
|
||||||
VkPhysicalDeviceProperties deviceProperties;
|
|
||||||
int preferredDevice = (int)vk_device_idx->value;
|
|
||||||
int msaa = (int)vk_msaa->value;
|
|
||||||
uint32_t driverMajor = VK_VERSION_MAJOR(vk_device.properties.driverVersion);
|
|
||||||
uint32_t driverMinor = VK_VERSION_MINOR(vk_device.properties.driverVersion);
|
|
||||||
uint32_t driverPatch = VK_VERSION_PATCH(vk_device.properties.driverVersion);
|
|
||||||
|
|
||||||
// NVIDIA driver version decoding scheme
|
|
||||||
if (vk_device.properties.vendorID == 0x10DE)
|
|
||||||
{
|
|
||||||
driverMajor = ((uint32_t)(vk_device.properties.driverVersion) >> 22) & 0x3ff;
|
|
||||||
driverMinor = ((uint32_t)(vk_device.properties.driverVersion) >> 14) & 0x0ff;
|
|
||||||
|
|
||||||
uint32_t secondary = ((uint32_t)(vk_device.properties.driverVersion) >> 6) & 0x0ff;
|
|
||||||
uint32_t tertiary = vk_device.properties.driverVersion & 0x03f;
|
|
||||||
|
|
||||||
driverPatch = (secondary << 8) | tertiary;
|
|
||||||
}
|
|
||||||
|
|
||||||
VK_VERIFY(vkEnumeratePhysicalDevices(vk_instance, &numDevices, NULL));
|
|
||||||
if (!numDevices)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
physicalDevices = malloc(sizeof(VkPhysicalDevice) * numDevices);
|
|
||||||
if (!physicalDevices)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
VK_VERIFY(vkEnumeratePhysicalDevices(vk_instance, &numDevices, physicalDevices));
|
|
||||||
|
|
||||||
if (preferredDevice >= numDevices)
|
|
||||||
{
|
|
||||||
preferredDevice = -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
R_Printf(PRINT_ALL, "------------------------------------\n");
|
|
||||||
R_Printf(PRINT_ALL, "Vulkan API: %d.%d\n", VK_VERSION_MAJOR(vk_config.vk_version),
|
|
||||||
VK_VERSION_MINOR(vk_config.vk_version));
|
|
||||||
R_Printf(PRINT_ALL, "Header version: %d\n", VK_HEADER_VERSION);
|
|
||||||
R_Printf(PRINT_ALL, "Devices found:\n");
|
|
||||||
for (i = 0; i < numDevices; ++i)
|
|
||||||
{
|
|
||||||
qboolean isPreferred = false;
|
|
||||||
|
|
||||||
vkGetPhysicalDeviceProperties(physicalDevices[i], &deviceProperties);
|
|
||||||
isPreferred = (preferredDevice == i) || (
|
|
||||||
preferredDevice < 0 &&
|
|
||||||
deviceProperties.deviceType == VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU
|
|
||||||
);
|
|
||||||
if (isPreferred) {
|
|
||||||
usedDevice = i;
|
|
||||||
}
|
|
||||||
R_Printf(PRINT_ALL, "%s#%d: %s\n",
|
|
||||||
isPreferred && numDevices > 1 ? "* " : " ",
|
|
||||||
i, deviceProperties.deviceName);
|
|
||||||
}
|
|
||||||
free(physicalDevices);
|
|
||||||
|
|
||||||
R_Printf(PRINT_ALL, "Using device #%d:\n", usedDevice);
|
|
||||||
R_Printf(PRINT_ALL, " deviceName: %s\n", vk_device.properties.deviceName);
|
|
||||||
R_Printf(PRINT_ALL, " resolution: %dx%d", vid.width, vid.height);
|
|
||||||
if (msaa > 0)
|
|
||||||
{
|
|
||||||
R_Printf(PRINT_ALL, " (MSAAx%d)\n", msaa);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
R_Printf(PRINT_ALL, "\n");
|
|
||||||
}
|
|
||||||
#ifndef __linux__
|
|
||||||
// Intel on Windows and MacOS (Linux uses semver for Mesa drivers)
|
|
||||||
if (vk_device.properties.vendorID == 0x8086)
|
|
||||||
{
|
|
||||||
R_Printf(PRINT_ALL, " driverVersion: %d (0x%X)\n",
|
|
||||||
vk_device.properties.driverVersion,
|
|
||||||
vk_device.properties.driverVersion);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
R_Printf(PRINT_ALL, " driverVersion: %d.%d.%d (0x%X)\n",
|
|
||||||
driverMajor, driverMinor, driverPatch,
|
|
||||||
vk_device.properties.driverVersion);
|
|
||||||
}
|
|
||||||
|
|
||||||
R_Printf(PRINT_ALL, " apiVersion: %d.%d.%d\n",
|
|
||||||
VK_VERSION_MAJOR(vk_device.properties.apiVersion),
|
|
||||||
VK_VERSION_MINOR(vk_device.properties.apiVersion),
|
|
||||||
VK_VERSION_PATCH(vk_device.properties.apiVersion));
|
|
||||||
R_Printf(PRINT_ALL, " deviceID: %d\n", vk_device.properties.deviceID);
|
|
||||||
R_Printf(PRINT_ALL, " vendorID: 0x%X (%s)\n",
|
|
||||||
vk_device.properties.vendorID, vk_config.vendor_name);
|
|
||||||
R_Printf(PRINT_ALL, " deviceType: %s\n", vk_config.device_type);
|
|
||||||
R_Printf(PRINT_ALL, " gfx/present/transfer: %d/%d/%d\n",
|
|
||||||
vk_device.gfxFamilyIndex,
|
|
||||||
vk_device.presentFamilyIndex,
|
|
||||||
vk_device.transferFamilyIndex);
|
|
||||||
R_Printf(PRINT_ALL, "Present mode: %s\n", vk_config.present_mode);
|
|
||||||
R_Printf(PRINT_ALL, "Swapchain image format: %d\n", vk_swapchain.format);
|
|
||||||
|
|
||||||
R_Printf(PRINT_ALL, "Supported present modes: ");
|
|
||||||
i = 0;
|
|
||||||
while(vk_config.supported_present_modes[i])
|
|
||||||
{
|
|
||||||
R_Printf(PRINT_ALL, "%s ", vk_config.supported_present_modes[i++]);
|
|
||||||
}
|
|
||||||
R_Printf(PRINT_ALL, "\n");
|
|
||||||
|
|
||||||
R_Printf(PRINT_ALL, "Enabled extensions: ");
|
|
||||||
i = 0;
|
|
||||||
while(vk_config.extensions[i])
|
|
||||||
{
|
|
||||||
R_Printf(PRINT_ALL, "%s ", vk_config.extensions[i++]);
|
|
||||||
}
|
|
||||||
R_Printf(PRINT_ALL, "\n");
|
|
||||||
|
|
||||||
R_Printf(PRINT_ALL, "Enabled layers: ");
|
|
||||||
i = 0;
|
|
||||||
while(vk_config.layers[i])
|
|
||||||
{
|
|
||||||
R_Printf(PRINT_ALL, "%s ", vk_config.layers[i++]);
|
|
||||||
}
|
|
||||||
R_Printf(PRINT_ALL, "\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
** Vk_Mem_f
|
|
||||||
*/
|
|
||||||
void Vk_Mem_f(void)
|
|
||||||
{
|
|
||||||
R_Printf(PRINT_ALL, "\nDynamic buffer stats: \n");
|
|
||||||
R_Printf(PRINT_ALL, "Vertex : %u/%ukB (%.1f%% max: %ukB)\n",
|
|
||||||
vk_config.vertex_buffer_usage / 1024,
|
|
||||||
vk_config.vertex_buffer_size / 1024,
|
|
||||||
100.f * vk_config.vertex_buffer_usage / vk_config.vertex_buffer_size,
|
|
||||||
vk_config.vertex_buffer_max_usage / 1024);
|
|
||||||
|
|
||||||
R_Printf(PRINT_ALL, "Index : %u/%uB (%.1f%% max: %uB)\n",
|
|
||||||
vk_config.index_buffer_usage,
|
|
||||||
vk_config.index_buffer_size,
|
|
||||||
100.f * vk_config.index_buffer_usage / vk_config.index_buffer_size,
|
|
||||||
vk_config.index_buffer_max_usage);
|
|
||||||
R_Printf(PRINT_ALL, "Uniform: %u/%ukB (%.1f%% max: %ukB)\n",
|
|
||||||
vk_config.uniform_buffer_usage / 1024,
|
|
||||||
vk_config.uniform_buffer_size / 1024,
|
|
||||||
100.f * vk_config.uniform_buffer_usage / vk_config.uniform_buffer_size,
|
|
||||||
vk_config.uniform_buffer_max_usage / 1024);
|
|
||||||
R_Printf(PRINT_ALL, "Triangle index: %u/%u (%.1f%% max: %u)\n",
|
|
||||||
vk_config.triangle_index_usage,
|
|
||||||
vk_config.triangle_index_count,
|
|
||||||
100.f * vk_config.triangle_index_usage / vk_config.triangle_index_count,
|
|
||||||
vk_config.triangle_index_max_usage);
|
|
||||||
}
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,85 +0,0 @@
|
||||||
/*
|
|
||||||
Copyright (C) 2018-2019 Krzysztof Kondrak
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or
|
|
||||||
modify it under the terms of the GNU General Public License
|
|
||||||
as published by the Free Software Foundation; either version 2
|
|
||||||
of the License, or (at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
||||||
|
|
||||||
See the GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "header/shaders.h"
|
|
||||||
|
|
||||||
// ingame shaders stored as uint32_t arrays (autogenerated by glslangValidator)
|
|
||||||
#include "spirv/basic_vert.c"
|
|
||||||
#include "spirv/basic_frag.c"
|
|
||||||
#include "spirv/basic_color_quad_vert.c"
|
|
||||||
#include "spirv/basic_color_quad_frag.c"
|
|
||||||
#include "spirv/model_vert.c"
|
|
||||||
#include "spirv/model_frag.c"
|
|
||||||
#include "spirv/nullmodel_vert.c"
|
|
||||||
#include "spirv/particle_vert.c"
|
|
||||||
#include "spirv/point_particle_vert.c"
|
|
||||||
#include "spirv/point_particle_frag.c"
|
|
||||||
#include "spirv/sprite_vert.c"
|
|
||||||
#include "spirv/beam_vert.c"
|
|
||||||
#include "spirv/skybox_vert.c"
|
|
||||||
#include "spirv/d_light_vert.c"
|
|
||||||
#include "spirv/polygon_vert.c"
|
|
||||||
#include "spirv/polygon_lmap_vert.c"
|
|
||||||
#include "spirv/polygon_lmap_frag.c"
|
|
||||||
#include "spirv/polygon_warp_vert.c"
|
|
||||||
#include "spirv/shadows_vert.c"
|
|
||||||
#include "spirv/postprocess_vert.c"
|
|
||||||
#include "spirv/postprocess_frag.c"
|
|
||||||
#include "spirv/world_warp_vert.c"
|
|
||||||
#include "spirv/world_warp_frag.c"
|
|
||||||
|
|
||||||
const size_t basic_vert_size = sizeof(basic_vert_spv);
|
|
||||||
const size_t basic_frag_size = sizeof(basic_frag_spv);
|
|
||||||
|
|
||||||
const size_t basic_color_quad_vert_size = sizeof(basic_color_quad_vert_spv);
|
|
||||||
const size_t basic_color_quad_frag_size = sizeof(basic_color_quad_frag_spv);
|
|
||||||
|
|
||||||
const size_t model_vert_size = sizeof(model_vert_spv);
|
|
||||||
const size_t model_frag_size = sizeof(model_frag_spv);
|
|
||||||
|
|
||||||
const size_t nullmodel_vert_size = sizeof(nullmodel_vert_spv);
|
|
||||||
|
|
||||||
const size_t particle_vert_size = sizeof(particle_vert_spv);
|
|
||||||
|
|
||||||
const size_t point_particle_vert_size = sizeof(point_particle_vert_spv);
|
|
||||||
const size_t point_particle_frag_size = sizeof(point_particle_frag_spv);
|
|
||||||
|
|
||||||
const size_t sprite_vert_size = sizeof(sprite_vert_spv);
|
|
||||||
|
|
||||||
const size_t beam_vert_size = sizeof(beam_vert_spv);
|
|
||||||
|
|
||||||
const size_t skybox_vert_size = sizeof(skybox_vert_spv);
|
|
||||||
|
|
||||||
const size_t d_light_vert_size = sizeof(d_light_vert_spv);
|
|
||||||
|
|
||||||
const size_t polygon_vert_size = sizeof(polygon_vert_spv);
|
|
||||||
|
|
||||||
const size_t polygon_lmap_vert_size = sizeof(polygon_lmap_vert_spv);
|
|
||||||
const size_t polygon_lmap_frag_size = sizeof(polygon_lmap_frag_spv);
|
|
||||||
|
|
||||||
const size_t polygon_warp_vert_size = sizeof(polygon_warp_vert_spv);
|
|
||||||
|
|
||||||
const size_t shadows_vert_size = sizeof(shadows_vert_spv);
|
|
||||||
|
|
||||||
const size_t postprocess_vert_size = sizeof(postprocess_vert_spv);
|
|
||||||
const size_t postprocess_frag_size = sizeof(postprocess_frag_spv);
|
|
||||||
|
|
||||||
const size_t world_warp_vert_size = sizeof(world_warp_vert_spv);
|
|
||||||
const size_t world_warp_frag_size = sizeof(world_warp_frag_spv);
|
|
|
@ -1,250 +0,0 @@
|
||||||
/*
|
|
||||||
Copyright (C) 2018-2019 Krzysztof Kondrak
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or
|
|
||||||
modify it under the terms of the GNU General Public License
|
|
||||||
as published by the Free Software Foundation; either version 2
|
|
||||||
of the License, or (at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
||||||
|
|
||||||
See the GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "header/local.h"
|
|
||||||
|
|
||||||
// internal helper
|
|
||||||
static const char *presentModeString(VkPresentModeKHR presentMode)
|
|
||||||
{
|
|
||||||
#define PMSTR(r) case VK_ ##r: return "VK_"#r
|
|
||||||
switch (presentMode)
|
|
||||||
{
|
|
||||||
PMSTR(PRESENT_MODE_IMMEDIATE_KHR);
|
|
||||||
PMSTR(PRESENT_MODE_MAILBOX_KHR);
|
|
||||||
PMSTR(PRESENT_MODE_FIFO_KHR);
|
|
||||||
PMSTR(PRESENT_MODE_FIFO_RELAXED_KHR);
|
|
||||||
default: return "<unknown>";
|
|
||||||
}
|
|
||||||
#undef PMSTR
|
|
||||||
return "UNKNOWN PRESENT MODE";
|
|
||||||
}
|
|
||||||
|
|
||||||
// internal helper
|
|
||||||
static VkSurfaceFormatKHR getSwapSurfaceFormat(const VkSurfaceFormatKHR *surfaceFormats, uint32_t formatCount)
|
|
||||||
{
|
|
||||||
VkSurfaceFormatKHR swapSurfaceFormat;
|
|
||||||
memset(&swapSurfaceFormat, 0, sizeof(swapSurfaceFormat));
|
|
||||||
if (!surfaceFormats || !formatCount)
|
|
||||||
{
|
|
||||||
return swapSurfaceFormat;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (size_t i = 0; i < formatCount; ++i)
|
|
||||||
{
|
|
||||||
if (surfaceFormats[i].colorSpace == VK_COLOR_SPACE_SRGB_NONLINEAR_KHR &&
|
|
||||||
surfaceFormats[i].format == VK_FORMAT_B8G8R8A8_UNORM)
|
|
||||||
{
|
|
||||||
swapSurfaceFormat.colorSpace = surfaceFormats[i].colorSpace;
|
|
||||||
swapSurfaceFormat.format = surfaceFormats[i].format;
|
|
||||||
return swapSurfaceFormat;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// no preferred format, so get the first one from list
|
|
||||||
swapSurfaceFormat.colorSpace = surfaceFormats[0].colorSpace;
|
|
||||||
swapSurfaceFormat.format = surfaceFormats[0].format;
|
|
||||||
|
|
||||||
return swapSurfaceFormat;
|
|
||||||
}
|
|
||||||
|
|
||||||
// internal helper
|
|
||||||
// look to https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkPresentModeKHR.html for more information
|
|
||||||
static VkPresentModeKHR getSwapPresentMode(const VkPresentModeKHR *presentModes, uint32_t presentModesCount, VkPresentModeKHR desiredMode)
|
|
||||||
{
|
|
||||||
// PRESENT_MODE_FIFO_KHR is guaranteed to exist due to spec requirements
|
|
||||||
VkPresentModeKHR usedPresentMode = VK_PRESENT_MODE_FIFO_KHR;
|
|
||||||
|
|
||||||
if (!presentModes)
|
|
||||||
{
|
|
||||||
return usedPresentMode;
|
|
||||||
}
|
|
||||||
|
|
||||||
// check if the desired present mode is supported
|
|
||||||
for (uint32_t i = 0; i < presentModesCount; ++i)
|
|
||||||
{
|
|
||||||
// mode supported, nothing to do here
|
|
||||||
if (presentModes[i] == desiredMode)
|
|
||||||
{
|
|
||||||
vk_config.present_mode = presentModeString(desiredMode);
|
|
||||||
R_Printf(PRINT_ALL, "...using present mode: %s\n", vk_config.present_mode);
|
|
||||||
return desiredMode;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// preferred present mode not found - choose the next best thing
|
|
||||||
for (uint32_t i = 0; i < presentModesCount; ++i)
|
|
||||||
{
|
|
||||||
// always prefer mailbox for triple buffering with whole image replace
|
|
||||||
if (presentModes[i] == VK_PRESENT_MODE_MAILBOX_KHR)
|
|
||||||
{
|
|
||||||
usedPresentMode = presentModes[i];
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
// prefer immediate update with tearing
|
|
||||||
else if (presentModes[i] == VK_PRESENT_MODE_IMMEDIATE_KHR)
|
|
||||||
{
|
|
||||||
usedPresentMode = presentModes[i];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
vk_config.present_mode = presentModeString(usedPresentMode);
|
|
||||||
R_Printf(PRINT_ALL, "...present mode %s not supported, using present mode: %s\n", presentModeString(desiredMode), vk_config.present_mode);
|
|
||||||
return usedPresentMode;
|
|
||||||
}
|
|
||||||
|
|
||||||
// internal helper
|
|
||||||
static VkCompositeAlphaFlagBitsKHR getSupportedCompositeAlpha(VkCompositeAlphaFlagsKHR supportedFlags)
|
|
||||||
{
|
|
||||||
VkCompositeAlphaFlagBitsKHR compositeAlphaFlags[] = {
|
|
||||||
VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR,
|
|
||||||
VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR,
|
|
||||||
VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR,
|
|
||||||
VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR
|
|
||||||
};
|
|
||||||
|
|
||||||
for (int i = 0; i < 4; ++i)
|
|
||||||
{
|
|
||||||
if (supportedFlags & compositeAlphaFlags[i])
|
|
||||||
return compositeAlphaFlags[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
return VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR;
|
|
||||||
}
|
|
||||||
|
|
||||||
qboolean QVk_CheckExtent(void)
|
|
||||||
{
|
|
||||||
VkSurfaceCapabilitiesKHR surfaceCaps;
|
|
||||||
VK_VERIFY(vkGetPhysicalDeviceSurfaceCapabilitiesKHR(vk_device.physical, vk_surface, &surfaceCaps));
|
|
||||||
|
|
||||||
if (surfaceCaps.currentExtent.width == 0 || surfaceCaps.currentExtent.height == 0)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
VkResult QVk_CreateSwapchain()
|
|
||||||
{
|
|
||||||
VkSurfaceCapabilitiesKHR surfaceCaps;
|
|
||||||
VkSurfaceFormatKHR *surfaceFormats = NULL;
|
|
||||||
VkPresentModeKHR *presentModes = NULL;
|
|
||||||
uint32_t formatCount, presentModesCount;
|
|
||||||
VK_VERIFY(vkGetPhysicalDeviceSurfaceCapabilitiesKHR(vk_device.physical, vk_surface, &surfaceCaps));
|
|
||||||
VK_VERIFY(vkGetPhysicalDeviceSurfaceFormatsKHR(vk_device.physical, vk_surface, &formatCount, NULL));
|
|
||||||
VK_VERIFY(vkGetPhysicalDeviceSurfacePresentModesKHR(vk_device.physical, vk_surface, &presentModesCount, NULL));
|
|
||||||
|
|
||||||
if (formatCount > 0)
|
|
||||||
{
|
|
||||||
surfaceFormats = (VkSurfaceFormatKHR *)malloc(formatCount * sizeof(VkSurfaceFormatKHR));
|
|
||||||
VK_VERIFY(vkGetPhysicalDeviceSurfaceFormatsKHR(vk_device.physical, vk_surface, &formatCount, surfaceFormats));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (presentModesCount > 0)
|
|
||||||
{
|
|
||||||
presentModes = (VkPresentModeKHR *)malloc(presentModesCount * sizeof(VkPresentModeKHR));
|
|
||||||
VK_VERIFY(vkGetPhysicalDeviceSurfacePresentModesKHR(vk_device.physical, vk_surface, &presentModesCount, presentModes));
|
|
||||||
|
|
||||||
R_Printf(PRINT_ALL, "Supported present modes: ");
|
|
||||||
for (int i = 0; i < presentModesCount; i++)
|
|
||||||
{
|
|
||||||
R_Printf(PRINT_ALL, "%s ", presentModeString(presentModes[i]));
|
|
||||||
vk_config.supported_present_modes[i] = presentModeString(presentModes[i]);
|
|
||||||
}
|
|
||||||
R_Printf(PRINT_ALL, "\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
VkSurfaceFormatKHR swapSurfaceFormat = getSwapSurfaceFormat(surfaceFormats, formatCount);
|
|
||||||
VkPresentModeKHR swapPresentMode = getSwapPresentMode(presentModes, presentModesCount, r_vsync->value > 0 ? VK_PRESENT_MODE_FIFO_KHR : VK_PRESENT_MODE_MAILBOX_KHR);
|
|
||||||
free(surfaceFormats);
|
|
||||||
free(presentModes);
|
|
||||||
|
|
||||||
VkExtent2D extent = surfaceCaps.currentExtent;
|
|
||||||
if(extent.width == UINT32_MAX || extent.height == UINT32_MAX)
|
|
||||||
{
|
|
||||||
extent.width = max(surfaceCaps.minImageExtent.width, min(surfaceCaps.maxImageExtent.width, vid.width));
|
|
||||||
extent.height = max(surfaceCaps.minImageExtent.height, min(surfaceCaps.maxImageExtent.height, vid.height));
|
|
||||||
}
|
|
||||||
|
|
||||||
// request at least 2 images - this fixes fullscreen crashes on AMD when launching the game in fullscreen
|
|
||||||
uint32_t imageCount = max(2, surfaceCaps.minImageCount);
|
|
||||||
if (swapPresentMode != VK_PRESENT_MODE_FIFO_KHR)
|
|
||||||
imageCount = max(3, surfaceCaps.minImageCount);
|
|
||||||
|
|
||||||
if (surfaceCaps.maxImageCount > 0)
|
|
||||||
imageCount = min(imageCount, surfaceCaps.maxImageCount);
|
|
||||||
|
|
||||||
VkImageUsageFlags imgUsage = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT;
|
|
||||||
|
|
||||||
// TRANSFER_SRC_BIT is required for taking screenshots
|
|
||||||
if (surfaceCaps.supportedUsageFlags & VK_IMAGE_USAGE_TRANSFER_SRC_BIT)
|
|
||||||
{
|
|
||||||
imgUsage |= VK_IMAGE_USAGE_TRANSFER_SRC_BIT;
|
|
||||||
vk_device.screenshotSupported = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
VkSwapchainKHR oldSwapchain = vk_swapchain.sc;
|
|
||||||
VkSwapchainCreateInfoKHR scCreateInfo = {
|
|
||||||
.sType = VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR,
|
|
||||||
.pNext = NULL,
|
|
||||||
.flags = 0,
|
|
||||||
.surface = vk_surface,
|
|
||||||
.minImageCount = imageCount,
|
|
||||||
.imageFormat = swapSurfaceFormat.format,
|
|
||||||
.imageColorSpace = swapSurfaceFormat.colorSpace,
|
|
||||||
.imageExtent = extent,
|
|
||||||
.imageArrayLayers = 1,
|
|
||||||
.imageUsage = imgUsage,
|
|
||||||
.imageSharingMode = VK_SHARING_MODE_EXCLUSIVE,
|
|
||||||
.queueFamilyIndexCount = 0,
|
|
||||||
.pQueueFamilyIndices = NULL,
|
|
||||||
.preTransform = (surfaceCaps.supportedTransforms & VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR) ? VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR : surfaceCaps.currentTransform,
|
|
||||||
.compositeAlpha = getSupportedCompositeAlpha(surfaceCaps.supportedCompositeAlpha),
|
|
||||||
.presentMode = swapPresentMode,
|
|
||||||
.clipped = VK_TRUE,
|
|
||||||
.oldSwapchain = oldSwapchain
|
|
||||||
};
|
|
||||||
|
|
||||||
uint32_t queueFamilyIndices[] = { (uint32_t)vk_device.gfxFamilyIndex, (uint32_t)vk_device.presentFamilyIndex };
|
|
||||||
if (vk_device.presentFamilyIndex != vk_device.gfxFamilyIndex)
|
|
||||||
{
|
|
||||||
scCreateInfo.imageSharingMode = VK_SHARING_MODE_CONCURRENT;
|
|
||||||
scCreateInfo.queueFamilyIndexCount = 2;
|
|
||||||
scCreateInfo.pQueueFamilyIndices = queueFamilyIndices;
|
|
||||||
}
|
|
||||||
|
|
||||||
vk_swapchain.format = swapSurfaceFormat.format;
|
|
||||||
vk_swapchain.extent = extent;
|
|
||||||
R_Printf(PRINT_ALL, "...trying swapchain extent: %dx%d\n", vk_swapchain.extent.width, vk_swapchain.extent.height);
|
|
||||||
R_Printf(PRINT_ALL, "...trying swapchain image format: %d\n", vk_swapchain.format);
|
|
||||||
|
|
||||||
VkResult res = vkCreateSwapchainKHR(vk_device.logical, &scCreateInfo, NULL, &vk_swapchain.sc);
|
|
||||||
if (res != VK_SUCCESS)
|
|
||||||
return res;
|
|
||||||
|
|
||||||
VK_VERIFY(vkGetSwapchainImagesKHR(vk_device.logical, vk_swapchain.sc, &imageCount, NULL));
|
|
||||||
vk_swapchain.images = (VkImage *)malloc(imageCount * sizeof(VkImage));
|
|
||||||
vk_swapchain.imageCount = imageCount;
|
|
||||||
res = vkGetSwapchainImagesKHR(vk_device.logical, vk_swapchain.sc, &imageCount, vk_swapchain.images);
|
|
||||||
|
|
||||||
if (oldSwapchain != VK_NULL_HANDLE)
|
|
||||||
vkDestroySwapchainKHR(vk_device.logical, oldSwapchain, NULL);
|
|
||||||
|
|
||||||
return res;
|
|
||||||
}
|
|
|
@ -1,620 +0,0 @@
|
||||||
/*
|
|
||||||
Copyright (C) 2018 Christoph Schied
|
|
||||||
Copyright (C) 2020 Denis Pauk
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "header/util.h"
|
|
||||||
#include "header/local.h"
|
|
||||||
|
|
||||||
#include <assert.h>
|
|
||||||
|
|
||||||
static uint32_t
|
|
||||||
get_memory_type(uint32_t mem_req_type_bits, VkMemoryPropertyFlags mem_prop)
|
|
||||||
{
|
|
||||||
for(uint32_t i = 0; i < VK_MAX_MEMORY_TYPES; i++) {
|
|
||||||
if(mem_req_type_bits & (1 << i)) {
|
|
||||||
if((vk_device.mem_properties.memoryTypes[i].propertyFlags & mem_prop) == mem_prop)
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
typedef struct MemoryResource_s {
|
|
||||||
// type of memory
|
|
||||||
uint32_t memory_type;
|
|
||||||
// offset step
|
|
||||||
VkDeviceSize alignment;
|
|
||||||
// id memory used
|
|
||||||
VkBool32 used;
|
|
||||||
// suballocate
|
|
||||||
VkBool32 suballocate;
|
|
||||||
// shared memory used for image
|
|
||||||
VkDeviceMemory memory;
|
|
||||||
// image size
|
|
||||||
VkDeviceSize size;
|
|
||||||
// posision in shared memory
|
|
||||||
VkDeviceSize offset;
|
|
||||||
} MemoryResource_t;
|
|
||||||
|
|
||||||
// 1MB buffers / 512 x 512 * RGBA
|
|
||||||
#define MEMORY_THRESHOLD (512 * 512 * 4)
|
|
||||||
|
|
||||||
static VkDeviceSize memory_block_threshold;
|
|
||||||
static MemoryResource_t *used_memory;
|
|
||||||
static VkDeviceSize used_memory_size;
|
|
||||||
|
|
||||||
void
|
|
||||||
vulkan_memory_init(void)
|
|
||||||
{
|
|
||||||
memory_block_threshold = MEMORY_THRESHOLD;
|
|
||||||
used_memory_size = 1024; // Size of buffers history
|
|
||||||
used_memory = malloc(used_memory_size * sizeof(MemoryResource_t));
|
|
||||||
memset(used_memory, 0, used_memory_size * sizeof(MemoryResource_t));
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
memory_type_print(VkMemoryPropertyFlags mem_prop)
|
|
||||||
{
|
|
||||||
#define MPSTR(r, prop) \
|
|
||||||
if((prop & VK_ ##r) != 0) \
|
|
||||||
{ R_Printf(PRINT_ALL, " %s", "VK_"#r); };
|
|
||||||
|
|
||||||
MPSTR(MEMORY_PROPERTY_DEVICE_LOCAL_BIT, mem_prop);
|
|
||||||
MPSTR(MEMORY_PROPERTY_HOST_VISIBLE_BIT, mem_prop);
|
|
||||||
MPSTR(MEMORY_PROPERTY_HOST_COHERENT_BIT, mem_prop);
|
|
||||||
MPSTR(MEMORY_PROPERTY_HOST_CACHED_BIT, mem_prop);
|
|
||||||
MPSTR(MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT, mem_prop);
|
|
||||||
MPSTR(MEMORY_PROPERTY_PROTECTED_BIT, mem_prop);
|
|
||||||
MPSTR(MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD, mem_prop);
|
|
||||||
MPSTR(MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD, mem_prop);
|
|
||||||
|
|
||||||
#undef PMSTR
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
vulkan_memory_types_show(void)
|
|
||||||
{
|
|
||||||
R_Printf(PRINT_ALL, "\nMemory blocks:");
|
|
||||||
|
|
||||||
for(uint32_t i = 0; i < VK_MAX_MEMORY_TYPES; i++)
|
|
||||||
{
|
|
||||||
if (vk_device.mem_properties.memoryTypes[i].propertyFlags)
|
|
||||||
{
|
|
||||||
R_Printf(PRINT_ALL, "\n #%d:", i);
|
|
||||||
memory_type_print(vk_device.mem_properties.memoryTypes[i].propertyFlags);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
R_Printf(PRINT_ALL, "\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
static VkBool32
|
|
||||||
vulkan_memory_is_used(int start_pos, int end_pos, VkDeviceMemory memory)
|
|
||||||
{
|
|
||||||
int pos;
|
|
||||||
|
|
||||||
for (pos = start_pos; pos < end_pos; pos++)
|
|
||||||
{
|
|
||||||
if (used_memory[pos].memory == memory && used_memory[pos].used)
|
|
||||||
return VK_TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
return VK_FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
vulkan_memory_free_unused(void)
|
|
||||||
{
|
|
||||||
int pos_global;
|
|
||||||
|
|
||||||
for (pos_global = 0; pos_global < used_memory_size; pos_global ++)
|
|
||||||
{
|
|
||||||
VkDeviceMemory memory = used_memory[pos_global].memory;
|
|
||||||
if (memory != VK_NULL_HANDLE && !used_memory[pos_global].used)
|
|
||||||
{
|
|
||||||
int pos_local;
|
|
||||||
|
|
||||||
// is used somewhere else after
|
|
||||||
if (vulkan_memory_is_used(pos_global, used_memory_size, memory))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
// is used somewhere else before
|
|
||||||
if (vulkan_memory_is_used(0, pos_global, memory))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
// free current memory block
|
|
||||||
vkFreeMemory(vk_device.logical, memory, NULL);
|
|
||||||
memset(&used_memory[pos_global], 0, sizeof(MemoryResource_t));
|
|
||||||
|
|
||||||
// cleanup same block
|
|
||||||
for (pos_local = pos_global + 1; pos_local < used_memory_size; pos_local++)
|
|
||||||
{
|
|
||||||
if (used_memory[pos_local].memory == memory)
|
|
||||||
{
|
|
||||||
memset(&used_memory[pos_local], 0, sizeof(MemoryResource_t));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
vulkan_memory_delete(void)
|
|
||||||
{
|
|
||||||
int pos_global;
|
|
||||||
for (pos_global = 0; pos_global < used_memory_size; pos_global ++)
|
|
||||||
{
|
|
||||||
VkDeviceMemory memory = used_memory[pos_global].memory;
|
|
||||||
if (memory != VK_NULL_HANDLE)
|
|
||||||
{
|
|
||||||
int pos_local;
|
|
||||||
|
|
||||||
// free current memory block
|
|
||||||
vkFreeMemory(vk_device.logical, memory, NULL);
|
|
||||||
memset(&used_memory[pos_global], 0, sizeof(MemoryResource_t));
|
|
||||||
|
|
||||||
// cleanup same block
|
|
||||||
for (pos_local = pos_global + 1; pos_local < used_memory_size; pos_local++)
|
|
||||||
{
|
|
||||||
if (used_memory[pos_local].memory == memory)
|
|
||||||
{
|
|
||||||
memset(&used_memory[pos_local], 0, sizeof(MemoryResource_t));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
free(used_memory);
|
|
||||||
}
|
|
||||||
|
|
||||||
static VkResult
|
|
||||||
memory_block_min(VkDeviceSize size,
|
|
||||||
uint32_t memory_type,
|
|
||||||
VkDeviceSize alignment,
|
|
||||||
VkBool32 suballocate,
|
|
||||||
int* block_pos)
|
|
||||||
{
|
|
||||||
int pos;
|
|
||||||
VkDeviceSize min_size = memory_block_threshold;
|
|
||||||
VkResult result = VK_ERROR_OUT_OF_DEVICE_MEMORY;
|
|
||||||
|
|
||||||
// update max_size
|
|
||||||
if (min_size < size)
|
|
||||||
{
|
|
||||||
*block_pos = -1;
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
// search minimal posible size
|
|
||||||
for (pos = 0; pos < used_memory_size; pos ++)
|
|
||||||
{
|
|
||||||
if (used_memory[pos].memory_type == memory_type &&
|
|
||||||
used_memory[pos].suballocate == suballocate &&
|
|
||||||
used_memory[pos].alignment == alignment &&
|
|
||||||
used_memory[pos].memory != VK_NULL_HANDLE &&
|
|
||||||
used_memory[pos].used == VK_FALSE &&
|
|
||||||
used_memory[pos].size < min_size &&
|
|
||||||
used_memory[pos].size >= size)
|
|
||||||
{
|
|
||||||
// save minimal size
|
|
||||||
min_size = used_memory[pos].size;
|
|
||||||
*block_pos = pos;
|
|
||||||
result = VK_SUCCESS;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
static VkResult
|
|
||||||
memory_block_empty(int *block_pos)
|
|
||||||
{
|
|
||||||
int pos;
|
|
||||||
MemoryResource_t *memory;
|
|
||||||
|
|
||||||
// search empty memory
|
|
||||||
for (pos = *block_pos; pos < used_memory_size; pos ++)
|
|
||||||
{
|
|
||||||
if (used_memory[pos].memory == VK_NULL_HANDLE)
|
|
||||||
{
|
|
||||||
*block_pos = pos;
|
|
||||||
return VK_SUCCESS;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
memory = realloc(used_memory, (used_memory_size * 2) * sizeof(MemoryResource_t));
|
|
||||||
if (!memory)
|
|
||||||
return VK_ERROR_OUT_OF_DEVICE_MEMORY;
|
|
||||||
|
|
||||||
// use previous end
|
|
||||||
*block_pos = used_memory_size;
|
|
||||||
|
|
||||||
// update old struct
|
|
||||||
memset(memory + used_memory_size, 0, used_memory_size * sizeof(MemoryResource_t));
|
|
||||||
used_memory_size *= 2;
|
|
||||||
used_memory = memory;
|
|
||||||
|
|
||||||
return VK_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
static VkResult
|
|
||||||
memory_block_allocate(VkDeviceSize size,
|
|
||||||
uint32_t memory_type,
|
|
||||||
VkDeviceSize alignment,
|
|
||||||
VkBool32 suballocate,
|
|
||||||
int *block_pos)
|
|
||||||
{
|
|
||||||
int pos = 0;
|
|
||||||
if (memory_block_empty(&pos) == VK_SUCCESS)
|
|
||||||
{
|
|
||||||
VkResult result;
|
|
||||||
VkDeviceMemory memory;
|
|
||||||
|
|
||||||
if (size < MEMORY_THRESHOLD)
|
|
||||||
size = MEMORY_THRESHOLD;
|
|
||||||
|
|
||||||
// allocate only aligned
|
|
||||||
size = ROUNDUP(size, alignment);
|
|
||||||
|
|
||||||
// Need to split only buffers with suballocate support
|
|
||||||
if (suballocate)
|
|
||||||
{
|
|
||||||
// requested bigger then usual
|
|
||||||
if (size > memory_block_threshold)
|
|
||||||
{
|
|
||||||
size *= 2;
|
|
||||||
// up threshold for next allocations
|
|
||||||
memory_block_threshold = size;
|
|
||||||
}
|
|
||||||
// allcate bigger memory for reuse
|
|
||||||
else if (size < memory_block_threshold)
|
|
||||||
{
|
|
||||||
size = memory_block_threshold;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
VkMemoryAllocateInfo mem_alloc_info = {
|
|
||||||
.sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO,
|
|
||||||
.allocationSize = size,
|
|
||||||
.memoryTypeIndex = memory_type
|
|
||||||
};
|
|
||||||
|
|
||||||
result = vkAllocateMemory(vk_device.logical, &mem_alloc_info, NULL, &memory);
|
|
||||||
if (result == VK_SUCCESS)
|
|
||||||
{
|
|
||||||
used_memory[pos].memory = memory;
|
|
||||||
used_memory[pos].memory_type = memory_type;
|
|
||||||
used_memory[pos].alignment = alignment;
|
|
||||||
used_memory[pos].offset = 0;
|
|
||||||
used_memory[pos].size = size;
|
|
||||||
used_memory[pos].suballocate = suballocate;
|
|
||||||
used_memory[pos].used = VK_FALSE;
|
|
||||||
*block_pos = pos;
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
return VK_ERROR_OUT_OF_DEVICE_MEMORY;
|
|
||||||
}
|
|
||||||
|
|
||||||
static VkResult
|
|
||||||
memory_create(VkDeviceSize size,
|
|
||||||
uint32_t memory_type,
|
|
||||||
VkBool32 suballocate,
|
|
||||||
VkDeviceSize alignment,
|
|
||||||
VkDeviceMemory *memory,
|
|
||||||
VkDeviceSize *offset)
|
|
||||||
{
|
|
||||||
int pos = -1;
|
|
||||||
VkResult result;
|
|
||||||
result = memory_block_min(size, memory_type, alignment, suballocate, &pos);
|
|
||||||
|
|
||||||
if (result != VK_SUCCESS)
|
|
||||||
{
|
|
||||||
result = memory_block_allocate(size, memory_type, alignment, suballocate, &pos);
|
|
||||||
}
|
|
||||||
if (result == VK_SUCCESS)
|
|
||||||
{
|
|
||||||
// check size of block,
|
|
||||||
// new block should be at least same size as current
|
|
||||||
// and beger than double minimal offset
|
|
||||||
// and marked as not for mmap
|
|
||||||
if (used_memory[pos].size > (size * 2) &&
|
|
||||||
(used_memory[pos].size > (used_memory[pos].alignment * 2)) &&
|
|
||||||
used_memory[pos].suballocate)
|
|
||||||
{
|
|
||||||
// search from next slot
|
|
||||||
int new_pos = pos + 1;
|
|
||||||
result = memory_block_empty(&new_pos);
|
|
||||||
if (result == VK_SUCCESS)
|
|
||||||
{
|
|
||||||
VkDeviceSize new_size = ROUNDUP(size, used_memory[pos].alignment);
|
|
||||||
|
|
||||||
// split to several blocks
|
|
||||||
memcpy(&used_memory[new_pos], &used_memory[pos], sizeof(MemoryResource_t));
|
|
||||||
used_memory[new_pos].offset = used_memory[pos].offset + new_size;
|
|
||||||
used_memory[new_pos].size = used_memory[pos].size - new_size;
|
|
||||||
|
|
||||||
// save new size to block, it can be bigger than required
|
|
||||||
used_memory[pos].size = used_memory[new_pos].offset - used_memory[pos].offset;
|
|
||||||
assert(used_memory[pos].size > 0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
used_memory[pos].used = VK_TRUE;
|
|
||||||
*offset = used_memory[pos].offset;
|
|
||||||
*memory = used_memory[pos].memory;
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
return VK_ERROR_OUT_OF_DEVICE_MEMORY;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
memory_destroy(VkDeviceMemory memory, VkDeviceSize offset)
|
|
||||||
{
|
|
||||||
int pos;
|
|
||||||
for (pos = 0; pos < used_memory_size; pos ++)
|
|
||||||
{
|
|
||||||
if (used_memory[pos].memory == memory && used_memory[pos].offset == offset)
|
|
||||||
{
|
|
||||||
used_memory[pos].used = VK_FALSE;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// looks as no such memory registered
|
|
||||||
vkFreeMemory(vk_device.logical, memory, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
static VkResult
|
|
||||||
memory_create_by_property(VkMemoryRequirements* mem_reqs,
|
|
||||||
VkMemoryPropertyFlags mem_properties,
|
|
||||||
VkMemoryPropertyFlags mem_preferences,
|
|
||||||
VkDeviceMemory *memory,
|
|
||||||
VkDeviceSize *offset)
|
|
||||||
{
|
|
||||||
uint32_t memory_index;
|
|
||||||
VkMemoryPropertyFlags host_visible;
|
|
||||||
|
|
||||||
memory_index = get_memory_type(mem_reqs->memoryTypeBits,
|
|
||||||
mem_properties | mem_preferences);
|
|
||||||
// prefered memory allocation
|
|
||||||
if (memory_index == -1)
|
|
||||||
{
|
|
||||||
memory_index = get_memory_type(mem_reqs->memoryTypeBits,
|
|
||||||
mem_properties);
|
|
||||||
}
|
|
||||||
// strictly required
|
|
||||||
if (memory_index == -1)
|
|
||||||
{
|
|
||||||
R_Printf(PRINT_ALL, "%s:%d: Have not found required memory type.\n",
|
|
||||||
__func__, __LINE__);
|
|
||||||
return VK_ERROR_OUT_OF_DEVICE_MEMORY;
|
|
||||||
}
|
|
||||||
|
|
||||||
host_visible = mem_properties & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT;
|
|
||||||
|
|
||||||
return memory_create(mem_reqs->size, memory_index,
|
|
||||||
// suballocate allowed
|
|
||||||
host_visible != VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT,
|
|
||||||
mem_reqs->alignment, memory, offset);
|
|
||||||
}
|
|
||||||
|
|
||||||
VkResult
|
|
||||||
buffer_create(BufferResource_t *buf,
|
|
||||||
VkBufferCreateInfo buf_create_info,
|
|
||||||
VkMemoryPropertyFlags mem_properties,
|
|
||||||
VkMemoryPropertyFlags mem_preferences)
|
|
||||||
{
|
|
||||||
assert(buf_create_info.size > 0);
|
|
||||||
assert(buf);
|
|
||||||
VkResult result = VK_SUCCESS;
|
|
||||||
|
|
||||||
buf->size = buf_create_info.size;
|
|
||||||
buf->is_mapped = VK_FALSE;
|
|
||||||
|
|
||||||
result = vkCreateBuffer(vk_device.logical, &buf_create_info, NULL, &buf->buffer);
|
|
||||||
if(result != VK_SUCCESS) {
|
|
||||||
R_Printf(PRINT_ALL, "%s:%d: VkResult verification: %s\n",
|
|
||||||
__func__, __LINE__, QVk_GetError(result));
|
|
||||||
goto fail_buffer;
|
|
||||||
}
|
|
||||||
assert(buf->buffer != VK_NULL_HANDLE);
|
|
||||||
|
|
||||||
VkMemoryRequirements mem_reqs;
|
|
||||||
vkGetBufferMemoryRequirements(vk_device.logical, buf->buffer, &mem_reqs);
|
|
||||||
|
|
||||||
result = memory_create_by_property(&mem_reqs, mem_properties, mem_preferences,
|
|
||||||
&buf->memory, &buf->offset);
|
|
||||||
if(result != VK_SUCCESS) {
|
|
||||||
R_Printf(PRINT_ALL, "%s:%d: VkResult verification: %s\n",
|
|
||||||
__func__, __LINE__, QVk_GetError(result));
|
|
||||||
goto fail_mem_alloc;
|
|
||||||
}
|
|
||||||
|
|
||||||
assert(buf->memory != VK_NULL_HANDLE);
|
|
||||||
|
|
||||||
result = vkBindBufferMemory(vk_device.logical, buf->buffer, buf->memory, buf->offset);
|
|
||||||
if(result != VK_SUCCESS) {
|
|
||||||
R_Printf(PRINT_ALL, "%s:%d: VkResult verification: %s\n",
|
|
||||||
__func__, __LINE__, QVk_GetError(result));
|
|
||||||
goto fail_bind_buf_memory;
|
|
||||||
}
|
|
||||||
|
|
||||||
return VK_SUCCESS;
|
|
||||||
|
|
||||||
fail_bind_buf_memory:
|
|
||||||
memory_destroy(buf->memory, buf->offset);
|
|
||||||
fail_mem_alloc:
|
|
||||||
vkDestroyBuffer(vk_device.logical, buf->buffer, NULL);
|
|
||||||
fail_buffer:
|
|
||||||
buf->buffer = VK_NULL_HANDLE;
|
|
||||||
buf->memory = VK_NULL_HANDLE;
|
|
||||||
buf->size = 0;
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
VkResult
|
|
||||||
image_create(ImageResource_t *img,
|
|
||||||
VkImageCreateInfo img_create_info,
|
|
||||||
VkMemoryPropertyFlags mem_properties,
|
|
||||||
VkMemoryPropertyFlags mem_preferences)
|
|
||||||
{
|
|
||||||
assert(img);
|
|
||||||
VkResult result = VK_SUCCESS;
|
|
||||||
|
|
||||||
result = vkCreateImage(vk_device.logical, &img_create_info, NULL, &img->image);
|
|
||||||
if(result != VK_SUCCESS) {
|
|
||||||
R_Printf(PRINT_ALL, "%s:%d: VkResult verification: %s\n",
|
|
||||||
__func__, __LINE__, QVk_GetError(result));
|
|
||||||
goto fail_buffer;
|
|
||||||
}
|
|
||||||
assert(img->image != VK_NULL_HANDLE);
|
|
||||||
|
|
||||||
VkMemoryRequirements mem_reqs;
|
|
||||||
vkGetImageMemoryRequirements(vk_device.logical, img->image, &mem_reqs);
|
|
||||||
img->size = mem_reqs.size;
|
|
||||||
|
|
||||||
result = memory_create_by_property(&mem_reqs, mem_properties, mem_preferences,
|
|
||||||
&img->memory, &img->offset);
|
|
||||||
if(result != VK_SUCCESS) {
|
|
||||||
R_Printf(PRINT_ALL, "%s:%d: VkResult verification: %s\n",
|
|
||||||
__func__, __LINE__, QVk_GetError(result));
|
|
||||||
goto fail_mem_alloc;
|
|
||||||
}
|
|
||||||
|
|
||||||
assert(img->memory != VK_NULL_HANDLE);
|
|
||||||
|
|
||||||
result = vkBindImageMemory(vk_device.logical, img->image, img->memory, img->offset);
|
|
||||||
if(result != VK_SUCCESS) {
|
|
||||||
R_Printf(PRINT_ALL, "%s:%d: VkResult verification: %s\n",
|
|
||||||
__func__, __LINE__, QVk_GetError(result));
|
|
||||||
goto fail_bind_buf_memory;
|
|
||||||
}
|
|
||||||
|
|
||||||
return VK_SUCCESS;
|
|
||||||
|
|
||||||
fail_bind_buf_memory:
|
|
||||||
memory_destroy(img->memory, img->offset);
|
|
||||||
fail_mem_alloc:
|
|
||||||
vkDestroyImage(vk_device.logical, img->image, NULL);
|
|
||||||
fail_buffer:
|
|
||||||
img->image = VK_NULL_HANDLE;
|
|
||||||
img->memory = VK_NULL_HANDLE;
|
|
||||||
img->size = 0;
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
VkResult
|
|
||||||
buffer_destroy(BufferResource_t *buf)
|
|
||||||
{
|
|
||||||
assert(!buf->is_mapped);
|
|
||||||
|
|
||||||
// buffer should be destroed before bound memory
|
|
||||||
if(buf->buffer != VK_NULL_HANDLE)
|
|
||||||
{
|
|
||||||
vkDestroyBuffer(vk_device.logical, buf->buffer, NULL);
|
|
||||||
buf->buffer = VK_NULL_HANDLE;
|
|
||||||
}
|
|
||||||
|
|
||||||
// buffer desroed, we can free up memory
|
|
||||||
if(buf->memory != VK_NULL_HANDLE)
|
|
||||||
{
|
|
||||||
memory_destroy(buf->memory, buf->offset);
|
|
||||||
buf->memory = VK_NULL_HANDLE;
|
|
||||||
}
|
|
||||||
|
|
||||||
memset(buf, 0, sizeof(BufferResource_t));
|
|
||||||
|
|
||||||
return VK_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
VkResult
|
|
||||||
image_destroy(ImageResource_t *img)
|
|
||||||
{
|
|
||||||
// image should be destroed before bound memory
|
|
||||||
if(img->image != VK_NULL_HANDLE)
|
|
||||||
{
|
|
||||||
vkDestroyImage(vk_device.logical, img->image, NULL);
|
|
||||||
img->image = VK_NULL_HANDLE;
|
|
||||||
}
|
|
||||||
|
|
||||||
// image destroed, we can free up memory
|
|
||||||
if(img->memory != VK_NULL_HANDLE)
|
|
||||||
{
|
|
||||||
memory_destroy(img->memory, img->offset);
|
|
||||||
img->memory = VK_NULL_HANDLE;
|
|
||||||
}
|
|
||||||
|
|
||||||
memset(img, 0, sizeof(ImageResource_t));
|
|
||||||
|
|
||||||
return VK_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
VkResult
|
|
||||||
buffer_flush(BufferResource_t *buf)
|
|
||||||
{
|
|
||||||
VkResult result = VK_SUCCESS;
|
|
||||||
|
|
||||||
VkMappedMemoryRange ranges[1] = {{
|
|
||||||
.sType = VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE,
|
|
||||||
.memory = buf->memory,
|
|
||||||
.offset = buf->offset,
|
|
||||||
.size = buf->size
|
|
||||||
}};
|
|
||||||
result = vkFlushMappedMemoryRanges(vk_device.logical, 1, ranges);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
VkResult
|
|
||||||
buffer_invalidate(BufferResource_t *buf)
|
|
||||||
{
|
|
||||||
VkResult result = VK_SUCCESS;
|
|
||||||
|
|
||||||
VkMappedMemoryRange ranges[1] = {{
|
|
||||||
.sType = VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE,
|
|
||||||
.memory = buf->memory,
|
|
||||||
.offset = buf->offset,
|
|
||||||
.size = buf->size
|
|
||||||
}};
|
|
||||||
result = vkInvalidateMappedMemoryRanges(vk_device.logical, 1, ranges);
|
|
||||||
return result;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void *
|
|
||||||
buffer_map(BufferResource_t *buf)
|
|
||||||
{
|
|
||||||
assert(buf->memory);
|
|
||||||
assert(!buf->is_mapped);
|
|
||||||
buf->is_mapped = VK_TRUE;
|
|
||||||
void *ret = NULL;
|
|
||||||
assert(buf->memory != VK_NULL_HANDLE);
|
|
||||||
assert(buf->size > 0);
|
|
||||||
VK_VERIFY(vkMapMemory(vk_device.logical, buf->memory,
|
|
||||||
buf->offset/*offset*/, buf->size, 0 /*flags*/, &ret));
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
buffer_unmap(BufferResource_t *buf)
|
|
||||||
{
|
|
||||||
assert(buf->memory);
|
|
||||||
assert(buf->is_mapped);
|
|
||||||
buf->is_mapped = VK_FALSE;
|
|
||||||
vkUnmapMemory(vk_device.logical, buf->memory);
|
|
||||||
}
|
|
|
@ -1,99 +0,0 @@
|
||||||
/*
|
|
||||||
Copyright (C) 2018-2019 Krzysztof Kondrak
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or
|
|
||||||
modify it under the terms of the GNU General Public License
|
|
||||||
as published by the Free Software Foundation; either version 2
|
|
||||||
of the License, or (at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
||||||
|
|
||||||
See the GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "header/local.h"
|
|
||||||
|
|
||||||
static VkDebugUtilsMessengerEXT validationMessenger = VK_NULL_HANDLE;
|
|
||||||
|
|
||||||
// layer message to string
|
|
||||||
static const char* msgToString(VkDebugUtilsMessageTypeFlagsEXT type)
|
|
||||||
{
|
|
||||||
int g = (type & VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT) != 0 ? 1 : 0;
|
|
||||||
int p = (type & VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT) != 0 ? 1 : 0;
|
|
||||||
int v = (type & VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT) != 0 ? 1 : 0;
|
|
||||||
|
|
||||||
if (g) return "";
|
|
||||||
if (p && !v) return "(performance)";
|
|
||||||
if (p && v) return "(performance and validation)";
|
|
||||||
if (v) return "(validation)";
|
|
||||||
|
|
||||||
return "?";
|
|
||||||
}
|
|
||||||
|
|
||||||
// validation layer callback function (VK_EXT_debug_utils)
|
|
||||||
static VKAPI_ATTR VkBool32 VKAPI_CALL debugUtilsCallback(VkDebugUtilsMessageSeverityFlagBitsEXT msgSeverity,
|
|
||||||
VkDebugUtilsMessageTypeFlagsEXT msgType,
|
|
||||||
const VkDebugUtilsMessengerCallbackDataEXT *callbackData,
|
|
||||||
void* userData)
|
|
||||||
{
|
|
||||||
switch (msgSeverity)
|
|
||||||
{
|
|
||||||
case VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT:
|
|
||||||
R_Printf(PRINT_ALL, "VK_INFO: %s %s\n", callbackData->pMessage, msgToString(msgType));
|
|
||||||
break;
|
|
||||||
case VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT:
|
|
||||||
R_Printf(PRINT_ALL, "VK_VERBOSE: %s %s\n", callbackData->pMessage, msgToString(msgType));
|
|
||||||
break;
|
|
||||||
case VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT:
|
|
||||||
R_Printf(PRINT_ALL, "VK_WARNING: %s %s\n", callbackData->pMessage, msgToString(msgType));
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
R_Printf(PRINT_ALL, "VK_ERROR: %s %s\n", callbackData->pMessage, msgToString(msgType));
|
|
||||||
assert(!"Vulkan error occured!");
|
|
||||||
}
|
|
||||||
return VK_FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
void QVk_CreateValidationLayers()
|
|
||||||
{
|
|
||||||
VkDebugUtilsMessengerCreateInfoEXT callbackInfo = {
|
|
||||||
.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT,
|
|
||||||
.pNext = NULL,
|
|
||||||
.flags = 0,
|
|
||||||
.messageSeverity = VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT |
|
|
||||||
VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT,
|
|
||||||
.messageType = VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT |
|
|
||||||
VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT |
|
|
||||||
VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT,
|
|
||||||
.pfnUserCallback = debugUtilsCallback,
|
|
||||||
.pUserData = NULL
|
|
||||||
};
|
|
||||||
|
|
||||||
if(vk_validation->value)
|
|
||||||
{
|
|
||||||
callbackInfo.messageSeverity |= VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT |
|
|
||||||
VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (qvkCreateDebugUtilsMessengerEXT)
|
|
||||||
{
|
|
||||||
VK_VERIFY(qvkCreateDebugUtilsMessengerEXT(vk_instance, &callbackInfo, NULL, &validationMessenger));
|
|
||||||
R_Printf(PRINT_ALL, "...Vulkan validation layers enabled\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void QVk_DestroyValidationLayers()
|
|
||||||
{
|
|
||||||
if( validationMessenger != VK_NULL_HANDLE && qvkDestroyDebugUtilsMessengerEXT)
|
|
||||||
{
|
|
||||||
qvkDestroyDebugUtilsMessengerEXT( vk_instance, validationMessenger, NULL );
|
|
||||||
validationMessenger = VK_NULL_HANDLE;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,732 +0,0 @@
|
||||||
/*
|
|
||||||
Copyright (C) 1997-2001 Id Software, Inc.
|
|
||||||
Copyright (C) 2018-2019 Krzysztof Kondrak
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or
|
|
||||||
modify it under the terms of the GNU General Public License
|
|
||||||
as published by the Free Software Foundation; either version 2
|
|
||||||
of the License, or (at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
||||||
|
|
||||||
See the GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
||||||
|
|
||||||
*/
|
|
||||||
// vk_warp.c -- sky and water polygons
|
|
||||||
#include "header/local.h"
|
|
||||||
|
|
||||||
static char skyname[MAX_QPATH];
|
|
||||||
static float skyrotate;
|
|
||||||
static vec3_t skyaxis;
|
|
||||||
static image_t *sky_images[6];
|
|
||||||
|
|
||||||
static msurface_t *warpface;
|
|
||||||
|
|
||||||
#define SUBDIVIDE_SIZE 64
|
|
||||||
|
|
||||||
static void BoundPoly (int numverts, float *verts, vec3_t mins, vec3_t maxs)
|
|
||||||
{
|
|
||||||
int i, j;
|
|
||||||
float *v;
|
|
||||||
|
|
||||||
mins[0] = mins[1] = mins[2] = 9999;
|
|
||||||
maxs[0] = maxs[1] = maxs[2] = -9999;
|
|
||||||
v = verts;
|
|
||||||
for (i=0 ; i<numverts ; i++)
|
|
||||||
for (j=0 ; j<3 ; j++, v++)
|
|
||||||
{
|
|
||||||
if (*v < mins[j])
|
|
||||||
mins[j] = *v;
|
|
||||||
if (*v > maxs[j])
|
|
||||||
maxs[j] = *v;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void SubdividePolygon (int numverts, float *verts)
|
|
||||||
{
|
|
||||||
int i, j, k;
|
|
||||||
vec3_t mins, maxs;
|
|
||||||
float *v;
|
|
||||||
vec3_t front[64], back[64];
|
|
||||||
int f, b;
|
|
||||||
float dist[64];
|
|
||||||
float frac;
|
|
||||||
vkpoly_t *poly;
|
|
||||||
vec3_t total;
|
|
||||||
float total_s, total_t;
|
|
||||||
|
|
||||||
if (numverts > 60)
|
|
||||||
ri.Sys_Error (ERR_DROP, "%s: numverts = %i", __func__, numverts);
|
|
||||||
|
|
||||||
BoundPoly (numverts, verts, mins, maxs);
|
|
||||||
|
|
||||||
for (i=0 ; i<3 ; i++)
|
|
||||||
{
|
|
||||||
float m;
|
|
||||||
|
|
||||||
m = (mins[i] + maxs[i]) * 0.5;
|
|
||||||
m = SUBDIVIDE_SIZE * floor (m/SUBDIVIDE_SIZE + 0.5);
|
|
||||||
if (maxs[i] - m < 8)
|
|
||||||
continue;
|
|
||||||
if (m - mins[i] < 8)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
// cut it
|
|
||||||
v = verts + i;
|
|
||||||
for (j=0 ; j<numverts ; j++, v+= 3)
|
|
||||||
dist[j] = *v - m;
|
|
||||||
|
|
||||||
// wrap cases
|
|
||||||
dist[j] = dist[0];
|
|
||||||
v-=i;
|
|
||||||
VectorCopy (verts, v);
|
|
||||||
|
|
||||||
f = b = 0;
|
|
||||||
v = verts;
|
|
||||||
for (j=0 ; j<numverts ; j++, v+= 3)
|
|
||||||
{
|
|
||||||
if (dist[j] >= 0)
|
|
||||||
{
|
|
||||||
VectorCopy (v, front[f]);
|
|
||||||
f++;
|
|
||||||
}
|
|
||||||
if (dist[j] <= 0)
|
|
||||||
{
|
|
||||||
VectorCopy (v, back[b]);
|
|
||||||
b++;
|
|
||||||
}
|
|
||||||
if (dist[j] == 0 || dist[j+1] == 0)
|
|
||||||
continue;
|
|
||||||
if ( (dist[j] > 0) != (dist[j+1] > 0) )
|
|
||||||
{
|
|
||||||
// clip point
|
|
||||||
frac = dist[j] / (dist[j] - dist[j+1]);
|
|
||||||
for (k=0 ; k<3 ; k++)
|
|
||||||
front[f][k] = back[b][k] = v[k] + frac*(v[3+k] - v[k]);
|
|
||||||
f++;
|
|
||||||
b++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
SubdividePolygon (f, front[0]);
|
|
||||||
SubdividePolygon (b, back[0]);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// add a point in the center to help keep warp valid
|
|
||||||
poly = Hunk_Alloc (sizeof(vkpoly_t) + ((numverts-4)+2) * VERTEXSIZE*sizeof(float));
|
|
||||||
poly->next = warpface->polys;
|
|
||||||
warpface->polys = poly;
|
|
||||||
poly->numverts = numverts+2;
|
|
||||||
VectorClear (total);
|
|
||||||
total_s = 0;
|
|
||||||
total_t = 0;
|
|
||||||
for (i=0 ; i<numverts ; i++, verts+= 3)
|
|
||||||
{
|
|
||||||
float s, t;
|
|
||||||
|
|
||||||
VectorCopy (verts, poly->verts[i+1]);
|
|
||||||
s = DotProduct (verts, warpface->texinfo->vecs[0]);
|
|
||||||
t = DotProduct (verts, warpface->texinfo->vecs[1]);
|
|
||||||
|
|
||||||
total_s += s;
|
|
||||||
total_t += t;
|
|
||||||
VectorAdd (total, verts, total);
|
|
||||||
|
|
||||||
poly->verts[i+1][3] = s;
|
|
||||||
poly->verts[i+1][4] = t;
|
|
||||||
}
|
|
||||||
|
|
||||||
VectorScale (total, (1.0/numverts), poly->verts[0]);
|
|
||||||
poly->verts[0][3] = total_s/numverts;
|
|
||||||
poly->verts[0][4] = total_t/numverts;
|
|
||||||
|
|
||||||
// copy first vertex to last
|
|
||||||
memcpy (poly->verts[i+1], poly->verts[1], sizeof(poly->verts[0]));
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
================
|
|
||||||
Vk_SubdivideSurface
|
|
||||||
|
|
||||||
Breaks a polygon up along axial 64 unit
|
|
||||||
boundaries so that turbulent and sky warps
|
|
||||||
can be done reasonably.
|
|
||||||
================
|
|
||||||
*/
|
|
||||||
void Vk_SubdivideSurface (msurface_t *fa, model_t *loadmodel)
|
|
||||||
{
|
|
||||||
vec3_t verts[64];
|
|
||||||
int numverts;
|
|
||||||
int i;
|
|
||||||
float *vec;
|
|
||||||
|
|
||||||
warpface = fa;
|
|
||||||
|
|
||||||
//
|
|
||||||
// convert edges back to a normal polygon
|
|
||||||
//
|
|
||||||
numverts = 0;
|
|
||||||
for (i=0 ; i<fa->numedges ; i++)
|
|
||||||
{
|
|
||||||
int lindex;
|
|
||||||
|
|
||||||
lindex = loadmodel->surfedges[fa->firstedge + i];
|
|
||||||
|
|
||||||
if (lindex > 0)
|
|
||||||
vec = loadmodel->vertexes[loadmodel->edges[lindex].v[0]].position;
|
|
||||||
else
|
|
||||||
vec = loadmodel->vertexes[loadmodel->edges[-lindex].v[1]].position;
|
|
||||||
VectorCopy (vec, verts[numverts]);
|
|
||||||
numverts++;
|
|
||||||
}
|
|
||||||
|
|
||||||
SubdividePolygon (numverts, verts[0]);
|
|
||||||
}
|
|
||||||
|
|
||||||
//=========================================================
|
|
||||||
|
|
||||||
/*
|
|
||||||
=============
|
|
||||||
EmitWaterPolys
|
|
||||||
|
|
||||||
Does a water warp on the pre-fragmented vkpoly_t chain
|
|
||||||
=============
|
|
||||||
*/
|
|
||||||
void
|
|
||||||
EmitWaterPolys (msurface_t *fa, image_t *texture, float *modelMatrix,
|
|
||||||
float *color, qboolean solid_surface)
|
|
||||||
{
|
|
||||||
vkpoly_t *p, *bp;
|
|
||||||
float *v;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
struct {
|
|
||||||
float model[16];
|
|
||||||
float color[4];
|
|
||||||
float time;
|
|
||||||
float scroll;
|
|
||||||
} polyUbo;
|
|
||||||
|
|
||||||
polyUbo.color[0] = color[0];
|
|
||||||
polyUbo.color[1] = color[1];
|
|
||||||
polyUbo.color[2] = color[2];
|
|
||||||
polyUbo.color[3] = color[3];
|
|
||||||
polyUbo.time = r_newrefdef.time;
|
|
||||||
|
|
||||||
if (fa->texinfo->flags & SURF_FLOWING)
|
|
||||||
polyUbo.scroll = (-64 * ((r_newrefdef.time*0.5) - (int)(r_newrefdef.time*0.5))) / 64.f;
|
|
||||||
else
|
|
||||||
polyUbo.scroll = 0;
|
|
||||||
|
|
||||||
if (modelMatrix)
|
|
||||||
{
|
|
||||||
memcpy(polyUbo.model, modelMatrix, sizeof(float) * 16);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Mat_Identity(polyUbo.model);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (solid_surface)
|
|
||||||
{
|
|
||||||
// Solid surface
|
|
||||||
QVk_BindPipeline(&vk_drawPolySolidWarpPipeline);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// Blend surface
|
|
||||||
QVk_BindPipeline(&vk_drawPolyWarpPipeline);
|
|
||||||
}
|
|
||||||
|
|
||||||
uint32_t uboOffset;
|
|
||||||
VkDescriptorSet uboDescriptorSet;
|
|
||||||
uint8_t *uboData = QVk_GetUniformBuffer(sizeof(polyUbo), &uboOffset, &uboDescriptorSet);
|
|
||||||
memcpy(uboData, &polyUbo, sizeof(polyUbo));
|
|
||||||
|
|
||||||
VkBuffer vbo;
|
|
||||||
VkDeviceSize vboOffset;
|
|
||||||
VkDescriptorSet descriptorSets[] = { texture->vk_texture.descriptorSet, uboDescriptorSet };
|
|
||||||
|
|
||||||
float gamma = 2.1F - vid_gamma->value;
|
|
||||||
|
|
||||||
vkCmdPushConstants(vk_activeCmdbuffer, vk_drawTexQuadPipeline[vk_state.current_renderpass].layout,
|
|
||||||
VK_SHADER_STAGE_FRAGMENT_BIT, 17 * sizeof(float), sizeof(gamma), &gamma);
|
|
||||||
|
|
||||||
if (solid_surface)
|
|
||||||
{
|
|
||||||
// Solid surface
|
|
||||||
vkCmdBindDescriptorSets(
|
|
||||||
vk_activeCmdbuffer, VK_PIPELINE_BIND_POINT_GRAPHICS,
|
|
||||||
vk_drawPolySolidWarpPipeline.layout, 0, 2,
|
|
||||||
descriptorSets, 1, &uboOffset);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// Blend surface
|
|
||||||
vkCmdBindDescriptorSets(
|
|
||||||
vk_activeCmdbuffer, VK_PIPELINE_BIND_POINT_GRAPHICS,
|
|
||||||
vk_drawPolyWarpPipeline.layout, 0, 2,
|
|
||||||
descriptorSets, 1, &uboOffset);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (bp = fa->polys; bp; bp = bp->next)
|
|
||||||
{
|
|
||||||
p = bp;
|
|
||||||
|
|
||||||
if (Mesh_VertsRealloc(p->numverts))
|
|
||||||
{
|
|
||||||
ri.Sys_Error(ERR_FATAL, "%s: can't allocate memory", __func__);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 0, v = p->verts[0]; i < p->numverts; i++, v += VERTEXSIZE)
|
|
||||||
{
|
|
||||||
verts_buffer[i].vertex[0] = v[0];
|
|
||||||
verts_buffer[i].vertex[1] = v[1];
|
|
||||||
verts_buffer[i].vertex[2] = v[2];
|
|
||||||
verts_buffer[i].texCoord[0] = v[3] / 64.f;
|
|
||||||
verts_buffer[i].texCoord[1] = v[4] / 64.f;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint8_t *vertData = QVk_GetVertexBuffer(sizeof(polyvert_t) * p->numverts, &vbo, &vboOffset);
|
|
||||||
memcpy(vertData, verts_buffer, sizeof(polyvert_t) * p->numverts);
|
|
||||||
|
|
||||||
vkCmdBindVertexBuffers(vk_activeCmdbuffer, 0, 1, &vbo, &vboOffset);
|
|
||||||
vkCmdBindIndexBuffer(vk_activeCmdbuffer, QVk_GetTriangleFanIbo((p->numverts - 2) * 3), 0, VK_INDEX_TYPE_UINT16);
|
|
||||||
vkCmdDrawIndexed(vk_activeCmdbuffer, (p->numverts - 2) * 3, 1, 0, 0, 0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//===================================================================
|
|
||||||
|
|
||||||
|
|
||||||
static vec3_t skyclip[6] = {
|
|
||||||
{1,1,0},
|
|
||||||
{1,-1,0},
|
|
||||||
{0,-1,1},
|
|
||||||
{0,1,1},
|
|
||||||
{1,0,1},
|
|
||||||
{-1,0,1}
|
|
||||||
};
|
|
||||||
|
|
||||||
// 1 = s, 2 = t, 3 = 2048
|
|
||||||
static int st_to_vec[6][3] =
|
|
||||||
{
|
|
||||||
{3,-1,2},
|
|
||||||
{-3,1,2},
|
|
||||||
|
|
||||||
{1,3,2},
|
|
||||||
{-1,-3,2},
|
|
||||||
|
|
||||||
{-2,-1,3}, // 0 degrees yaw, look straight up
|
|
||||||
{2,-1,-3} // look straight down
|
|
||||||
|
|
||||||
// {-1,2,3},
|
|
||||||
// {1,2,-3}
|
|
||||||
};
|
|
||||||
|
|
||||||
// s = [0]/[2], t = [1]/[2]
|
|
||||||
static int vec_to_st[6][3] =
|
|
||||||
{
|
|
||||||
{-2,3,1},
|
|
||||||
{2,3,-1},
|
|
||||||
|
|
||||||
{1,3,2},
|
|
||||||
{-1,3,-2},
|
|
||||||
|
|
||||||
{-2,-1,3},
|
|
||||||
{-2,1,-3}
|
|
||||||
|
|
||||||
// {-1,2,3},
|
|
||||||
// {1,2,-3}
|
|
||||||
};
|
|
||||||
|
|
||||||
static float skymins[2][6], skymaxs[2][6];
|
|
||||||
static float sky_min, sky_max;
|
|
||||||
|
|
||||||
static void DrawSkyPolygon (int nump, vec3_t vecs)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
vec3_t v, av;
|
|
||||||
float s, t, dv;
|
|
||||||
int axis;
|
|
||||||
float *vp;
|
|
||||||
|
|
||||||
// decide which face it maps to
|
|
||||||
VectorCopy (vec3_origin, v);
|
|
||||||
for (i=0, vp=vecs ; i<nump ; i++, vp+=3)
|
|
||||||
{
|
|
||||||
VectorAdd (vp, v, v);
|
|
||||||
}
|
|
||||||
av[0] = fabs(v[0]);
|
|
||||||
av[1] = fabs(v[1]);
|
|
||||||
av[2] = fabs(v[2]);
|
|
||||||
if (av[0] > av[1] && av[0] > av[2])
|
|
||||||
{
|
|
||||||
if (v[0] < 0)
|
|
||||||
axis = 1;
|
|
||||||
else
|
|
||||||
axis = 0;
|
|
||||||
}
|
|
||||||
else if (av[1] > av[2] && av[1] > av[0])
|
|
||||||
{
|
|
||||||
if (v[1] < 0)
|
|
||||||
axis = 3;
|
|
||||||
else
|
|
||||||
axis = 2;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (v[2] < 0)
|
|
||||||
axis = 5;
|
|
||||||
else
|
|
||||||
axis = 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
// project new texture coords
|
|
||||||
for (i=0 ; i<nump ; i++, vecs+=3)
|
|
||||||
{
|
|
||||||
int j;
|
|
||||||
|
|
||||||
j = vec_to_st[axis][2];
|
|
||||||
if (j > 0)
|
|
||||||
dv = vecs[j - 1];
|
|
||||||
else
|
|
||||||
dv = -vecs[-j - 1];
|
|
||||||
if (dv < 0.001)
|
|
||||||
continue; // don't divide by zero
|
|
||||||
j = vec_to_st[axis][0];
|
|
||||||
if (j < 0)
|
|
||||||
s = -vecs[-j -1] / dv;
|
|
||||||
else
|
|
||||||
s = vecs[j-1] / dv;
|
|
||||||
j = vec_to_st[axis][1];
|
|
||||||
if (j < 0)
|
|
||||||
t = -vecs[-j -1] / dv;
|
|
||||||
else
|
|
||||||
t = vecs[j-1] / dv;
|
|
||||||
|
|
||||||
if (s < skymins[0][axis])
|
|
||||||
skymins[0][axis] = s;
|
|
||||||
if (t < skymins[1][axis])
|
|
||||||
skymins[1][axis] = t;
|
|
||||||
if (s > skymaxs[0][axis])
|
|
||||||
skymaxs[0][axis] = s;
|
|
||||||
if (t > skymaxs[1][axis])
|
|
||||||
skymaxs[1][axis] = t;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#define ON_EPSILON 0.1 // point on plane side epsilon
|
|
||||||
#define MAX_CLIP_VERTS 64
|
|
||||||
static void ClipSkyPolygon (int nump, vec3_t vecs, int stage)
|
|
||||||
{
|
|
||||||
float *norm;
|
|
||||||
float *v;
|
|
||||||
qboolean front, back;
|
|
||||||
float d, e;
|
|
||||||
float dists[MAX_CLIP_VERTS];
|
|
||||||
int sides[MAX_CLIP_VERTS];
|
|
||||||
vec3_t newv[2][MAX_CLIP_VERTS];
|
|
||||||
int newc[2];
|
|
||||||
int i, j;
|
|
||||||
|
|
||||||
if (nump > MAX_CLIP_VERTS-2)
|
|
||||||
ri.Sys_Error (ERR_DROP, "%s: MAX_CLIP_VERTS", __func__);
|
|
||||||
if (stage == 6)
|
|
||||||
{ // fully clipped, so draw it
|
|
||||||
DrawSkyPolygon (nump, vecs);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
front = back = false;
|
|
||||||
norm = skyclip[stage];
|
|
||||||
for (i=0, v = vecs ; i<nump ; i++, v+=3)
|
|
||||||
{
|
|
||||||
d = DotProduct (v, norm);
|
|
||||||
if (d > ON_EPSILON)
|
|
||||||
{
|
|
||||||
front = true;
|
|
||||||
sides[i] = SIDE_FRONT;
|
|
||||||
}
|
|
||||||
else if (d < -ON_EPSILON)
|
|
||||||
{
|
|
||||||
back = true;
|
|
||||||
sides[i] = SIDE_BACK;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
sides[i] = SIDE_ON;
|
|
||||||
dists[i] = d;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!front || !back)
|
|
||||||
{ // not clipped
|
|
||||||
ClipSkyPolygon (nump, vecs, stage+1);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// clip it
|
|
||||||
sides[i] = sides[0];
|
|
||||||
dists[i] = dists[0];
|
|
||||||
VectorCopy (vecs, (vecs+(i*3)) );
|
|
||||||
newc[0] = newc[1] = 0;
|
|
||||||
|
|
||||||
for (i=0, v = vecs ; i<nump ; i++, v+=3)
|
|
||||||
{
|
|
||||||
switch (sides[i])
|
|
||||||
{
|
|
||||||
case SIDE_FRONT:
|
|
||||||
VectorCopy (v, newv[0][newc[0]]);
|
|
||||||
newc[0]++;
|
|
||||||
break;
|
|
||||||
case SIDE_BACK:
|
|
||||||
VectorCopy (v, newv[1][newc[1]]);
|
|
||||||
newc[1]++;
|
|
||||||
break;
|
|
||||||
case SIDE_ON:
|
|
||||||
VectorCopy (v, newv[0][newc[0]]);
|
|
||||||
newc[0]++;
|
|
||||||
VectorCopy (v, newv[1][newc[1]]);
|
|
||||||
newc[1]++;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (sides[i] == SIDE_ON || sides[i+1] == SIDE_ON || sides[i+1] == sides[i])
|
|
||||||
continue;
|
|
||||||
|
|
||||||
d = dists[i] / (dists[i] - dists[i+1]);
|
|
||||||
for (j=0 ; j<3 ; j++)
|
|
||||||
{
|
|
||||||
e = v[j] + d*(v[j+3] - v[j]);
|
|
||||||
newv[0][newc[0]][j] = e;
|
|
||||||
newv[1][newc[1]][j] = e;
|
|
||||||
}
|
|
||||||
newc[0]++;
|
|
||||||
newc[1]++;
|
|
||||||
}
|
|
||||||
|
|
||||||
// continue
|
|
||||||
ClipSkyPolygon (newc[0], newv[0][0], stage+1);
|
|
||||||
ClipSkyPolygon (newc[1], newv[1][0], stage+1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
=================
|
|
||||||
R_AddSkySurface
|
|
||||||
=================
|
|
||||||
*/
|
|
||||||
void R_AddSkySurface (msurface_t *fa)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
vec3_t verts[MAX_CLIP_VERTS];
|
|
||||||
vkpoly_t *p;
|
|
||||||
|
|
||||||
// calculate vertex values for sky box
|
|
||||||
for (p=fa->polys ; p ; p=p->next)
|
|
||||||
{
|
|
||||||
for (i=0 ; i<p->numverts ; i++)
|
|
||||||
{
|
|
||||||
VectorSubtract (p->verts[i], r_origin, verts[i]);
|
|
||||||
}
|
|
||||||
ClipSkyPolygon (p->numverts, verts[0], 0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
==============
|
|
||||||
R_ClearSkyBox
|
|
||||||
==============
|
|
||||||
*/
|
|
||||||
void R_ClearSkyBox (void)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
|
|
||||||
for (i=0 ; i<6 ; i++)
|
|
||||||
{
|
|
||||||
skymins[0][i] = skymins[1][i] = 9999;
|
|
||||||
skymaxs[0][i] = skymaxs[1][i] = -9999;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static void MakeSkyVec (float s, float t, int axis, float *vertexData)
|
|
||||||
{
|
|
||||||
vec3_t v, b;
|
|
||||||
int j;
|
|
||||||
|
|
||||||
float dist = (r_farsee->value == 0) ? 2300.0f : 4096.0f;
|
|
||||||
|
|
||||||
b[0] = s * dist;
|
|
||||||
b[1] = t * dist;
|
|
||||||
b[2] = dist;
|
|
||||||
|
|
||||||
for (j = 0; j<3; j++)
|
|
||||||
{
|
|
||||||
int k;
|
|
||||||
|
|
||||||
k = st_to_vec[axis][j];
|
|
||||||
if (k < 0)
|
|
||||||
v[j] = -b[-k - 1];
|
|
||||||
else
|
|
||||||
v[j] = b[k - 1];
|
|
||||||
}
|
|
||||||
|
|
||||||
// avoid bilerp seam
|
|
||||||
s = (s + 1)*0.5;
|
|
||||||
t = (t + 1)*0.5;
|
|
||||||
|
|
||||||
if (s < sky_min)
|
|
||||||
s = sky_min;
|
|
||||||
else if (s > sky_max)
|
|
||||||
s = sky_max;
|
|
||||||
if (t < sky_min)
|
|
||||||
t = sky_min;
|
|
||||||
else if (t > sky_max)
|
|
||||||
t = sky_max;
|
|
||||||
|
|
||||||
t = 1.0 - t;
|
|
||||||
|
|
||||||
vertexData[0] = v[0];
|
|
||||||
vertexData[1] = v[1];
|
|
||||||
vertexData[2] = v[2];
|
|
||||||
vertexData[3] = s;
|
|
||||||
vertexData[4] = t;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
==============
|
|
||||||
R_DrawSkyBox
|
|
||||||
==============
|
|
||||||
*/
|
|
||||||
static int skytexorder[6] = {0,2,1,3,4,5};
|
|
||||||
void R_DrawSkyBox (void)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
|
|
||||||
if (skyrotate)
|
|
||||||
{ // check for no sky at all
|
|
||||||
for (i = 0; i<6; i++)
|
|
||||||
if (skymins[0][i] < skymaxs[0][i]
|
|
||||||
&& skymins[1][i] < skymaxs[1][i])
|
|
||||||
break;
|
|
||||||
if (i == 6)
|
|
||||||
return; // nothing visible
|
|
||||||
}
|
|
||||||
|
|
||||||
float model[16];
|
|
||||||
Mat_Identity(model);
|
|
||||||
Mat_Rotate(model, r_newrefdef.time * skyrotate, skyaxis[0], skyaxis[1], skyaxis[2]);
|
|
||||||
Mat_Translate(model, r_origin[0], r_origin[1], r_origin[2]);
|
|
||||||
|
|
||||||
struct {
|
|
||||||
float data[5];
|
|
||||||
} skyVerts[4];
|
|
||||||
|
|
||||||
QVk_BindPipeline(&vk_drawSkyboxPipeline);
|
|
||||||
uint32_t uboOffset;
|
|
||||||
VkDescriptorSet uboDescriptorSet;
|
|
||||||
uint8_t *uboData = QVk_GetUniformBuffer(sizeof(model), &uboOffset, &uboDescriptorSet);
|
|
||||||
memcpy(uboData, model, sizeof(model));
|
|
||||||
|
|
||||||
for (i = 0; i<6; i++)
|
|
||||||
{
|
|
||||||
if (skyrotate)
|
|
||||||
{ // hack, forces full sky to draw when rotating
|
|
||||||
skymins[0][i] = -1;
|
|
||||||
skymins[1][i] = -1;
|
|
||||||
skymaxs[0][i] = 1;
|
|
||||||
skymaxs[1][i] = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (skymins[0][i] >= skymaxs[0][i]
|
|
||||||
|| skymins[1][i] >= skymaxs[1][i])
|
|
||||||
continue;
|
|
||||||
|
|
||||||
MakeSkyVec(skymins[0][i], skymins[1][i], i, skyVerts[0].data);
|
|
||||||
MakeSkyVec(skymins[0][i], skymaxs[1][i], i, skyVerts[1].data);
|
|
||||||
MakeSkyVec(skymaxs[0][i], skymaxs[1][i], i, skyVerts[2].data);
|
|
||||||
MakeSkyVec(skymaxs[0][i], skymins[1][i], i, skyVerts[3].data);
|
|
||||||
|
|
||||||
float verts[] = {
|
|
||||||
skyVerts[0].data[0], skyVerts[0].data[1], skyVerts[0].data[2], skyVerts[0].data[3], skyVerts[0].data[4],
|
|
||||||
skyVerts[1].data[0], skyVerts[1].data[1], skyVerts[1].data[2], skyVerts[1].data[3], skyVerts[1].data[4],
|
|
||||||
skyVerts[2].data[0], skyVerts[2].data[1], skyVerts[2].data[2], skyVerts[2].data[3], skyVerts[2].data[4],
|
|
||||||
skyVerts[0].data[0], skyVerts[0].data[1], skyVerts[0].data[2], skyVerts[0].data[3], skyVerts[0].data[4],
|
|
||||||
skyVerts[2].data[0], skyVerts[2].data[1], skyVerts[2].data[2], skyVerts[2].data[3], skyVerts[2].data[4],
|
|
||||||
skyVerts[3].data[0], skyVerts[3].data[1], skyVerts[3].data[2], skyVerts[3].data[3], skyVerts[3].data[4]
|
|
||||||
};
|
|
||||||
|
|
||||||
VkBuffer vbo;
|
|
||||||
VkDeviceSize vboOffset;
|
|
||||||
uint8_t *vertData = QVk_GetVertexBuffer(sizeof(verts), &vbo, &vboOffset);
|
|
||||||
memcpy(vertData, verts, sizeof(verts));
|
|
||||||
|
|
||||||
VkDescriptorSet descriptorSets[] = { sky_images[skytexorder[i]]->vk_texture.descriptorSet, uboDescriptorSet };
|
|
||||||
|
|
||||||
float gamma = 2.1F - vid_gamma->value;
|
|
||||||
|
|
||||||
vkCmdPushConstants(vk_activeCmdbuffer, vk_drawTexQuadPipeline[vk_state.current_renderpass].layout,
|
|
||||||
VK_SHADER_STAGE_FRAGMENT_BIT, 17 * sizeof(float), sizeof(gamma), &gamma);
|
|
||||||
|
|
||||||
vkCmdBindDescriptorSets(vk_activeCmdbuffer, VK_PIPELINE_BIND_POINT_GRAPHICS,
|
|
||||||
vk_drawSkyboxPipeline.layout, 0, 2, descriptorSets, 1, &uboOffset);
|
|
||||||
vkCmdBindVertexBuffers(vk_activeCmdbuffer, 0, 1, &vbo, &vboOffset);
|
|
||||||
vkCmdDraw(vk_activeCmdbuffer, 6, 1, 0, 0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
============
|
|
||||||
RE_SetSky
|
|
||||||
============
|
|
||||||
*/
|
|
||||||
// 3dstudio environment map names
|
|
||||||
static char *suf[6] = {"rt", "bk", "lf", "ft", "up", "dn"};
|
|
||||||
void RE_SetSky (char *name, float rotate, vec3_t axis)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
char pathname[MAX_QPATH];
|
|
||||||
|
|
||||||
strncpy(skyname, name, sizeof(skyname) - 1);
|
|
||||||
skyrotate = rotate;
|
|
||||||
VectorCopy(axis, skyaxis);
|
|
||||||
|
|
||||||
for (i = 0; i<6; i++)
|
|
||||||
{
|
|
||||||
// chop down rotating skies for less memory
|
|
||||||
if (vk_skymip->value || skyrotate)
|
|
||||||
vk_picmip->value++;
|
|
||||||
|
|
||||||
Com_sprintf(pathname, sizeof(pathname), "env/%s%s.tga", skyname, suf[i]);
|
|
||||||
|
|
||||||
sky_images[i] = Vk_FindImage(pathname, it_sky);
|
|
||||||
if (!sky_images[i]) {
|
|
||||||
Com_sprintf(pathname, sizeof(pathname), "pics/Skies/%s%s.m8", skyname, suf[i]);
|
|
||||||
sky_images[i] = Vk_FindImage(pathname, it_sky);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!sky_images[i])
|
|
||||||
sky_images[i] = r_notexture;
|
|
||||||
|
|
||||||
if (vk_skymip->value || skyrotate)
|
|
||||||
{ // take less memory
|
|
||||||
vk_picmip->value--;
|
|
||||||
sky_min = 1.0 / 256;
|
|
||||||
sky_max = 255.0 / 256;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
sky_min = 1.0 / 512;
|
|
||||||
sky_max = 511.0 / 512;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
@ -1,25 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
glslangValidator --variable-name basic_vert_spv -V shaders/basic.vert -o ../src/client/refresh/vk/spirv/basic_vert.c
|
|
||||||
glslangValidator --variable-name basic_frag_spv -V shaders/basic.frag -o ../src/client/refresh/vk/spirv/basic_frag.c
|
|
||||||
glslangValidator --variable-name basic_color_quad_vert_spv -V shaders/basic_color_quad.vert -o ../src/client/refresh/vk/spirv/basic_color_quad_vert.c
|
|
||||||
glslangValidator --variable-name basic_color_quad_frag_spv -V shaders/basic_color_quad.frag -o ../src/client/refresh/vk/spirv/basic_color_quad_frag.c
|
|
||||||
glslangValidator --variable-name model_vert_spv -V shaders/model.vert -o ../src/client/refresh/vk/spirv/model_vert.c
|
|
||||||
glslangValidator --variable-name model_frag_spv -V shaders/model.frag -o ../src/client/refresh/vk/spirv/model_frag.c
|
|
||||||
glslangValidator --variable-name nullmodel_vert_spv -V shaders/nullmodel.vert -o ../src/client/refresh/vk/spirv/nullmodel_vert.c
|
|
||||||
glslangValidator --variable-name particle_vert_spv -V shaders/particle.vert -o ../src/client/refresh/vk/spirv/particle_vert.c
|
|
||||||
glslangValidator --variable-name point_particle_vert_spv -V shaders/point_particle.vert -o ../src/client/refresh/vk/spirv/point_particle_vert.c
|
|
||||||
glslangValidator --variable-name point_particle_frag_spv -V shaders/point_particle.frag -o ../src/client/refresh/vk/spirv/point_particle_frag.c
|
|
||||||
glslangValidator --variable-name sprite_vert_spv -V shaders/sprite.vert -o ../src/client/refresh/vk/spirv/sprite_vert.c
|
|
||||||
glslangValidator --variable-name beam_vert_spv -V shaders/beam.vert -o ../src/client/refresh/vk/spirv/beam_vert.c
|
|
||||||
glslangValidator --variable-name skybox_vert_spv -V shaders/skybox.vert -o ../src/client/refresh/vk/spirv/skybox_vert.c
|
|
||||||
glslangValidator --variable-name d_light_vert_spv -V shaders/d_light.vert -o ../src/client/refresh/vk/spirv/d_light_vert.c
|
|
||||||
glslangValidator --variable-name polygon_vert_spv -V shaders/polygon.vert -o ../src/client/refresh/vk/spirv/polygon_vert.c
|
|
||||||
glslangValidator --variable-name polygon_lmap_vert_spv -V shaders/polygon_lmap.vert -o ../src/client/refresh/vk/spirv/polygon_lmap_vert.c
|
|
||||||
glslangValidator --variable-name polygon_lmap_frag_spv -V shaders/polygon_lmap.frag -o ../src/client/refresh/vk/spirv/polygon_lmap_frag.c
|
|
||||||
glslangValidator --variable-name polygon_warp_vert_spv -V shaders/polygon_warp.vert -o ../src/client/refresh/vk/spirv/polygon_warp_vert.c
|
|
||||||
glslangValidator --variable-name shadows_vert_spv -V shaders/shadows.vert -o ../src/client/refresh/vk/spirv/shadows_vert.c
|
|
||||||
glslangValidator --variable-name postprocess_vert_spv -V shaders/postprocess.vert -o ../src/client/refresh/vk/spirv/postprocess_vert.c
|
|
||||||
glslangValidator --variable-name postprocess_frag_spv -V shaders/postprocess.frag -o ../src/client/refresh/vk/spirv/postprocess_frag.c
|
|
||||||
glslangValidator --variable-name world_warp_vert_spv -V shaders/world_warp.vert -o ../src/client/refresh/vk/spirv/world_warp_vert.c
|
|
||||||
glslangValidator --variable-name world_warp_frag_spv -V shaders/world_warp.frag -o ../src/client/refresh/vk/spirv/world_warp_frag.c
|
|
|
@ -1,24 +0,0 @@
|
||||||
#version 450
|
|
||||||
|
|
||||||
layout(push_constant) uniform PushConstant
|
|
||||||
{
|
|
||||||
// vertex shader has 'mat4 vpMatrix;' at begin.
|
|
||||||
layout(offset = 68) float gamma;
|
|
||||||
} pc;
|
|
||||||
|
|
||||||
layout(set = 0, binding = 0) uniform sampler2D sTexture;
|
|
||||||
|
|
||||||
layout(location = 0) in vec2 texCoord;
|
|
||||||
layout(location = 1) in vec4 color;
|
|
||||||
layout(location = 2) in float aTreshold;
|
|
||||||
|
|
||||||
layout(location = 0) out vec4 fragmentColor;
|
|
||||||
|
|
||||||
void main()
|
|
||||||
{
|
|
||||||
fragmentColor = texture(sTexture, texCoord) * color;
|
|
||||||
if(fragmentColor.a < aTreshold)
|
|
||||||
discard;
|
|
||||||
|
|
||||||
fragmentColor = vec4(pow(fragmentColor.rgb, vec3(pc.gamma)), fragmentColor.a);
|
|
||||||
}
|
|
|
@ -1,30 +0,0 @@
|
||||||
#version 450
|
|
||||||
#extension GL_ARB_separate_shader_objects : enable
|
|
||||||
|
|
||||||
// normalized offset and scale
|
|
||||||
layout(set = 1, binding = 0) uniform imageTransform
|
|
||||||
{
|
|
||||||
vec2 offset;
|
|
||||||
vec2 scale;
|
|
||||||
vec2 uvOffset;
|
|
||||||
vec2 uvScale;
|
|
||||||
} it;
|
|
||||||
|
|
||||||
layout(location = 0) in vec2 inVertex;
|
|
||||||
layout(location = 1) in vec2 inTexCoord;
|
|
||||||
|
|
||||||
layout(location = 0) out vec2 texCoord;
|
|
||||||
layout(location = 1) out vec4 color;
|
|
||||||
layout(location = 2) out float aTreshold;
|
|
||||||
|
|
||||||
out gl_PerVertex {
|
|
||||||
vec4 gl_Position;
|
|
||||||
};
|
|
||||||
|
|
||||||
void main() {
|
|
||||||
vec2 vPos = inVertex.xy * it.scale - (vec2(1.0) - it.scale);
|
|
||||||
gl_Position = vec4(vPos + it.offset * 2.0, 0.0, 1.0);
|
|
||||||
texCoord = inTexCoord.xy * it.uvScale + it.uvOffset;
|
|
||||||
color = vec4(1.0, 1.0, 1.0, 1.0);
|
|
||||||
aTreshold = 0.666;
|
|
||||||
}
|
|
|
@ -1,10 +0,0 @@
|
||||||
#version 450
|
|
||||||
|
|
||||||
layout(location = 0) in vec4 color;
|
|
||||||
|
|
||||||
layout(location = 0) out vec4 fragmentColor;
|
|
||||||
|
|
||||||
void main()
|
|
||||||
{
|
|
||||||
fragmentColor = color;
|
|
||||||
}
|
|
|
@ -1,24 +0,0 @@
|
||||||
#version 450
|
|
||||||
#extension GL_ARB_separate_shader_objects : enable
|
|
||||||
|
|
||||||
// normalized offset and scale
|
|
||||||
layout(set = 0, binding = 0) uniform imageTransform
|
|
||||||
{
|
|
||||||
vec2 offset;
|
|
||||||
vec2 scale;
|
|
||||||
vec4 color;
|
|
||||||
} it;
|
|
||||||
|
|
||||||
layout(location = 0) in vec2 inVertex;
|
|
||||||
|
|
||||||
layout(location = 0) out vec4 color;
|
|
||||||
|
|
||||||
out gl_PerVertex {
|
|
||||||
vec4 gl_Position;
|
|
||||||
};
|
|
||||||
|
|
||||||
void main() {
|
|
||||||
vec2 vPos = inVertex.xy * it.scale - (vec2(1.0) - it.scale);
|
|
||||||
gl_Position = vec4(vPos + it.offset * 2.0, 0.0, 1.0);
|
|
||||||
color = it.color;
|
|
||||||
}
|
|
|
@ -1,25 +0,0 @@
|
||||||
#version 450
|
|
||||||
#extension GL_ARB_separate_shader_objects : enable
|
|
||||||
|
|
||||||
layout(location = 0) in vec3 inVertex;
|
|
||||||
|
|
||||||
layout(push_constant) uniform PushConstant
|
|
||||||
{
|
|
||||||
mat4 mvpMatrix;
|
|
||||||
} pc;
|
|
||||||
|
|
||||||
layout(binding = 0) uniform UniformBufferObject
|
|
||||||
{
|
|
||||||
vec4 color;
|
|
||||||
} ubo;
|
|
||||||
|
|
||||||
layout(location = 0) out vec4 color;
|
|
||||||
|
|
||||||
out gl_PerVertex {
|
|
||||||
vec4 gl_Position;
|
|
||||||
};
|
|
||||||
|
|
||||||
void main() {
|
|
||||||
gl_Position = pc.mvpMatrix * vec4(inVertex, 1.0);
|
|
||||||
color = ubo.color;
|
|
||||||
}
|
|
|
@ -1,21 +0,0 @@
|
||||||
#version 450
|
|
||||||
#extension GL_ARB_separate_shader_objects : enable
|
|
||||||
|
|
||||||
layout(location = 0) in vec3 inVertex;
|
|
||||||
layout(location = 1) in vec3 inColor;
|
|
||||||
|
|
||||||
layout(binding = 0) uniform UniformBufferObject
|
|
||||||
{
|
|
||||||
mat4 mvpMatrix;
|
|
||||||
} ubo;
|
|
||||||
|
|
||||||
layout(location = 0) out vec4 color;
|
|
||||||
|
|
||||||
out gl_PerVertex {
|
|
||||||
vec4 gl_Position;
|
|
||||||
};
|
|
||||||
|
|
||||||
void main() {
|
|
||||||
gl_Position = ubo.mvpMatrix * vec4(inVertex, 1.0);
|
|
||||||
color = vec4(inColor, 1.0);
|
|
||||||
}
|
|
|
@ -1,17 +0,0 @@
|
||||||
#version 450
|
|
||||||
|
|
||||||
layout(set = 0, binding = 0) uniform sampler2D sTexture;
|
|
||||||
|
|
||||||
layout(location = 0) in vec4 color;
|
|
||||||
layout(location = 1) in vec2 texCoord;
|
|
||||||
layout(location = 2) in flat int textured;
|
|
||||||
|
|
||||||
layout(location = 0) out vec4 fragmentColor;
|
|
||||||
|
|
||||||
void main()
|
|
||||||
{
|
|
||||||
if(textured != 0)
|
|
||||||
fragmentColor = texture(sTexture, texCoord) * clamp(color, 0.0, 1.0);
|
|
||||||
else
|
|
||||||
fragmentColor = color;
|
|
||||||
}
|
|
|
@ -1,32 +0,0 @@
|
||||||
#version 450
|
|
||||||
#extension GL_ARB_separate_shader_objects : enable
|
|
||||||
|
|
||||||
layout(location = 0) in vec3 inVertex;
|
|
||||||
layout(location = 1) in vec4 inColor;
|
|
||||||
layout(location = 2) in vec2 inTexCoord;
|
|
||||||
|
|
||||||
layout(push_constant) uniform PushConstant
|
|
||||||
{
|
|
||||||
mat4 vpMatrix;
|
|
||||||
} pc;
|
|
||||||
|
|
||||||
layout(set = 1, binding = 0) uniform UniformBufferObject
|
|
||||||
{
|
|
||||||
mat4 model;
|
|
||||||
int textured;
|
|
||||||
} ubo;
|
|
||||||
|
|
||||||
layout(location = 0) out vec4 color;
|
|
||||||
layout(location = 1) out vec2 texCoord;
|
|
||||||
layout(location = 2) out int textured;
|
|
||||||
|
|
||||||
out gl_PerVertex {
|
|
||||||
vec4 gl_Position;
|
|
||||||
};
|
|
||||||
|
|
||||||
void main() {
|
|
||||||
gl_Position = pc.vpMatrix * ubo.model * vec4(inVertex, 1.0);
|
|
||||||
color = inColor;
|
|
||||||
texCoord = inTexCoord;
|
|
||||||
textured = ubo.textured;
|
|
||||||
}
|
|
|
@ -1,26 +0,0 @@
|
||||||
#version 450
|
|
||||||
#extension GL_ARB_separate_shader_objects : enable
|
|
||||||
|
|
||||||
layout(location = 0) in vec3 inVertex;
|
|
||||||
layout(location = 1) in vec3 inColor;
|
|
||||||
|
|
||||||
layout(push_constant) uniform PushConstant
|
|
||||||
{
|
|
||||||
mat4 vpMatrix;
|
|
||||||
} pc;
|
|
||||||
|
|
||||||
layout(binding = 0) uniform UniformBufferObject
|
|
||||||
{
|
|
||||||
mat4 model;
|
|
||||||
} ubo;
|
|
||||||
|
|
||||||
layout(location = 0) out vec4 color;
|
|
||||||
|
|
||||||
out gl_PerVertex {
|
|
||||||
vec4 gl_Position;
|
|
||||||
};
|
|
||||||
|
|
||||||
void main() {
|
|
||||||
gl_Position = pc.vpMatrix * ubo.model * vec4(inVertex, 1.0);
|
|
||||||
color = vec4(inColor, 1.0);
|
|
||||||
}
|
|
|
@ -1,26 +0,0 @@
|
||||||
#version 450
|
|
||||||
#extension GL_ARB_separate_shader_objects : enable
|
|
||||||
|
|
||||||
layout(location = 0) in vec3 inVertex;
|
|
||||||
layout(location = 1) in vec4 inColor;
|
|
||||||
layout(location = 2) in vec2 inTexCoord;
|
|
||||||
|
|
||||||
layout(push_constant) uniform PushConstant
|
|
||||||
{
|
|
||||||
mat4 mvpMatrix;
|
|
||||||
} pc;
|
|
||||||
|
|
||||||
layout(location = 0) out vec2 texCoord;
|
|
||||||
layout(location = 1) out vec4 color;
|
|
||||||
layout(location = 2) out float aTreshold;
|
|
||||||
|
|
||||||
out gl_PerVertex {
|
|
||||||
vec4 gl_Position;
|
|
||||||
};
|
|
||||||
|
|
||||||
void main() {
|
|
||||||
gl_Position = pc.mvpMatrix * vec4(inVertex, 1.0);
|
|
||||||
texCoord = inTexCoord;
|
|
||||||
color = inColor;
|
|
||||||
aTreshold = 0.5;
|
|
||||||
}
|
|
|
@ -1,14 +0,0 @@
|
||||||
#version 450
|
|
||||||
|
|
||||||
layout(location = 0) in vec4 color;
|
|
||||||
|
|
||||||
layout(location = 0) out vec4 fragmentColor;
|
|
||||||
|
|
||||||
void main()
|
|
||||||
{
|
|
||||||
vec2 cxy = 2.0 * gl_PointCoord - 1.0;
|
|
||||||
if(dot(cxy, cxy) > 1.0)
|
|
||||||
discard;
|
|
||||||
|
|
||||||
fragmentColor = color;
|
|
||||||
}
|
|
|
@ -1,37 +0,0 @@
|
||||||
#version 450
|
|
||||||
#extension GL_ARB_separate_shader_objects : enable
|
|
||||||
|
|
||||||
layout(location = 0) in vec3 inVertex;
|
|
||||||
layout(location = 1) in vec4 inColor;
|
|
||||||
|
|
||||||
layout(push_constant) uniform PushConstant
|
|
||||||
{
|
|
||||||
mat4 mvpMatrix;
|
|
||||||
} pc;
|
|
||||||
|
|
||||||
layout(binding = 0) uniform UniformBufferObject
|
|
||||||
{
|
|
||||||
float pointSize;
|
|
||||||
float pointScale;
|
|
||||||
float minPointSize;
|
|
||||||
float maxPointSize;
|
|
||||||
float att_a;
|
|
||||||
float att_b;
|
|
||||||
float att_c;
|
|
||||||
} ubo;
|
|
||||||
|
|
||||||
layout(location = 0) out vec4 color;
|
|
||||||
|
|
||||||
out gl_PerVertex {
|
|
||||||
vec4 gl_Position;
|
|
||||||
float gl_PointSize;
|
|
||||||
};
|
|
||||||
|
|
||||||
void main() {
|
|
||||||
gl_Position = pc.mvpMatrix * vec4(inVertex, 1.0);
|
|
||||||
|
|
||||||
float dist_atten = ubo.pointScale / (ubo.att_a + ubo.att_b * gl_Position.w + ubo.att_c * gl_Position.w * gl_Position.w);
|
|
||||||
gl_PointSize = clamp(ubo.pointScale * ubo.pointSize * sqrt(dist_atten), ubo.minPointSize, ubo.maxPointSize);
|
|
||||||
|
|
||||||
color = inColor;
|
|
||||||
}
|
|
|
@ -1,30 +0,0 @@
|
||||||
#version 450
|
|
||||||
#extension GL_ARB_separate_shader_objects : enable
|
|
||||||
|
|
||||||
layout(location = 0) in vec3 inVertex;
|
|
||||||
layout(location = 1) in vec2 inTexCoord;
|
|
||||||
|
|
||||||
layout(push_constant) uniform PushConstant
|
|
||||||
{
|
|
||||||
mat4 mvpMatrix;
|
|
||||||
} pc;
|
|
||||||
|
|
||||||
layout(set = 1, binding = 0) uniform UniformBufferObject
|
|
||||||
{
|
|
||||||
vec4 color;
|
|
||||||
} ubo;
|
|
||||||
|
|
||||||
layout(location = 0) out vec2 texCoord;
|
|
||||||
layout(location = 1) out vec4 color;
|
|
||||||
layout(location = 2) out float aTreshold;
|
|
||||||
|
|
||||||
out gl_PerVertex {
|
|
||||||
vec4 gl_Position;
|
|
||||||
};
|
|
||||||
|
|
||||||
void main() {
|
|
||||||
gl_Position = pc.mvpMatrix * vec4(inVertex, 1.0);
|
|
||||||
texCoord = inTexCoord;
|
|
||||||
color = ubo.color;
|
|
||||||
aTreshold = 0.0;
|
|
||||||
}
|
|
|
@ -1,17 +0,0 @@
|
||||||
#version 450
|
|
||||||
|
|
||||||
layout(set = 0, binding = 0) uniform sampler2D sTexture;
|
|
||||||
layout(set = 2, binding = 0) uniform sampler2D sLightmap;
|
|
||||||
|
|
||||||
layout(location = 0) in vec2 texCoord;
|
|
||||||
layout(location = 1) in vec2 texCoordLmap;
|
|
||||||
layout(location = 2) in float viewLightmaps;
|
|
||||||
|
|
||||||
layout(location = 0) out vec4 fragmentColor;
|
|
||||||
|
|
||||||
void main()
|
|
||||||
{
|
|
||||||
vec4 color = texture(sTexture, texCoord);
|
|
||||||
vec4 light = texture(sLightmap, texCoordLmap);
|
|
||||||
fragmentColor = (1.0 - viewLightmaps) * color * light + viewLightmaps * light;
|
|
||||||
}
|
|
|
@ -1,32 +0,0 @@
|
||||||
#version 450
|
|
||||||
#extension GL_ARB_separate_shader_objects : enable
|
|
||||||
|
|
||||||
layout(location = 0) in vec3 inVertex;
|
|
||||||
layout(location = 1) in vec2 inTexCoord;
|
|
||||||
layout(location = 2) in vec2 inTexCoordLmap;
|
|
||||||
|
|
||||||
layout(push_constant) uniform PushConstant
|
|
||||||
{
|
|
||||||
mat4 vpMatrix;
|
|
||||||
} pc;
|
|
||||||
|
|
||||||
layout(set = 1, binding = 0) uniform UniformBufferObject
|
|
||||||
{
|
|
||||||
mat4 model;
|
|
||||||
float viewLightmaps;
|
|
||||||
} ubo;
|
|
||||||
|
|
||||||
layout(location = 0) out vec2 texCoord;
|
|
||||||
layout(location = 1) out vec2 texCoordLmap;
|
|
||||||
layout(location = 2) out float viewLightmaps;
|
|
||||||
|
|
||||||
out gl_PerVertex {
|
|
||||||
vec4 gl_Position;
|
|
||||||
};
|
|
||||||
|
|
||||||
void main() {
|
|
||||||
gl_Position = pc.vpMatrix * ubo.model * vec4(inVertex, 1.0);
|
|
||||||
texCoord = inTexCoord;
|
|
||||||
texCoordLmap = inTexCoordLmap;
|
|
||||||
viewLightmaps = ubo.viewLightmaps;
|
|
||||||
}
|
|
|
@ -1,34 +0,0 @@
|
||||||
#version 450
|
|
||||||
#extension GL_ARB_separate_shader_objects : enable
|
|
||||||
|
|
||||||
layout(location = 0) in vec3 inVertex;
|
|
||||||
layout(location = 1) in vec2 inTexCoord;
|
|
||||||
|
|
||||||
layout(push_constant) uniform PushConstant
|
|
||||||
{
|
|
||||||
mat4 vpMatrix;
|
|
||||||
} pc;
|
|
||||||
|
|
||||||
layout(set = 1, binding = 0) uniform UniformBufferObject
|
|
||||||
{
|
|
||||||
mat4 model;
|
|
||||||
vec4 color;
|
|
||||||
float time;
|
|
||||||
float scroll;
|
|
||||||
} ubo;
|
|
||||||
|
|
||||||
layout(location = 0) out vec2 texCoord;
|
|
||||||
layout(location = 1) out vec4 color;
|
|
||||||
layout(location = 2) out float aTreshold;
|
|
||||||
|
|
||||||
out gl_PerVertex {
|
|
||||||
vec4 gl_Position;
|
|
||||||
};
|
|
||||||
|
|
||||||
void main() {
|
|
||||||
gl_Position = pc.vpMatrix * ubo.model * vec4(inVertex, 1.0);
|
|
||||||
texCoord = inTexCoord + vec2(sin(2.0 * ubo.time + inTexCoord.y * 3.28), sin(2.0 * ubo.time + inTexCoord.x * 3.28)) * 0.05;
|
|
||||||
texCoord.x += ubo.scroll;
|
|
||||||
color = ubo.color;
|
|
||||||
aTreshold = 0.0;
|
|
||||||
}
|
|
|
@ -1,33 +0,0 @@
|
||||||
#version 450
|
|
||||||
#extension GL_ARB_separate_shader_objects : enable
|
|
||||||
|
|
||||||
layout(push_constant) uniform PushConstant
|
|
||||||
{
|
|
||||||
layout(offset = 68) float postprocess;
|
|
||||||
layout(offset = 72) float gamma;
|
|
||||||
layout(offset = 76) float scrWidth;
|
|
||||||
layout(offset = 80) float scrHeight;
|
|
||||||
layout(offset = 84) float offsetX;
|
|
||||||
layout(offset = 88) float offsetY;
|
|
||||||
} pc;
|
|
||||||
|
|
||||||
layout(set = 0, binding = 0) uniform sampler2D sTexture;
|
|
||||||
|
|
||||||
layout(location = 0) in vec2 texCoord;
|
|
||||||
layout(location = 0) out vec4 fragmentColor;
|
|
||||||
|
|
||||||
void main()
|
|
||||||
{
|
|
||||||
vec2 unnormTexCoord = texCoord * vec2(pc.scrWidth, pc.scrHeight) + vec2(pc.offsetX, pc.offsetY);
|
|
||||||
|
|
||||||
// apply any additional world-only postprocessing effects here (if enabled)
|
|
||||||
if (pc.postprocess > 0.0)
|
|
||||||
{
|
|
||||||
//gamma + color intensity bump
|
|
||||||
fragmentColor = vec4(pow(textureLod(sTexture, unnormTexCoord, 0.0).rgb * 1.5, vec3(pc.gamma)), 1.0);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
fragmentColor = textureLod(sTexture, unnormTexCoord, 0.0);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,17 +0,0 @@
|
||||||
#version 450
|
|
||||||
#extension GL_ARB_separate_shader_objects : enable
|
|
||||||
|
|
||||||
// rendering a fullscreen quad (which is actually just a huge triangle)
|
|
||||||
// source: https://www.saschawillems.de/blog/2016/08/13/vulkan-tutorial-on-rendering-a-fullscreen-quad-without-buffers/
|
|
||||||
|
|
||||||
out gl_PerVertex {
|
|
||||||
vec4 gl_Position;
|
|
||||||
};
|
|
||||||
|
|
||||||
layout(location = 0) out vec2 texCoord;
|
|
||||||
|
|
||||||
void main()
|
|
||||||
{
|
|
||||||
texCoord = vec2((gl_VertexIndex << 1) & 2, gl_VertexIndex & 2);
|
|
||||||
gl_Position = vec4(texCoord * 2.0f + -1.0f, 0.0f, 1.0f);
|
|
||||||
}
|
|
|
@ -1,24 +0,0 @@
|
||||||
#version 450
|
|
||||||
#extension GL_ARB_separate_shader_objects : enable
|
|
||||||
|
|
||||||
layout(location = 0) in vec3 inVertex;
|
|
||||||
layout(location = 0) out vec4 color;
|
|
||||||
|
|
||||||
layout(push_constant) uniform PushConstant
|
|
||||||
{
|
|
||||||
mat4 vpMatrix;
|
|
||||||
} pc;
|
|
||||||
|
|
||||||
layout(binding = 0) uniform UniformBufferObject
|
|
||||||
{
|
|
||||||
mat4 model;
|
|
||||||
} ubo;
|
|
||||||
|
|
||||||
out gl_PerVertex {
|
|
||||||
vec4 gl_Position;
|
|
||||||
};
|
|
||||||
|
|
||||||
void main() {
|
|
||||||
gl_Position = pc.vpMatrix * ubo.model * vec4(inVertex, 1.0);
|
|
||||||
color = vec4(0.0, 0.0, 0.0, 0.5);
|
|
||||||
}
|
|
|
@ -1,30 +0,0 @@
|
||||||
#version 450
|
|
||||||
#extension GL_ARB_separate_shader_objects : enable
|
|
||||||
|
|
||||||
layout(location = 0) in vec3 inVertex;
|
|
||||||
layout(location = 1) in vec2 inTexCoord;
|
|
||||||
|
|
||||||
layout(push_constant) uniform PushConstant
|
|
||||||
{
|
|
||||||
mat4 vpMatrix;
|
|
||||||
} pc;
|
|
||||||
|
|
||||||
layout(set = 1, binding = 0) uniform UniformBufferObject
|
|
||||||
{
|
|
||||||
mat4 model;
|
|
||||||
} ubo;
|
|
||||||
|
|
||||||
layout(location = 0) out vec2 texCoord;
|
|
||||||
layout(location = 1) out vec4 color;
|
|
||||||
layout(location = 2) out float aTreshold;
|
|
||||||
|
|
||||||
out gl_PerVertex {
|
|
||||||
vec4 gl_Position;
|
|
||||||
};
|
|
||||||
|
|
||||||
void main() {
|
|
||||||
gl_Position = pc.vpMatrix * ubo.model * vec4(inVertex, 1.0);
|
|
||||||
texCoord = inTexCoord;
|
|
||||||
color = vec4(1.0, 1.0, 1.0, 1.0);
|
|
||||||
aTreshold = 0.0;
|
|
||||||
}
|
|
|
@ -1,26 +0,0 @@
|
||||||
#version 450
|
|
||||||
#extension GL_ARB_separate_shader_objects : enable
|
|
||||||
|
|
||||||
layout(location = 0) in vec3 inVertex;
|
|
||||||
layout(location = 1) in vec2 inTexCoord;
|
|
||||||
|
|
||||||
layout(push_constant) uniform PushConstant
|
|
||||||
{
|
|
||||||
mat4 mvpMatrix;
|
|
||||||
float alpha;
|
|
||||||
} pc;
|
|
||||||
|
|
||||||
layout(location = 0) out vec2 texCoord;
|
|
||||||
layout(location = 1) out vec4 color;
|
|
||||||
layout(location = 2) out float aTreshold;
|
|
||||||
|
|
||||||
out gl_PerVertex {
|
|
||||||
vec4 gl_Position;
|
|
||||||
};
|
|
||||||
|
|
||||||
void main() {
|
|
||||||
gl_Position = pc.mvpMatrix * vec4(inVertex, 1.0);
|
|
||||||
texCoord = inTexCoord;
|
|
||||||
color = vec4(1.0, 1.0, 1.0, pc.alpha);
|
|
||||||
aTreshold = 0.0666;
|
|
||||||
}
|
|
|
@ -1,55 +0,0 @@
|
||||||
#version 450
|
|
||||||
#extension GL_ARB_separate_shader_objects : enable
|
|
||||||
|
|
||||||
// Underwater screen warp effect similar to what software renderer provides.
|
|
||||||
// Pixel size to simulate lower screen resolutions is used to restore world to full screen size.
|
|
||||||
|
|
||||||
layout(push_constant) uniform PushConstant
|
|
||||||
{
|
|
||||||
layout(offset = 68) float time;
|
|
||||||
layout(offset = 72) float scale;
|
|
||||||
layout(offset = 76) float scrWidth;
|
|
||||||
layout(offset = 80) float scrHeight;
|
|
||||||
layout(offset = 84) float offsetX;
|
|
||||||
layout(offset = 88) float offsetY;
|
|
||||||
layout(offset = 92) float pixelSize;
|
|
||||||
layout(offset = 96) float refdefX;
|
|
||||||
layout(offset = 100) float refdefY;
|
|
||||||
layout(offset = 104) float refdefWidth;
|
|
||||||
layout(offset = 108) float refdefHeight;
|
|
||||||
} pc;
|
|
||||||
|
|
||||||
layout(set = 0, binding = 0) uniform sampler2D sTexture;
|
|
||||||
|
|
||||||
layout(location = 0) out vec4 fragmentColor;
|
|
||||||
|
|
||||||
#define PI 3.1415
|
|
||||||
|
|
||||||
void main()
|
|
||||||
{
|
|
||||||
vec2 scrSize = vec2(pc.scrWidth, pc.scrHeight);
|
|
||||||
vec2 fragCoord = (gl_FragCoord.xy - vec2(pc.offsetX, pc.offsetY));
|
|
||||||
vec2 uv = fragCoord / scrSize;
|
|
||||||
|
|
||||||
float xMin = pc.refdefX;
|
|
||||||
float xMax = pc.refdefX + pc.refdefWidth;
|
|
||||||
float yMin = pc.refdefY;
|
|
||||||
float yMax = pc.refdefY + pc.refdefHeight;
|
|
||||||
|
|
||||||
if (pc.time > 0 && fragCoord.x > xMin && fragCoord.x < xMax && fragCoord.y > yMin && fragCoord.y < yMax)
|
|
||||||
{
|
|
||||||
float sx = pc.scale - abs(pc.scrWidth / 2.0 - fragCoord.x) * 2.0 / pc.scrWidth;
|
|
||||||
float sy = pc.scale - abs(pc.scrHeight / 2.0 - fragCoord.y) * 2.0 / pc.scrHeight;
|
|
||||||
float xShift = 2.0 * pc.time + uv.y * PI * 10;
|
|
||||||
float yShift = 2.0 * pc.time + uv.x * PI * 10;
|
|
||||||
vec2 distortion = vec2(sin(xShift) * sx, sin(yShift) * sy) * 0.00666;
|
|
||||||
|
|
||||||
uv += distortion;
|
|
||||||
}
|
|
||||||
|
|
||||||
uv /= pc.pixelSize;
|
|
||||||
|
|
||||||
uv = clamp(uv * scrSize, vec2(0.0, 0.0), scrSize - vec2(0.5, 0.5));
|
|
||||||
|
|
||||||
fragmentColor = textureLod(sTexture, uv, 0.0);
|
|
||||||
}
|
|
|
@ -1,17 +0,0 @@
|
||||||
#version 450
|
|
||||||
#extension GL_ARB_separate_shader_objects : enable
|
|
||||||
|
|
||||||
out gl_PerVertex {
|
|
||||||
vec4 gl_Position;
|
|
||||||
};
|
|
||||||
|
|
||||||
void main()
|
|
||||||
{
|
|
||||||
vec4 positions[3] = {
|
|
||||||
vec4(-1.0f, -1.0f, 0.0f, 1.0f),
|
|
||||||
vec4(3.0f, -1.0f, 0.0f, 1.0f),
|
|
||||||
vec4(-1.0f, 3.0f, 0.0f, 1.0f)
|
|
||||||
};
|
|
||||||
|
|
||||||
gl_Position = positions[gl_VertexIndex % 3];
|
|
||||||
}
|
|
Loading…
Reference in a new issue