This repository has been archived on 2024-06-13. You can view files and clone it, but cannot push or open issues or pull requests.
2020-08-04 13:13:01 -04:00

128 lines
6.1 KiB
C

//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $NoKeywords: $
//
// This file defines a number of constants and structured which are used to
// build up a command buffer to pass to ShaderAPI for state setting and other
// operations. Since the prupose of these command buffers is to minimize and
// optimize calls into shaderapi, their structure is not abstract - they are
// built out by the calling process.
//
//===========================================================================//
#ifndef COMMANDBUFFER_H
#define COMMANDBUFFER_H
#ifdef _WIN32
#pragma once
#endif
// all commands defined with their struct
enum CommandBufferCommand_t {
// flow control commands.
CBCMD_END = 0, // end of stream
CBCMD_JUMP = 1, // int cmd, void *adr. jump to another
// stream. Can be used to implement
// non-sequentially allocated storage
CBCMD_JSR = 2, // int cmd, void *adr. subroutine call to another stream.
// constant setting commands
CBCMD_SET_PIXEL_SHADER_FLOAT_CONST =
256, // int cmd,int first_reg, int nregs, float values[nregs*4]
CBCMD_SET_VERTEX_SHADER_FLOAT_CONST =
257, // int cmd,int first_reg, int nregs, float values[nregs*4]
CBCMD_SET_VERTEX_SHADER_FLOAT_CONST_REF =
258, // int cmd,int first_reg, int nregs, &float values[nregs*4]
CBCMD_SETPIXELSHADERFOGPARAMS = 259, // int cmd, int regdest
CBCMD_STORE_EYE_POS_IN_PSCONST = 260, // int cmd, int regdest
CBCMD_COMMITPIXELSHADERLIGHTING = 261, // int cmd, int regdest
CBCMD_SETPIXELSHADERSTATEAMBIENTLIGHTCUBE = 262, // int cmd, int regdest
CBCMD_SETAMBIENTCUBEDYNAMICSTATEVERTEXSHADER = 263, // int cmd
CBCMD_SET_DEPTH_FEATHERING_CONST =
264, // int cmd, int constant register, float blend scale
// texture binding
CBCMD_BIND_STANDARD_TEXTURE = 512, // cmd, sampler, texture id
CBCMD_BIND_SHADERAPI_TEXTURE_HANDLE = 513, // cmd, sampler, texture handle
// shaders
CBCMD_SET_PSHINDEX = 1024, // cmd, idx
CBCMD_SET_VSHINDEX = 1025, // cmd, idx
// commands from mainline. In mainline commands no longer have
// command id's specified like this. So I make up numbers...
CBCMD_SET_VERTEX_SHADER_FLASHLIGHT_STATE =
2000, // cmd, int first_reg (for worldToTexture matrix)
CBCMD_SET_PIXEL_SHADER_FLASHLIGHT_STATE =
2001, // cmd, int color reg, int atten reg, int origin reg, sampler
// (for flashlight texture)
CBCMD_SET_PIXEL_SHADER_UBERLIGHT_STATE = 2002, // cmd
CBCMD_SET_VERTEX_SHADER_NEARZFARZ_STATE = 2003, // cmd
};
//-----------------------------------------------------------------------------
// Commands used by the per-instance command buffer
// NOTE: If you add commands, you probably want to change the size of
// CInstanceStorageBuffer and/or the choice of making it a fixed-size allocation
// see shaderlib/baseshader.*
//
// FIXME!! NOTE that this whole scheme here generates a dependency of the
// shaders on internal guts of shaderapidx8, since it's responsible for
// setting various pixel shader + vertex shader constants based on the
// commands below. We need to remove this dependency as it's way too restrictive
// and puts the smarts in the wrong place (see CBICMD_SETPIXELSHADERGLINTDAMPING
// as an example). Not going to solve this for l4d though, as I don't anticipate
// a large amount of new shader writing for that product.
//-----------------------------------------------------------------------------
enum CommandBufferInstanceCommand_t {
CBICMD_END = 0, // end of stream
CBICMD_JUMP, // int cmd, void *adr. jump to another
// stream. Can be used to implement
// non-sequentially allocated storage
CBICMD_JSR, // int cmd, void *adr. subroutine call to another stream.
CBICMD_SETSKINNINGMATRICES, // int cmd
CBICMD_SETVERTEXSHADERLOCALLIGHTING, // int cmd
CBICMD_SETPIXELSHADERLOCALLIGHTING, // int cmd, int regdest
CBICMD_SETVERTEXSHADERAMBIENTLIGHTCUBE, // int cmd
CBICMD_SETPIXELSHADERAMBIENTLIGHTCUBE, // int cmd, int regdest
CBICMD_SETPIXELSHADERAMBIENTLIGHTCUBELUMINANCE, // int cmd, int regdest
CBICMD_SETPIXELSHADERGLINTDAMPING, // int cmd, int regdest
CBICMD_BIND_ENV_CUBEMAP_TEXTURE, // cmd, sampler
CBICMD_SETMODULATIONPIXELSHADERDYNAMICSTATE,
CBICMD_SETMODULATIONPIXELSHADERDYNAMICSTATE_LINEARCOLORSPACE_LINEARSCALE, // int cmd, int constant register, Vector color2
CBICMD_SETMODULATIONPIXELSHADERDYNAMICSTATE_LINEARCOLORSPACE, // int cmd,
// int
// constant
// register,
// Vector
// color2
CBICMD_SETMODULATIONPIXELSHADERDYNAMICSTATE_LINEARSCALE, // int cmd, int
// constant
// register,
// Vector color2,
// float scale
CBICMD_SETMODULATIONVERTEXSHADERDYNAMICSTATE, // int cmd, int constant
// register, Vector color2
CBICMD_SETMODULATIONPIXELSHADERDYNAMICSTATE_IDENTITY, // int cmd, int
// constant register
CBICMD_SETMODULATIONVERTEXSHADERDYNAMICSTATE_LINEARSCALE, // int cmd, int
// constant
// register,
// Vector color2,
// float scale
// This must be last
CBICMD_COUNT,
};
#endif // commandbuffer_h