summaryrefslogtreecommitdiff
path: root/materialsystem/shaderapidx9/recording.h
diff options
context:
space:
mode:
Diffstat (limited to 'materialsystem/shaderapidx9/recording.h')
-rw-r--r--materialsystem/shaderapidx9/recording.h198
1 files changed, 198 insertions, 0 deletions
diff --git a/materialsystem/shaderapidx9/recording.h b/materialsystem/shaderapidx9/recording.h
new file mode 100644
index 0000000..81c50fc
--- /dev/null
+++ b/materialsystem/shaderapidx9/recording.h
@@ -0,0 +1,198 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+// $NoKeywords: $
+//
+//=============================================================================//
+
+#ifndef RECORDING_H
+#define RECORDING_H
+#pragma once
+
+//-----------------------------------------------------------------------------
+// Use this to put us into a 'recording' mode
+//-----------------------------------------------------------------------------
+
+//#define RECORDING
+
+//-----------------------------------------------------------------------------
+// Uncomment these to record special frames in the recording
+// that reset the entire render state.
+//-----------------------------------------------------------------------------
+
+//#define RECORD_KEYFRAMES 1
+#define KEYFRAME_INTERVAL 100 // number of actual frames between each keyframe
+
+//-----------------------------------------------------------------------------
+// Use this to allow us to record crashes (write every command immediately)
+//-----------------------------------------------------------------------------
+
+//#define CRASH_RECORDING
+
+//-----------------------------------------------------------------------------
+// Use this to record textures (checkboards are used for textures otherwise)
+//-----------------------------------------------------------------------------
+
+#define RECORD_TEXTURES
+
+//-----------------------------------------------------------------------------
+// Use this to record debug strings . .these are only useful if you are doing "playback -list"
+//-----------------------------------------------------------------------------
+
+#define RECORD_DEBUG_STRINGS
+
+//-----------------------------------------------------------------------------
+// Recording state, if you change this, change the table in playback/playback.cpp
+//-----------------------------------------------------------------------------
+
+enum RecordingCommands_t
+{
+ DX8_CREATE_DEVICE = 0,
+ DX8_DESTROY_DEVICE,
+ DX8_RESET,
+ DX8_SHOW_CURSOR,
+ DX8_BEGIN_SCENE,
+ DX8_END_SCENE,
+ DX8_PRESENT,
+ DX8_CREATE_TEXTURE,
+ DX8_DESTROY_TEXTURE,
+ DX8_SET_TEXTURE,
+ DX8_SET_TRANSFORM,
+ DX8_CREATE_VERTEX_SHADER,
+ DX8_CREATE_PIXEL_SHADER,
+ DX8_DESTROY_VERTEX_SHADER,
+ DX8_DESTROY_PIXEL_SHADER,
+ DX8_SET_VERTEX_SHADER,
+ DX8_SET_PIXEL_SHADER,
+ DX8_SET_VERTEX_SHADER_CONSTANT,
+ DX8_SET_PIXEL_SHADER_CONSTANT,
+ DX8_SET_MATERIAL,
+ DX8_LIGHT_ENABLE,
+ DX8_SET_LIGHT,
+ DX8_SET_VIEWPORT,
+ DX8_CLEAR,
+ DX8_VALIDATE_DEVICE,
+ DX8_SET_RENDER_STATE,
+ DX8_SET_TEXTURE_STAGE_STATE,
+
+ DX8_CREATE_VERTEX_BUFFER,
+ DX8_DESTROY_VERTEX_BUFFER,
+ DX8_LOCK_VERTEX_BUFFER,
+ DX8_VERTEX_DATA,
+ DX8_UNLOCK_VERTEX_BUFFER,
+
+ DX8_CREATE_INDEX_BUFFER,
+ DX8_DESTROY_INDEX_BUFFER,
+ DX8_LOCK_INDEX_BUFFER,
+ DX8_INDEX_DATA,
+ DX8_UNLOCK_INDEX_BUFFER,
+
+ DX8_SET_STREAM_SOURCE,
+ DX8_SET_INDICES,
+ DX8_DRAW_PRIMITIVE,
+ DX8_DRAW_INDEXED_PRIMITIVE,
+
+ DX8_LOCK_TEXTURE,
+ DX8_UNLOCK_TEXTURE,
+
+ DX8_KEYFRAME, // isn't actually a dx8 command, used to help find particular frames
+
+ DX8_SET_TEXTURE_DATA,
+ DX8_BLIT_TEXTURE_BITS,
+
+ DX8_GET_DEVICE_CAPS,
+ DX8_GET_ADAPTER_IDENTIFIER,
+
+ DX8_HARDWARE_SYNC,
+
+ DX8_COPY_FRAMEBUFFER_TO_TEXTURE,
+ DX8_DEBUG_STRING,
+ DX8_CREATE_DEPTH_TEXTURE,
+ DX8_DESTROY_DEPTH_TEXTURE,
+ DX8_SET_RENDER_TARGET,
+
+ DX8_TEST_COOPERATIVE_LEVEL,
+
+ DX8_SET_VERTEX_BUFFER_FORMAT, // isn't actually a dx8 command. . let's playback know what format a buffer is for listing info
+
+ DX8_SET_SAMPLER_STATE,
+ DX8_SET_VERTEX_DECLARATION,
+ DX8_CREATE_VERTEX_DECLARATION,
+ DX8_SET_FVF,
+ DX8_SET_CLIP_PLANE,
+
+ DX8_SYNC_TOKEN,
+
+ DX8_LOCK_VERTEX_TEXTURE,
+ DX8_UNLOCK_VERTEX_TEXTURE,
+
+ DX8_SET_SCISSOR_RECT,
+
+ DX8_NUM_RECORDING_COMMANDS
+};
+
+#ifdef RECORDING
+
+void RecordCommand( RecordingCommands_t cmd, int numargs );
+void RecordArgument( void const* pMemory, int size );
+void FinishRecording( void );
+
+inline void RecordInt( int i )
+{
+ RecordArgument( &i, sizeof(int) );
+}
+
+inline void RecordFloat( float f )
+{
+ RecordArgument( &f, sizeof(float) );
+}
+
+# define RECORD_COMMAND( _cmd, _numargs ) RecordCommand( _cmd, _numargs )
+# define RECORD_INT( _int ) RecordInt( _int )
+# define RECORD_FLOAT( _float ) RecordFloat( _float )
+# define RECORD_STRING( _string ) RecordArgument( _string, strlen(_string) + 1 )
+# define RECORD_STRUCT( _struct, _size ) RecordArgument( _struct, _size )
+
+# define RECORD_RENDER_STATE( _state, _val ) \
+ RECORD_COMMAND( DX8_SET_RENDER_STATE, 2 ); \
+ RECORD_INT( _state ); \
+ RECORD_INT( _val )
+
+# define RECORD_TEXTURE_STAGE_STATE( _stage, _state, _val ) \
+ RECORD_COMMAND( DX8_SET_TEXTURE_STAGE_STATE, 3 ); \
+ RECORD_INT( _stage ); \
+ RECORD_INT( _state ); \
+ RECORD_INT( _val )
+
+# define RECORD_SAMPLER_STATE( _stage, _state, _val ) \
+ RECORD_COMMAND( DX8_SET_SAMPLER_STATE, 3 ); \
+ RECORD_INT( _stage ); \
+ RECORD_INT( _state ); \
+ RECORD_INT( _val )
+
+# ifdef RECORD_DEBUG_STRINGS
+# define RECORD_DEBUG_STRING( _str ) \
+ RECORD_COMMAND( DX8_DEBUG_STRING, 1 ); \
+ RECORD_STRING( _str )
+# else
+# define RECORD_DEBUG_STRING( _str ) 0
+# endif
+
+#else // not RECORDING
+
+# undef RECORD_TEXTURES
+
+# define RECORD_COMMAND( _cmd, _numargs ) 0
+# define RECORD_INT( _int ) 0
+# define RECORD_FLOAT( _float ) 0
+# define RECORD_STRING( _string ) 0
+# define RECORD_STRUCT( _struct, _size ) 0
+# define RECORD_RENDER_STATE( _state, _val ) 0
+# define RECORD_TEXTURE_STAGE_STATE( _stage, _state, _val ) 0
+# define RECORD_SAMPLER_STATE( _stage, _state, _val ) 0
+# define RECORD_DEBUG_STRING( _str ) 0
+
+#endif // RECORDING
+
+#endif // RECORDING_H