| 242 | } |
| 243 | |
| 244 | static std::string ProcessArg( const char * & currentData, const char * endData ) |
| 245 | { |
| 246 | char firstByteCode = *reinterpret_cast<const char*>(currentData); |
| 247 | currentData += sizeof(char); |
| 248 | |
| 249 | ShaderDebugArgCode argCode = static_cast<ShaderDebugArgCode>(firstByteCode); |
| 250 | if( argCode == ShaderDebugArgCode::DebugPrint_ErrorType ) { assert(false); return ""; } |
| 251 | |
| 252 | uint elementCount = 0; |
| 253 | ShaderDebugArgCode typeCode = ShaderDebugArgCode::DebugPrint_ErrorType; |
| 254 | switch(argCode) |
| 255 | { |
| 256 | case(ShaderDebugArgCode::DebugPrint_Uint): elementCount = 1; typeCode = ShaderDebugArgCode::DebugPrint_Uint; break; |
| 257 | case(ShaderDebugArgCode::DebugPrint_Uint2): elementCount = 2; typeCode = ShaderDebugArgCode::DebugPrint_Uint; break; |
| 258 | case(ShaderDebugArgCode::DebugPrint_Uint3): elementCount = 3; typeCode = ShaderDebugArgCode::DebugPrint_Uint; break; |
| 259 | case(ShaderDebugArgCode::DebugPrint_Uint4): elementCount = 4; typeCode = ShaderDebugArgCode::DebugPrint_Uint; break; |
| 260 | case(ShaderDebugArgCode::DebugPrint_Int): elementCount = 1; typeCode = ShaderDebugArgCode::DebugPrint_Int; break; |
| 261 | case(ShaderDebugArgCode::DebugPrint_Int2): elementCount = 2; typeCode = ShaderDebugArgCode::DebugPrint_Int; break; |
| 262 | case(ShaderDebugArgCode::DebugPrint_Int3): elementCount = 3; typeCode = ShaderDebugArgCode::DebugPrint_Int; break; |
| 263 | case(ShaderDebugArgCode::DebugPrint_Int4): elementCount = 4; typeCode = ShaderDebugArgCode::DebugPrint_Int; break; |
| 264 | case(ShaderDebugArgCode::DebugPrint_Float): elementCount = 1; typeCode = ShaderDebugArgCode::DebugPrint_Float; break; |
| 265 | case(ShaderDebugArgCode::DebugPrint_Float2): elementCount = 2; typeCode = ShaderDebugArgCode::DebugPrint_Float; break; |
| 266 | case(ShaderDebugArgCode::DebugPrint_Float3): elementCount = 3; typeCode = ShaderDebugArgCode::DebugPrint_Float; break; |
| 267 | case(ShaderDebugArgCode::DebugPrint_Float4): elementCount = 4; typeCode = ShaderDebugArgCode::DebugPrint_Float; break; |
| 268 | default: assert(false && "Wrong data type - there's a bug somewhere"); return ""; |
| 269 | } |
| 270 | size_t neededSize = elementCount * sizeof(uint); |
| 271 | if( currentData + neededSize > endData ) |
| 272 | { |
| 273 | assert(false && "Buffer overflow - there's a bug somewhere"); |
| 274 | return ""; |
| 275 | } |
| 276 | |
| 277 | if( elementCount == 1 ) |
| 278 | return ProcessSingleValue( currentData, endData, typeCode ); |
| 279 | std::string ret = "("; |
| 280 | for( uint i = 0; i < elementCount; i++ ) |
| 281 | { |
| 282 | if( i != 0 ) ret += ", "; |
| 283 | ret += ProcessSingleValue( currentData, endData, typeCode ); |
| 284 | } |
| 285 | return ret + ")"; |
| 286 | } |
| 287 | |
| 288 | void ShaderDebug::OutputLastBufferPrints() |
| 289 | { |
no test coverage detected