From 39ed87570bdb2f86969d4be821c94b722dc71179 Mon Sep 17 00:00:00 2001 From: Joe Ludwig Date: Wed, 26 Jun 2013 15:22:04 -0700 Subject: First version of the SOurce SDK 2013 --- mp/src/public/shaderapi/commandbuffer.h | 108 ++++++++++++++++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 mp/src/public/shaderapi/commandbuffer.h (limited to 'mp/src/public/shaderapi/commandbuffer.h') diff --git a/mp/src/public/shaderapi/commandbuffer.h b/mp/src/public/shaderapi/commandbuffer.h new file mode 100644 index 00000000..7c9137a8 --- /dev/null +++ b/mp/src/public/shaderapi/commandbuffer.h @@ -0,0 +1,108 @@ +//========= 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 -- cgit v1.2.3