mirror of
https://github.com/id-Software/DOOM-3-BFG.git
synced 2025-03-16 15:41:16 +00:00
1136 lines
27 KiB
C++
1136 lines
27 KiB
C++
/*
|
|
===========================================================================
|
|
|
|
Doom 3 BFG Edition GPL Source Code
|
|
Copyright (C) 1993-2012 id Software LLC, a ZeniMax Media company.
|
|
Copyright (C) 2013-2023 Robert Beckebans
|
|
Copyright (C) 2016-2017 Dustin Land
|
|
Copyright (C) 2022 Stephen Pridham
|
|
|
|
This file is part of the Doom 3 BFG Edition GPL Source Code ("Doom 3 BFG Edition Source Code").
|
|
|
|
Doom 3 BFG Edition Source Code 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 3 of the License, or
|
|
(at your option) any later version.
|
|
|
|
Doom 3 BFG Edition Source Code 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 Doom 3 BFG Edition Source Code. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
In addition, the Doom 3 BFG Edition Source Code is also subject to certain additional terms. You should have received a copy of these additional terms immediately following the terms and conditions of the GNU General Public License which accompanied the Doom 3 BFG Edition Source Code. If not, please request a copy in writing from id Software at the address below.
|
|
|
|
If you have questions concerning this license or the applicable additional terms, you may contact in writing id Software LLC, c/o ZeniMax Media Inc., Suite 120, Rockville, Maryland 20850 USA.
|
|
|
|
===========================================================================
|
|
*/
|
|
#ifndef __RENDERPROGS_H__
|
|
#define __RENDERPROGS_H__
|
|
|
|
|
|
static const int PC_ATTRIB_INDEX_VERTEX = 0;
|
|
static const int PC_ATTRIB_INDEX_NORMAL = 2;
|
|
static const int PC_ATTRIB_INDEX_COLOR = 3;
|
|
static const int PC_ATTRIB_INDEX_COLOR2 = 4;
|
|
static const int PC_ATTRIB_INDEX_ST = 8;
|
|
static const int PC_ATTRIB_INDEX_TANGENT = 9;
|
|
|
|
|
|
/*
|
|
================================================
|
|
vertexMask_t
|
|
|
|
NOTE: There is a PS3 dependency between the bit flag specified here and the vertex
|
|
attribute index and attribute semantic specified in DeclRenderProg.cpp because the
|
|
stored render prog vertexMask is initialized with cellCgbGetVertexConfiguration().
|
|
The ATTRIB_INDEX_ defines are used to make sure the vertexMask_t and attrib assignment
|
|
in DeclRenderProg.cpp are in sync.
|
|
|
|
Even though VERTEX_MASK_XYZ_SHORT and VERTEX_MASK_ST_SHORT are not real attributes,
|
|
they come before the VERTEX_MASK_MORPH to reduce the range of vertex program
|
|
permutations defined by the vertexMask_t bits on the Xbox 360 (see MAX_VERTEX_DECLARATIONS).
|
|
================================================
|
|
*/
|
|
enum vertexMask_t
|
|
{
|
|
VERTEX_MASK_XYZ = BIT( PC_ATTRIB_INDEX_VERTEX ),
|
|
VERTEX_MASK_ST = BIT( PC_ATTRIB_INDEX_ST ),
|
|
VERTEX_MASK_NORMAL = BIT( PC_ATTRIB_INDEX_NORMAL ),
|
|
VERTEX_MASK_COLOR = BIT( PC_ATTRIB_INDEX_COLOR ),
|
|
VERTEX_MASK_TANGENT = BIT( PC_ATTRIB_INDEX_TANGENT ),
|
|
VERTEX_MASK_COLOR2 = BIT( PC_ATTRIB_INDEX_COLOR2 ),
|
|
};
|
|
|
|
|
|
|
|
// This enum list corresponds to the global constant register indecies as defined in global.inc for all
|
|
// shaders. We used a shared pool to keeps things simple. If something changes here then it also
|
|
// needs to change in global.inc and vice versa
|
|
enum renderParm_t
|
|
{
|
|
// For backwards compatibility, do not change the order of the first 17 items
|
|
RENDERPARM_SCREENCORRECTIONFACTOR = 0,
|
|
RENDERPARM_WINDOWCOORD,
|
|
RENDERPARM_DIFFUSEMODIFIER,
|
|
RENDERPARM_SPECULARMODIFIER,
|
|
|
|
RENDERPARM_LOCALLIGHTORIGIN,
|
|
RENDERPARM_LOCALVIEWORIGIN,
|
|
|
|
RENDERPARM_LIGHTPROJECTION_S,
|
|
RENDERPARM_LIGHTPROJECTION_T,
|
|
RENDERPARM_LIGHTPROJECTION_Q,
|
|
RENDERPARM_LIGHTFALLOFF_S,
|
|
|
|
RENDERPARM_BUMPMATRIX_S,
|
|
RENDERPARM_BUMPMATRIX_T,
|
|
|
|
RENDERPARM_DIFFUSEMATRIX_S,
|
|
RENDERPARM_DIFFUSEMATRIX_T,
|
|
|
|
RENDERPARM_SPECULARMATRIX_S,
|
|
RENDERPARM_SPECULARMATRIX_T,
|
|
|
|
RENDERPARM_VERTEXCOLOR_MODULATE,
|
|
RENDERPARM_VERTEXCOLOR_ADD,
|
|
|
|
// The following are new and can be in any order
|
|
|
|
RENDERPARM_COLOR,
|
|
RENDERPARM_VIEWORIGIN,
|
|
RENDERPARM_GLOBALEYEPOS,
|
|
|
|
RENDERPARM_MVPMATRIX_X,
|
|
RENDERPARM_MVPMATRIX_Y,
|
|
RENDERPARM_MVPMATRIX_Z,
|
|
RENDERPARM_MVPMATRIX_W,
|
|
|
|
RENDERPARM_MODELMATRIX_X,
|
|
RENDERPARM_MODELMATRIX_Y,
|
|
RENDERPARM_MODELMATRIX_Z,
|
|
RENDERPARM_MODELMATRIX_W,
|
|
|
|
RENDERPARM_PROJMATRIX_X,
|
|
RENDERPARM_PROJMATRIX_Y,
|
|
RENDERPARM_PROJMATRIX_Z,
|
|
RENDERPARM_PROJMATRIX_W,
|
|
|
|
RENDERPARM_MODELVIEWMATRIX_X,
|
|
RENDERPARM_MODELVIEWMATRIX_Y,
|
|
RENDERPARM_MODELVIEWMATRIX_Z,
|
|
RENDERPARM_MODELVIEWMATRIX_W,
|
|
|
|
RENDERPARM_TEXTUREMATRIX_S,
|
|
RENDERPARM_TEXTUREMATRIX_T,
|
|
|
|
RENDERPARM_TEXGEN_0_S,
|
|
RENDERPARM_TEXGEN_0_T,
|
|
RENDERPARM_TEXGEN_0_Q,
|
|
RENDERPARM_TEXGEN_0_ENABLED,
|
|
|
|
RENDERPARM_TEXGEN_1_S,
|
|
RENDERPARM_TEXGEN_1_T,
|
|
RENDERPARM_TEXGEN_1_Q,
|
|
RENDERPARM_TEXGEN_1_ENABLED,
|
|
|
|
RENDERPARM_WOBBLESKY_X,
|
|
RENDERPARM_WOBBLESKY_Y,
|
|
RENDERPARM_WOBBLESKY_Z,
|
|
|
|
RENDERPARM_OVERBRIGHT,
|
|
RENDERPARM_ENABLE_SKINNING,
|
|
RENDERPARM_ALPHA_TEST,
|
|
|
|
// RB begin
|
|
RENDERPARM_AMBIENT_COLOR,
|
|
|
|
RENDERPARM_GLOBALLIGHTORIGIN,
|
|
RENDERPARM_JITTERTEXSCALE,
|
|
RENDERPARM_JITTERTEXOFFSET,
|
|
|
|
RENDERPARM_PSX_DISTORTIONS,
|
|
|
|
RENDERPARM_CASCADEDISTANCES,
|
|
|
|
RENDERPARM_SHADOW_MATRIX_0_X, // rpShadowMatrices[6 * 4]
|
|
RENDERPARM_SHADOW_MATRIX_0_Y,
|
|
RENDERPARM_SHADOW_MATRIX_0_Z,
|
|
RENDERPARM_SHADOW_MATRIX_0_W,
|
|
|
|
RENDERPARM_SHADOW_MATRIX_1_X,
|
|
RENDERPARM_SHADOW_MATRIX_1_Y,
|
|
RENDERPARM_SHADOW_MATRIX_1_Z,
|
|
RENDERPARM_SHADOW_MATRIX_1_W,
|
|
|
|
RENDERPARM_SHADOW_MATRIX_2_X,
|
|
RENDERPARM_SHADOW_MATRIX_2_Y,
|
|
RENDERPARM_SHADOW_MATRIX_2_Z,
|
|
RENDERPARM_SHADOW_MATRIX_2_W,
|
|
|
|
RENDERPARM_SHADOW_MATRIX_3_X,
|
|
RENDERPARM_SHADOW_MATRIX_3_Y,
|
|
RENDERPARM_SHADOW_MATRIX_3_Z,
|
|
RENDERPARM_SHADOW_MATRIX_3_W,
|
|
|
|
RENDERPARM_SHADOW_MATRIX_4_X,
|
|
RENDERPARM_SHADOW_MATRIX_4_Y,
|
|
RENDERPARM_SHADOW_MATRIX_4_Z,
|
|
RENDERPARM_SHADOW_MATRIX_4_W,
|
|
|
|
RENDERPARM_SHADOW_MATRIX_5_X,
|
|
RENDERPARM_SHADOW_MATRIX_5_Y,
|
|
RENDERPARM_SHADOW_MATRIX_5_Z,
|
|
RENDERPARM_SHADOW_MATRIX_5_W,
|
|
|
|
RENDERPARM_SHADOW_ATLAS_OFFSET_0, // rpShadowAtlasOffsets[6]
|
|
RENDERPARM_SHADOW_ATLAS_OFFSET_1,
|
|
RENDERPARM_SHADOW_ATLAS_OFFSET_2,
|
|
RENDERPARM_SHADOW_ATLAS_OFFSET_3,
|
|
RENDERPARM_SHADOW_ATLAS_OFFSET_4,
|
|
RENDERPARM_SHADOW_ATLAS_OFFSET_5,
|
|
|
|
RENDERPARM_USER0,
|
|
RENDERPARM_USER1,
|
|
RENDERPARM_USER2,
|
|
RENDERPARM_USER3,
|
|
RENDERPARM_USER4,
|
|
RENDERPARM_USER5,
|
|
RENDERPARM_USER6,
|
|
RENDERPARM_USER7,
|
|
// RB end
|
|
|
|
RENDERPARM_TOTAL,
|
|
};
|
|
|
|
enum rpStage_t
|
|
{
|
|
SHADER_STAGE_VERTEX = BIT( 0 ),
|
|
SHADER_STAGE_FRAGMENT = BIT( 1 ),
|
|
SHADER_STAGE_COMPUTE = BIT( 2 ), // RB: for future use
|
|
|
|
SHADER_STAGE_DEFAULT = SHADER_STAGE_VERTEX | SHADER_STAGE_FRAGMENT
|
|
};
|
|
|
|
enum rpBinding_t
|
|
{
|
|
BINDING_TYPE_UNIFORM_BUFFER,
|
|
BINDING_TYPE_SAMPLER,
|
|
BINDING_TYPE_MAX
|
|
};
|
|
|
|
struct ShaderBlob
|
|
{
|
|
void* data = nullptr;
|
|
size_t size = 0;
|
|
};
|
|
|
|
#define VERTEX_UNIFORM_ARRAY_NAME "_va_"
|
|
#define FRAGMENT_UNIFORM_ARRAY_NAME "_fa_"
|
|
|
|
static const int AT_VS_IN = BIT( 1 );
|
|
static const int AT_VS_OUT = BIT( 2 );
|
|
static const int AT_PS_IN = BIT( 3 );
|
|
static const int AT_PS_OUT = BIT( 4 );
|
|
static const int AT_VS_OUT_RESERVED = BIT( 5 );
|
|
static const int AT_PS_IN_RESERVED = BIT( 6 );
|
|
static const int AT_PS_OUT_RESERVED = BIT( 7 );
|
|
|
|
struct attribInfo_t
|
|
{
|
|
const char* type;
|
|
const char* name;
|
|
const char* semantic;
|
|
const char* glsl;
|
|
int bind;
|
|
int flags;
|
|
int vertexMask;
|
|
};
|
|
|
|
extern attribInfo_t attribsPC[];
|
|
|
|
// Shader macros are used to pick which permutation of a shader to load from a ShaderBlob
|
|
// binary file.
|
|
struct shaderMacro_t
|
|
{
|
|
idStr name;
|
|
idStr definition;
|
|
|
|
shaderMacro_t()
|
|
: name()
|
|
, definition()
|
|
{
|
|
}
|
|
|
|
shaderMacro_t( const idStr& _name, const idStr& _definition )
|
|
: name( _name )
|
|
, definition( _definition )
|
|
{ }
|
|
};
|
|
|
|
struct programInfo_t
|
|
{
|
|
int bindingLayoutType;
|
|
nvrhi::ShaderHandle vs;
|
|
nvrhi::ShaderHandle ps;
|
|
nvrhi::ShaderHandle cs;
|
|
nvrhi::InputLayoutHandle inputLayout;
|
|
idStaticList<nvrhi::BindingLayoutHandle, nvrhi::c_MaxBindingLayouts>* bindingLayouts;
|
|
};
|
|
|
|
enum
|
|
{
|
|
BUILTIN_GUI,
|
|
BUILTIN_COLOR,
|
|
// RB begin
|
|
BUILTIN_COLOR_SKINNED,
|
|
BUILTIN_VERTEX_COLOR,
|
|
|
|
BUILTIN_AMBIENT_LIGHTING_IBL,
|
|
BUILTIN_AMBIENT_LIGHTING_IBL_SKINNED,
|
|
BUILTIN_AMBIENT_LIGHTING_IBL_PBR,
|
|
BUILTIN_AMBIENT_LIGHTING_IBL_PBR_SKINNED,
|
|
|
|
BUILTIN_AMBIENT_LIGHTGRID_IBL,
|
|
BUILTIN_AMBIENT_LIGHTGRID_IBL_SKINNED,
|
|
BUILTIN_AMBIENT_LIGHTGRID_IBL_PBR,
|
|
BUILTIN_AMBIENT_LIGHTGRID_IBL_PBR_SKINNED,
|
|
|
|
BUILTIN_SMALL_GEOMETRY_BUFFER,
|
|
BUILTIN_SMALL_GEOMETRY_BUFFER_SKINNED,
|
|
// RB end
|
|
BUILTIN_TEXTURED,
|
|
BUILTIN_TEXTURE_VERTEXCOLOR,
|
|
BUILTIN_TEXTURE_VERTEXCOLOR_SRGB,
|
|
BUILTIN_TEXTURE_VERTEXCOLOR_SKINNED,
|
|
BUILTIN_TEXTURE_TEXGEN_VERTEXCOLOR,
|
|
|
|
BUILTIN_INTERACTION,
|
|
BUILTIN_INTERACTION_SKINNED,
|
|
BUILTIN_INTERACTION_AMBIENT,
|
|
BUILTIN_INTERACTION_AMBIENT_SKINNED,
|
|
|
|
// RB begin
|
|
BUILTIN_PBR_INTERACTION,
|
|
BUILTIN_PBR_INTERACTION_SKINNED,
|
|
BUILTIN_PBR_INTERACTION_AMBIENT,
|
|
BUILTIN_PBR_INTERACTION_AMBIENT_SKINNED,
|
|
|
|
BUILTIN_INTERACTION_SHADOW_MAPPING_SPOT,
|
|
BUILTIN_INTERACTION_SHADOW_MAPPING_SPOT_SKINNED,
|
|
BUILTIN_INTERACTION_SHADOW_MAPPING_POINT,
|
|
BUILTIN_INTERACTION_SHADOW_MAPPING_POINT_SKINNED,
|
|
BUILTIN_INTERACTION_SHADOW_MAPPING_PARALLEL,
|
|
BUILTIN_INTERACTION_SHADOW_MAPPING_PARALLEL_SKINNED,
|
|
|
|
BUILTIN_PBR_INTERACTION_SHADOW_MAPPING_SPOT,
|
|
BUILTIN_PBR_INTERACTION_SHADOW_MAPPING_SPOT_SKINNED,
|
|
BUILTIN_PBR_INTERACTION_SHADOW_MAPPING_POINT,
|
|
BUILTIN_PBR_INTERACTION_SHADOW_MAPPING_POINT_SKINNED,
|
|
BUILTIN_PBR_INTERACTION_SHADOW_MAPPING_PARALLEL,
|
|
BUILTIN_PBR_INTERACTION_SHADOW_MAPPING_PARALLEL_SKINNED,
|
|
|
|
BUILTIN_INTERACTION_SHADOW_ATLAS_SPOT,
|
|
BUILTIN_INTERACTION_SHADOW_ATLAS_SPOT_SKINNED,
|
|
BUILTIN_INTERACTION_SHADOW_ATLAS_POINT,
|
|
BUILTIN_INTERACTION_SHADOW_ATLAS_POINT_SKINNED,
|
|
BUILTIN_INTERACTION_SHADOW_ATLAS_PARALLEL,
|
|
BUILTIN_INTERACTION_SHADOW_ATLAS_PARALLEL_SKINNED,
|
|
|
|
BUILTIN_PBR_INTERACTION_SHADOW_ATLAS_SPOT,
|
|
BUILTIN_PBR_INTERACTION_SHADOW_ATLAS_SPOT_SKINNED,
|
|
BUILTIN_PBR_INTERACTION_SHADOW_ATLAS_POINT,
|
|
BUILTIN_PBR_INTERACTION_SHADOW_ATLAS_POINT_SKINNED,
|
|
BUILTIN_PBR_INTERACTION_SHADOW_ATLAS_PARALLEL,
|
|
BUILTIN_PBR_INTERACTION_SHADOW_ATLAS_PARALLEL_SKINNED,
|
|
|
|
BUILTIN_DEBUG_LIGHTGRID,
|
|
BUILTIN_DEBUG_LIGHTGRID_SKINNED,
|
|
|
|
BUILTIN_DEBUG_OCTAHEDRON,
|
|
BUILTIN_DEBUG_OCTAHEDRON_SKINNED,
|
|
// RB end
|
|
BUILTIN_ENVIRONMENT,
|
|
BUILTIN_ENVIRONMENT_SKINNED,
|
|
BUILTIN_BUMPY_ENVIRONMENT,
|
|
BUILTIN_BUMPY_ENVIRONMENT_SKINNED,
|
|
|
|
BUILTIN_DEPTH,
|
|
BUILTIN_DEPTH_SKINNED,
|
|
|
|
BUILTIN_BLENDLIGHT,
|
|
BUILTIN_BLENDLIGHT_SKINNED,
|
|
BUILTIN_FOG,
|
|
BUILTIN_FOG_SKINNED,
|
|
BUILTIN_SKYBOX,
|
|
BUILTIN_WOBBLESKY,
|
|
BUILTIN_POSTPROCESS,
|
|
// RB begin
|
|
BUILTIN_POSTPROCESS_RETRO_2BIT, // CGA, Gameboy, cool for Gamejams
|
|
BUILTIN_POSTPROCESS_RETRO_C64, // Commodore 64
|
|
BUILTIN_POSTPROCESS_RETRO_CPC, // Amstrad 6128
|
|
BUILTIN_POSTPROCESS_RETRO_NES, // NES
|
|
BUILTIN_POSTPROCESS_RETRO_GENESIS, // Sega Genesis / Megadrive
|
|
BUILTIN_POSTPROCESS_RETRO_PSX, // Sony Playstation 1
|
|
BUILTIN_CRT_MATTIAS,
|
|
BUILTIN_CRT_NUPIXIE,
|
|
BUILTIN_CRT_EASYMODE,
|
|
BUILTIN_SCREEN,
|
|
BUILTIN_TONEMAP,
|
|
BUILTIN_BRIGHTPASS,
|
|
BUILTIN_HDR_GLARE_CHROMATIC,
|
|
BUILTIN_HDR_DEBUG,
|
|
|
|
BUILTIN_SMAA_EDGE_DETECTION,
|
|
BUILTIN_SMAA_BLENDING_WEIGHT_CALCULATION,
|
|
BUILTIN_SMAA_NEIGHBORHOOD_BLENDING,
|
|
|
|
BUILTIN_TAA_MOTION_VECTORS,
|
|
BUILTIN_TAA_RESOLVE,
|
|
BUILTIN_TAA_RESOLVE_MSAA_2X,
|
|
BUILTIN_TAA_RESOLVE_MSAA_4X,
|
|
BUILTIN_TAA_RESOLVE_MSAA_8X,
|
|
|
|
BUILTIN_AMBIENT_OCCLUSION,
|
|
BUILTIN_AMBIENT_OCCLUSION_AND_OUTPUT,
|
|
BUILTIN_AMBIENT_OCCLUSION_BLUR,
|
|
BUILTIN_AMBIENT_OCCLUSION_BLUR_AND_OUTPUT,
|
|
|
|
BUILTIN_DEEP_GBUFFER_RADIOSITY_SSGI,
|
|
BUILTIN_DEEP_GBUFFER_RADIOSITY_BLUR,
|
|
BUILTIN_DEEP_GBUFFER_RADIOSITY_BLUR_AND_OUTPUT,
|
|
// RB end
|
|
BUILTIN_STEREO_DEGHOST,
|
|
BUILTIN_STEREO_WARP,
|
|
BUILTIN_BINK,
|
|
BUILTIN_BINK_SRGB, // SRS - Added Bink shader without sRGB to linear conversion for testVideo cmd
|
|
BUILTIN_BINK_GUI,
|
|
BUILTIN_STEREO_INTERLACE,
|
|
BUILTIN_MOTION_BLUR,
|
|
|
|
BUILTIN_DEBUG_SHADOWMAP,
|
|
|
|
// SP Begin
|
|
BUILTIN_BLIT,
|
|
BUILTIN_RECT,
|
|
BUILTIN_TONEMAPPING,
|
|
BUILTIN_TONEMAPPING_TEX_ARRAY,
|
|
BUILTIN_HISTOGRAM_CS,
|
|
BUILTIN_HISTOGRAM_TEX_ARRAY_CS,
|
|
BUILTIN_EXPOSURE_CS,
|
|
// SP End
|
|
|
|
MAX_BUILTINS
|
|
};
|
|
|
|
/*
|
|
================================================================================================
|
|
idRenderProgManager
|
|
================================================================================================
|
|
*/
|
|
class idRenderProgManager
|
|
{
|
|
public:
|
|
idRenderProgManager();
|
|
virtual ~idRenderProgManager();
|
|
|
|
void Init( nvrhi::IDevice* device );
|
|
void Shutdown();
|
|
|
|
void StartFrame();
|
|
|
|
void SetRenderParm( renderParm_t rp, const float value[4] );
|
|
void SetRenderParms( renderParm_t rp, const float values[], int numValues );
|
|
|
|
int FindShader( const char* name, rpStage_t stage );
|
|
int FindShader( const char* name, rpStage_t stage, const char* nameOutSuffix, uint32 features, bool builtin, vertexLayoutType_t vertexLayout = LAYOUT_DRAW_VERT );
|
|
int FindShader( const char* name, rpStage_t stage, const char* nameOutSuffix, const idList<shaderMacro_t>& macros, bool builtin, vertexLayoutType_t vertexLayout = LAYOUT_DRAW_VERT );
|
|
|
|
nvrhi::ShaderHandle GetShader( int index );
|
|
|
|
programInfo_t GetProgramInfo( int index );
|
|
|
|
int CurrentProgram() const
|
|
{
|
|
return currentIndex;
|
|
}
|
|
|
|
void BindProgram( int progIndex );
|
|
|
|
void BindShader_GUI()
|
|
{
|
|
BindShader_Builtin( BUILTIN_GUI );
|
|
}
|
|
|
|
void BindShader_Color()
|
|
{
|
|
BindShader_Builtin( BUILTIN_COLOR );
|
|
}
|
|
|
|
// RB begin
|
|
void BindShader_ColorSkinned()
|
|
{
|
|
BindShader_Builtin( BUILTIN_COLOR_SKINNED );
|
|
}
|
|
|
|
void BindShader_VertexColor()
|
|
{
|
|
BindShader_Builtin( BUILTIN_VERTEX_COLOR );
|
|
}
|
|
|
|
void BindShader_ImageBasedLighting()
|
|
{
|
|
BindShader_Builtin( BUILTIN_AMBIENT_LIGHTING_IBL );
|
|
}
|
|
|
|
void BindShader_ImageBasedLightingSkinned()
|
|
{
|
|
BindShader_Builtin( BUILTIN_AMBIENT_LIGHTING_IBL_SKINNED );
|
|
}
|
|
|
|
void BindShader_ImageBasedLighting_PBR()
|
|
{
|
|
BindShader_Builtin( BUILTIN_AMBIENT_LIGHTING_IBL_PBR );
|
|
}
|
|
|
|
void BindShader_ImageBasedLightingSkinned_PBR()
|
|
{
|
|
BindShader_Builtin( BUILTIN_AMBIENT_LIGHTING_IBL_PBR_SKINNED );
|
|
}
|
|
|
|
|
|
void BindShader_ImageBasedLightGrid()
|
|
{
|
|
BindShader_Builtin( BUILTIN_AMBIENT_LIGHTGRID_IBL );
|
|
}
|
|
|
|
void BindShader_ImageBasedLightGridSkinned()
|
|
{
|
|
BindShader_Builtin( BUILTIN_AMBIENT_LIGHTGRID_IBL_SKINNED );
|
|
}
|
|
|
|
void BindShader_ImageBasedLightGrid_PBR()
|
|
{
|
|
BindShader_Builtin( BUILTIN_AMBIENT_LIGHTGRID_IBL_PBR );
|
|
}
|
|
|
|
void BindShader_ImageBasedLightGridSkinned_PBR()
|
|
{
|
|
BindShader_Builtin( BUILTIN_AMBIENT_LIGHTGRID_IBL_PBR_SKINNED );
|
|
}
|
|
|
|
|
|
void BindShader_SmallGeometryBuffer()
|
|
{
|
|
BindShader_Builtin( BUILTIN_SMALL_GEOMETRY_BUFFER );
|
|
}
|
|
|
|
void BindShader_SmallGeometryBufferSkinned()
|
|
{
|
|
BindShader_Builtin( BUILTIN_SMALL_GEOMETRY_BUFFER_SKINNED );
|
|
}
|
|
// RB end
|
|
|
|
void BindShader_Texture()
|
|
{
|
|
BindShader_Builtin( BUILTIN_TEXTURED );
|
|
}
|
|
|
|
void BindShader_TextureVertexColor()
|
|
{
|
|
BindShader_Builtin( BUILTIN_TEXTURE_VERTEXCOLOR );
|
|
}
|
|
|
|
void BindShader_TextureVertexColor_sRGB()
|
|
{
|
|
BindShader_Builtin( BUILTIN_TEXTURE_VERTEXCOLOR_SRGB );
|
|
}
|
|
|
|
void BindShader_TextureVertexColorSkinned()
|
|
{
|
|
BindShader_Builtin( BUILTIN_TEXTURE_VERTEXCOLOR_SKINNED );
|
|
}
|
|
|
|
void BindShader_TextureTexGenVertexColor()
|
|
{
|
|
BindShader_Builtin( BUILTIN_TEXTURE_TEXGEN_VERTEXCOLOR );
|
|
}
|
|
|
|
void BindShader_Interaction()
|
|
{
|
|
BindShader_Builtin( BUILTIN_INTERACTION );
|
|
}
|
|
|
|
void BindShader_InteractionSkinned()
|
|
{
|
|
BindShader_Builtin( BUILTIN_INTERACTION_SKINNED );
|
|
}
|
|
|
|
void BindShader_InteractionAmbient()
|
|
{
|
|
BindShader_Builtin( BUILTIN_INTERACTION_AMBIENT );
|
|
}
|
|
|
|
void BindShader_InteractionAmbientSkinned()
|
|
{
|
|
BindShader_Builtin( BUILTIN_INTERACTION_AMBIENT_SKINNED );
|
|
}
|
|
|
|
// PBR variantes
|
|
|
|
void BindShader_PBR_Interaction()
|
|
{
|
|
BindShader_Builtin( BUILTIN_PBR_INTERACTION );
|
|
}
|
|
|
|
void BindShader_PBR_InteractionSkinned()
|
|
{
|
|
BindShader_Builtin( BUILTIN_PBR_INTERACTION_SKINNED );
|
|
}
|
|
|
|
void BindShader_PBR_InteractionAmbient()
|
|
{
|
|
BindShader_Builtin( BUILTIN_PBR_INTERACTION_AMBIENT );
|
|
}
|
|
|
|
void BindShader_PBR_InteractionAmbientSkinned()
|
|
{
|
|
BindShader_Builtin( BUILTIN_PBR_INTERACTION_AMBIENT_SKINNED );
|
|
}
|
|
|
|
//
|
|
// regular shadow mapping
|
|
//
|
|
|
|
void BindShader_Interaction_ShadowMapping_Spot()
|
|
{
|
|
BindShader_Builtin( BUILTIN_INTERACTION_SHADOW_MAPPING_SPOT );
|
|
}
|
|
|
|
void BindShader_Interaction_ShadowMapping_Spot_Skinned()
|
|
{
|
|
BindShader_Builtin( BUILTIN_INTERACTION_SHADOW_MAPPING_SPOT_SKINNED );
|
|
}
|
|
|
|
void BindShader_Interaction_ShadowMapping_Point()
|
|
{
|
|
BindShader_Builtin( BUILTIN_INTERACTION_SHADOW_MAPPING_POINT );
|
|
}
|
|
|
|
void BindShader_Interaction_ShadowMapping_Point_Skinned()
|
|
{
|
|
BindShader_Builtin( BUILTIN_INTERACTION_SHADOW_MAPPING_POINT_SKINNED );
|
|
}
|
|
|
|
void BindShader_Interaction_ShadowMapping_Parallel()
|
|
{
|
|
BindShader_Builtin( BUILTIN_INTERACTION_SHADOW_MAPPING_PARALLEL );
|
|
}
|
|
|
|
void BindShader_Interaction_ShadowMapping_Parallel_Skinned()
|
|
{
|
|
BindShader_Builtin( BUILTIN_INTERACTION_SHADOW_MAPPING_PARALLEL_SKINNED );
|
|
}
|
|
|
|
void BindShader_PBR_Interaction_ShadowMapping_Spot()
|
|
{
|
|
BindShader_Builtin( BUILTIN_PBR_INTERACTION_SHADOW_MAPPING_SPOT );
|
|
}
|
|
|
|
void BindShader_PBR_Interaction_ShadowMapping_Spot_Skinned()
|
|
{
|
|
BindShader_Builtin( BUILTIN_PBR_INTERACTION_SHADOW_MAPPING_SPOT_SKINNED );
|
|
}
|
|
|
|
void BindShader_PBR_Interaction_ShadowMapping_Point()
|
|
{
|
|
BindShader_Builtin( BUILTIN_PBR_INTERACTION_SHADOW_MAPPING_POINT );
|
|
}
|
|
|
|
void BindShader_PBR_Interaction_ShadowMapping_Point_Skinned()
|
|
{
|
|
BindShader_Builtin( BUILTIN_PBR_INTERACTION_SHADOW_MAPPING_POINT_SKINNED );
|
|
}
|
|
|
|
void BindShader_PBR_Interaction_ShadowMapping_Parallel()
|
|
{
|
|
BindShader_Builtin( BUILTIN_PBR_INTERACTION_SHADOW_MAPPING_PARALLEL );
|
|
}
|
|
|
|
void BindShader_PBR_Interaction_ShadowMapping_Parallel_Skinned()
|
|
{
|
|
BindShader_Builtin( BUILTIN_PBR_INTERACTION_SHADOW_MAPPING_PARALLEL_SKINNED );
|
|
}
|
|
|
|
//
|
|
// shadow mapping using a big atlas
|
|
//
|
|
|
|
void BindShader_Interaction_ShadowAtlas_Spot()
|
|
{
|
|
BindShader_Builtin( BUILTIN_INTERACTION_SHADOW_ATLAS_SPOT );
|
|
}
|
|
|
|
void BindShader_Interaction_ShadowAtlas_Spot_Skinned()
|
|
{
|
|
BindShader_Builtin( BUILTIN_INTERACTION_SHADOW_ATLAS_SPOT_SKINNED );
|
|
}
|
|
|
|
void BindShader_Interaction_ShadowAtlas_Point()
|
|
{
|
|
BindShader_Builtin( BUILTIN_INTERACTION_SHADOW_ATLAS_POINT );
|
|
}
|
|
|
|
void BindShader_Interaction_ShadowAtlas_Point_Skinned()
|
|
{
|
|
BindShader_Builtin( BUILTIN_INTERACTION_SHADOW_ATLAS_POINT_SKINNED );
|
|
}
|
|
|
|
void BindShader_Interaction_ShadowAtlas_Parallel()
|
|
{
|
|
BindShader_Builtin( BUILTIN_INTERACTION_SHADOW_ATLAS_PARALLEL );
|
|
}
|
|
|
|
void BindShader_Interaction_ShadowAtlas_Parallel_Skinned()
|
|
{
|
|
BindShader_Builtin( BUILTIN_INTERACTION_SHADOW_ATLAS_PARALLEL_SKINNED );
|
|
}
|
|
|
|
void BindShader_PBR_Interaction_ShadowAtlas_Spot()
|
|
{
|
|
BindShader_Builtin( BUILTIN_PBR_INTERACTION_SHADOW_ATLAS_SPOT );
|
|
}
|
|
|
|
void BindShader_PBR_Interaction_ShadowAtlas_Spot_Skinned()
|
|
{
|
|
BindShader_Builtin( BUILTIN_PBR_INTERACTION_SHADOW_ATLAS_SPOT_SKINNED );
|
|
}
|
|
|
|
void BindShader_PBR_Interaction_ShadowAtlas_Point()
|
|
{
|
|
BindShader_Builtin( BUILTIN_PBR_INTERACTION_SHADOW_ATLAS_POINT );
|
|
}
|
|
|
|
void BindShader_PBR_Interaction_ShadowAtlas_Point_Skinned()
|
|
{
|
|
BindShader_Builtin( BUILTIN_PBR_INTERACTION_SHADOW_ATLAS_POINT_SKINNED );
|
|
}
|
|
|
|
void BindShader_PBR_Interaction_ShadowAtlas_Parallel()
|
|
{
|
|
BindShader_Builtin( BUILTIN_PBR_INTERACTION_SHADOW_ATLAS_PARALLEL );
|
|
}
|
|
|
|
void BindShader_PBR_Interaction_ShadowAtlas_Parallel_Skinned()
|
|
{
|
|
BindShader_Builtin( BUILTIN_PBR_INTERACTION_SHADOW_ATLAS_PARALLEL_SKINNED );
|
|
}
|
|
|
|
//
|
|
// debug tools
|
|
//
|
|
|
|
void BindShader_DebugLightGrid()
|
|
{
|
|
BindShader_Builtin( BUILTIN_DEBUG_LIGHTGRID );
|
|
}
|
|
|
|
void BindShader_DebugLightGridSkinned()
|
|
{
|
|
BindShader_Builtin( BUILTIN_DEBUG_LIGHTGRID_SKINNED );
|
|
}
|
|
|
|
void BindShader_DebugOctahedron()
|
|
{
|
|
BindShader_Builtin( BUILTIN_DEBUG_OCTAHEDRON );
|
|
}
|
|
|
|
void BindShader_DebugOctahedronSkinned()
|
|
{
|
|
BindShader_Builtin( BUILTIN_DEBUG_OCTAHEDRON_SKINNED );
|
|
}
|
|
// RB end
|
|
|
|
void BindShader_Environment()
|
|
{
|
|
BindShader_Builtin( BUILTIN_ENVIRONMENT );
|
|
}
|
|
|
|
void BindShader_EnvironmentSkinned()
|
|
{
|
|
BindShader_Builtin( BUILTIN_ENVIRONMENT_SKINNED );
|
|
}
|
|
|
|
void BindShader_BumpyEnvironment()
|
|
{
|
|
BindShader_Builtin( BUILTIN_BUMPY_ENVIRONMENT );
|
|
}
|
|
|
|
void BindShader_BumpyEnvironmentSkinned()
|
|
{
|
|
BindShader_Builtin( BUILTIN_BUMPY_ENVIRONMENT_SKINNED );
|
|
}
|
|
|
|
void BindShader_Depth()
|
|
{
|
|
BindShader_Builtin( BUILTIN_DEPTH );
|
|
}
|
|
|
|
void BindShader_DepthSkinned()
|
|
{
|
|
BindShader_Builtin( BUILTIN_DEPTH_SKINNED );
|
|
}
|
|
|
|
void BindShader_BlendLight()
|
|
{
|
|
BindShader_Builtin( BUILTIN_BLENDLIGHT );
|
|
}
|
|
|
|
void BindShader_Fog()
|
|
{
|
|
BindShader_Builtin( BUILTIN_FOG );
|
|
}
|
|
|
|
void BindShader_FogSkinned()
|
|
{
|
|
BindShader_Builtin( BUILTIN_FOG_SKINNED );
|
|
}
|
|
|
|
void BindShader_SkyBox()
|
|
{
|
|
BindShader_Builtin( BUILTIN_SKYBOX );
|
|
}
|
|
|
|
void BindShader_WobbleSky()
|
|
{
|
|
BindShader_Builtin( BUILTIN_WOBBLESKY );
|
|
}
|
|
|
|
void BindShader_StereoDeGhost()
|
|
{
|
|
BindShader_Builtin( BUILTIN_STEREO_DEGHOST );
|
|
}
|
|
|
|
void BindShader_StereoWarp()
|
|
{
|
|
BindShader_Builtin( BUILTIN_STEREO_WARP );
|
|
}
|
|
|
|
void BindShader_StereoInterlace()
|
|
{
|
|
BindShader_Builtin( BUILTIN_STEREO_INTERLACE );
|
|
}
|
|
|
|
void BindShader_PostProcess()
|
|
{
|
|
BindShader_Builtin( BUILTIN_POSTPROCESS );
|
|
}
|
|
|
|
void BindShader_PostProcess_RetroC64()
|
|
{
|
|
BindShader_Builtin( BUILTIN_POSTPROCESS_RETRO_C64 );
|
|
}
|
|
|
|
void BindShader_PostProcess_RetroCPC()
|
|
{
|
|
BindShader_Builtin( BUILTIN_POSTPROCESS_RETRO_CPC );
|
|
}
|
|
|
|
void BindShader_PostProcess_Retro2Bit()
|
|
{
|
|
BindShader_Builtin( BUILTIN_POSTPROCESS_RETRO_2BIT );
|
|
}
|
|
|
|
void BindShader_PostProcess_RetroNES()
|
|
{
|
|
BindShader_Builtin( BUILTIN_POSTPROCESS_RETRO_NES );
|
|
}
|
|
|
|
void BindShader_PostProcess_RetroGenesis()
|
|
{
|
|
BindShader_Builtin( BUILTIN_POSTPROCESS_RETRO_GENESIS );
|
|
}
|
|
|
|
void BindShader_PostProcess_RetroPSX()
|
|
{
|
|
BindShader_Builtin( BUILTIN_POSTPROCESS_RETRO_PSX );
|
|
}
|
|
|
|
void BindShader_CrtMattias()
|
|
{
|
|
BindShader_Builtin( BUILTIN_CRT_MATTIAS );
|
|
}
|
|
|
|
void BindShader_CrtNewPixie()
|
|
{
|
|
BindShader_Builtin( BUILTIN_CRT_NUPIXIE );
|
|
}
|
|
|
|
void BindShader_CrtEasyMode()
|
|
{
|
|
BindShader_Builtin( BUILTIN_CRT_EASYMODE );
|
|
}
|
|
|
|
void BindShader_Screen()
|
|
{
|
|
BindShader_Builtin( BUILTIN_SCREEN );
|
|
}
|
|
|
|
void BindShader_Tonemap()
|
|
{
|
|
BindShader_Builtin( BUILTIN_TONEMAP );
|
|
}
|
|
|
|
void BindShader_Brightpass()
|
|
{
|
|
BindShader_Builtin( BUILTIN_BRIGHTPASS );
|
|
}
|
|
|
|
void BindShader_HDRGlareChromatic()
|
|
{
|
|
BindShader_Builtin( BUILTIN_HDR_GLARE_CHROMATIC );
|
|
}
|
|
|
|
void BindShader_HDRDebug()
|
|
{
|
|
BindShader_Builtin( BUILTIN_HDR_DEBUG );
|
|
}
|
|
|
|
void BindShader_SMAA_EdgeDetection()
|
|
{
|
|
BindShader_Builtin( BUILTIN_SMAA_EDGE_DETECTION );
|
|
}
|
|
|
|
void BindShader_SMAA_BlendingWeightCalculation()
|
|
{
|
|
BindShader_Builtin( BUILTIN_SMAA_BLENDING_WEIGHT_CALCULATION );
|
|
}
|
|
|
|
void BindShader_SMAA_NeighborhoodBlending()
|
|
{
|
|
BindShader_Builtin( BUILTIN_SMAA_NEIGHBORHOOD_BLENDING );
|
|
}
|
|
|
|
void BindShader_AmbientOcclusion()
|
|
{
|
|
BindShader_Builtin( BUILTIN_AMBIENT_OCCLUSION );
|
|
}
|
|
|
|
void BindShader_AmbientOcclusionAndOutput()
|
|
{
|
|
BindShader_Builtin( BUILTIN_AMBIENT_OCCLUSION_AND_OUTPUT );
|
|
}
|
|
|
|
void BindShader_AmbientOcclusionBlur()
|
|
{
|
|
BindShader_Builtin( BUILTIN_AMBIENT_OCCLUSION_BLUR );
|
|
}
|
|
|
|
void BindShader_AmbientOcclusionBlurAndOutput()
|
|
{
|
|
BindShader_Builtin( BUILTIN_AMBIENT_OCCLUSION_BLUR_AND_OUTPUT );
|
|
}
|
|
|
|
void BindShader_DeepGBufferRadiosity()
|
|
{
|
|
BindShader_Builtin( BUILTIN_DEEP_GBUFFER_RADIOSITY_SSGI );
|
|
}
|
|
|
|
void BindShader_DeepGBufferRadiosityBlur()
|
|
{
|
|
BindShader_Builtin( BUILTIN_DEEP_GBUFFER_RADIOSITY_BLUR );
|
|
}
|
|
|
|
void BindShader_DeepGBufferRadiosityBlurAndOutput()
|
|
{
|
|
BindShader_Builtin( BUILTIN_DEEP_GBUFFER_RADIOSITY_BLUR_AND_OUTPUT );
|
|
}
|
|
|
|
void BindShader_Bink()
|
|
{
|
|
BindShader_Builtin( BUILTIN_BINK );
|
|
}
|
|
|
|
void BindShader_Bink_sRGB()
|
|
{
|
|
BindShader_Builtin( BUILTIN_BINK_SRGB );
|
|
}
|
|
|
|
void BindShader_BinkGUI()
|
|
{
|
|
BindShader_Builtin( BUILTIN_BINK_GUI );
|
|
}
|
|
|
|
void BindShader_MotionBlur()
|
|
{
|
|
BindShader_Builtin( BUILTIN_MOTION_BLUR );
|
|
}
|
|
|
|
void BindShader_MotionVectors()
|
|
{
|
|
BindShader_Builtin( BUILTIN_TAA_MOTION_VECTORS );
|
|
}
|
|
|
|
void BindShader_DebugShadowMap()
|
|
{
|
|
BindShader_Builtin( BUILTIN_DEBUG_SHADOWMAP );
|
|
}
|
|
// RB end
|
|
|
|
// the joints buffer should only be bound for vertex programs that use joints
|
|
bool ShaderUsesJoints() const
|
|
{
|
|
return renderProgs[currentIndex].usesJoints;
|
|
}
|
|
|
|
// the rpEnableSkinning render parm should only be set for vertex programs that use it
|
|
bool ShaderHasOptionalSkinning() const
|
|
{
|
|
//#if defined( USE_NVRHI )
|
|
// FIXME
|
|
return false;
|
|
//#else
|
|
// return renderProgs[current].optionalSkinning;
|
|
//#endif
|
|
}
|
|
|
|
// unbind the currently bound render program
|
|
void Unbind();
|
|
|
|
// RB begin
|
|
bool IsShaderBound() const;
|
|
// RB end
|
|
|
|
// this should only be called via the reload shader console command
|
|
void LoadAllShaders();
|
|
void KillAllShaders();
|
|
|
|
static const int MAX_GLSL_USER_PARMS = 8;
|
|
const char* GetGLSLParmName( int rp ) const;
|
|
|
|
void SetUniformValue( const renderParm_t rp, const float value[4] );
|
|
void CommitUniforms( uint64 stateBits );
|
|
int FindProgram( const char* name, int vIndex, int fIndex, bindingLayoutType_t bindingType = BINDING_LAYOUT_DEFAULT );
|
|
void ZeroUniforms();
|
|
int UniformSize();
|
|
|
|
bool CommitConstantBuffer( nvrhi::ICommandList* commandList, bool bindingLayoutTypeChanged );
|
|
|
|
ID_INLINE nvrhi::IBuffer* ConstantBuffer()
|
|
{
|
|
return constantBuffer;//[BindingLayoutType()];
|
|
}
|
|
ID_INLINE idUniformBuffer& BindingParamUbo()
|
|
{
|
|
return bindingParmUbo[ BindingLayoutType() ];
|
|
}
|
|
ID_INLINE nvrhi::InputLayoutHandle InputLayout()
|
|
{
|
|
return renderProgs[currentIndex].inputLayout;
|
|
}
|
|
ID_INLINE int BindingLayoutType()
|
|
{
|
|
return renderProgs[currentIndex].bindingLayoutType;
|
|
}
|
|
ID_INLINE idStaticList<nvrhi::BindingLayoutHandle, nvrhi::c_MaxBindingLayouts>* GetBindingLayout( int layoutType )
|
|
{
|
|
return &bindingLayouts[layoutType];
|
|
}
|
|
|
|
idUniformBuffer renderParmUbo;
|
|
idArray<idUniformBuffer, NUM_BINDING_LAYOUTS> bindingParmUbo;
|
|
idArray<idVec4*, NUM_BINDING_LAYOUTS> mappedRenderParms;
|
|
|
|
static const char* FindEmbeddedSourceShader( const char* name );
|
|
|
|
private:
|
|
void LoadShader( int index, rpStage_t stage );
|
|
|
|
// Reads the binary fileName and returns a ShaderBlob.
|
|
ShaderBlob GetBytecode( const char* fileName );
|
|
|
|
int builtinShaders[MAX_BUILTINS];
|
|
void BindShader_Builtin( int i )
|
|
{
|
|
BindProgram( i );
|
|
}
|
|
|
|
void LoadProgram( const int programIndex, const int vertexShaderIndex, const int fragmentShaderIndex );
|
|
void LoadComputeProgram( const int programIndex, const int computeShaderIndex );
|
|
|
|
static const uint INVALID_PROGID = 0xFFFFFFFF;
|
|
|
|
struct shader_t
|
|
{
|
|
shader_t() :
|
|
name(),
|
|
nameOutSuffix(),
|
|
shaderFeatures( 0 ),
|
|
builtin( false ),
|
|
macros(),
|
|
handle( nullptr ),
|
|
stage( SHADER_STAGE_DEFAULT )
|
|
{
|
|
}
|
|
|
|
idStr name;
|
|
idStr nameOutSuffix;
|
|
uint32 shaderFeatures;
|
|
bool builtin;
|
|
idList<shaderMacro_t> macros;
|
|
nvrhi::ShaderHandle handle;
|
|
rpStage_t stage;
|
|
};
|
|
|
|
struct renderProg_t
|
|
{
|
|
renderProg_t() :
|
|
name(),
|
|
vertexShaderIndex( -1 ),
|
|
fragmentShaderIndex( -1 ),
|
|
computeShaderIndex( -1 ),
|
|
builtin( true ),
|
|
usesJoints( false ),
|
|
vertexLayout( LAYOUT_UNKNOWN ),
|
|
bindingLayoutType( BINDING_LAYOUT_DEFAULT ),
|
|
inputLayout( nullptr ),
|
|
bindingLayouts()
|
|
{
|
|
}
|
|
|
|
idStr name;
|
|
int vertexShaderIndex;
|
|
int fragmentShaderIndex;
|
|
int computeShaderIndex;
|
|
bool builtin;
|
|
bool usesJoints;
|
|
vertexLayoutType_t vertexLayout;
|
|
bindingLayoutType_t bindingLayoutType;
|
|
nvrhi::InputLayoutHandle inputLayout;
|
|
idStaticList< nvrhi::BindingLayoutHandle, nvrhi::c_MaxBindingLayouts > bindingLayouts;
|
|
};
|
|
|
|
void LoadShader( shader_t& shader );
|
|
|
|
int currentIndex;
|
|
idList<renderProg_t, TAG_RENDER> renderProgs;
|
|
idList<shader_t, TAG_RENDER> shaders;
|
|
idStaticList< idVec4, RENDERPARM_TOTAL > uniforms;
|
|
bool uniformsChanged;
|
|
nvrhi::IDevice* device;
|
|
|
|
using VertexAttribDescList = idList< nvrhi::VertexAttributeDesc >;
|
|
idStaticList< VertexAttribDescList, NUM_VERTEX_LAYOUTS > vertexLayoutDescs;
|
|
|
|
idStaticList< idStaticList<nvrhi::BindingLayoutHandle, nvrhi::c_MaxBindingLayouts>, NUM_BINDING_LAYOUTS > bindingLayouts;
|
|
|
|
//idArray<nvrhi::BufferHandle, NUM_BINDING_LAYOUTS> constantBuffer;
|
|
nvrhi::BufferHandle constantBuffer;
|
|
};
|
|
|
|
extern idRenderProgManager renderProgManager;
|
|
|
|
#endif
|