renderdoc/replay/renderdoc_serialise.inl (1,936 lines of code) (raw):
/******************************************************************************
* The MIT License (MIT)
*
* Copyright (c) 2017-2024 Baldur Karlsson
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
******************************************************************************/
// these macros do compile time asserts on the size of the structure, to
// help prevent the structure changing without these functions being updated.
// This isn't perfect as a new variable could be added in padding space, or
// one removed and leaves padding. Most variables are 4 bytes in size though
// so it should be fairly reliable and it's better than nothing!
// Since structures contain pointers and vary in size, we do this only on
// x64 since that's the commonly built target.
#ifndef ENABLED
#define ENABLED(...) 0
#endif
#if ENABLED(RDOC_WIN32) && ENABLED(RDOC_X64) && ENABLED(RDOC_DEVEL)
template <typename T, size_t actual, size_t expected>
class oversized
{
int check[int(actual) - int(expected) + 1];
};
template <typename T, size_t actual, size_t expected>
class undersized
{
int check[int(expected) - int(actual) + 1];
};
#define SIZE_CHECK(expected) \
undersized<decltype(el), sizeof(el), expected>(); \
oversized<decltype(el), sizeof(el), expected>();
#else
#define SIZE_CHECK(expected)
#endif
template <class SerialiserType>
void DoSerialise(SerialiserType &ser, PathEntry &el)
{
SERIALISE_MEMBER(filename);
SERIALISE_MEMBER(flags);
SERIALISE_MEMBER(lastmod);
SERIALISE_MEMBER(size);
SIZE_CHECK(40);
}
template <class SerialiserType>
void DoSerialise(SerialiserType &ser, SectionProperties &el)
{
SERIALISE_MEMBER(name);
SERIALISE_MEMBER(type);
SERIALISE_MEMBER(flags);
SERIALISE_MEMBER(version);
SERIALISE_MEMBER(uncompressedSize);
SERIALISE_MEMBER(compressedSize);
SIZE_CHECK(56);
}
template <class SerialiserType>
void DoSerialise(SerialiserType &ser, EnvironmentModification &el)
{
SERIALISE_MEMBER(mod);
SERIALISE_MEMBER(sep);
SERIALISE_MEMBER(name);
SERIALISE_MEMBER(value);
SIZE_CHECK(56);
}
template <class SerialiserType>
void DoSerialise(SerialiserType &ser, CaptureOptions &el)
{
SERIALISE_MEMBER(allowVSync);
SERIALISE_MEMBER(allowFullscreen);
SERIALISE_MEMBER(apiValidation);
SERIALISE_MEMBER(captureCallstacks);
SERIALISE_MEMBER(captureCallstacksOnlyActions);
SERIALISE_MEMBER(delayForDebugger);
SERIALISE_MEMBER(verifyBufferAccess);
SERIALISE_MEMBER(hookIntoChildren);
SERIALISE_MEMBER(refAllResources);
SERIALISE_MEMBER(captureAllCmdLists);
SERIALISE_MEMBER(debugOutputMute);
SERIALISE_MEMBER(softMemoryLimit);
SIZE_CHECK(24);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, ResourceFormat &el)
{
SERIALISE_MEMBER(type);
SERIALISE_MEMBER(compType);
SERIALISE_MEMBER(compCount);
SERIALISE_MEMBER(compByteWidth);
SERIALISE_MEMBER(flags);
SIZE_CHECK(6);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, SigParameter &el)
{
SERIALISE_MEMBER(varName);
SERIALISE_MEMBER(semanticName);
SERIALISE_MEMBER(semanticIdxName);
SERIALISE_MEMBER(semanticIndex);
SERIALISE_MEMBER(regIndex);
SERIALISE_MEMBER(systemValue);
SERIALISE_MEMBER(varType);
SERIALISE_MEMBER(regChannelMask);
SERIALISE_MEMBER(channelUsedMask);
SERIALISE_MEMBER(needSemanticIndex);
SERIALISE_MEMBER(compCount);
SERIALISE_MEMBER(stream);
SERIALISE_MEMBER(perPrimitiveRate);
SIZE_CHECK(96);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, ShaderConstantType &el)
{
SERIALISE_MEMBER(baseType);
SERIALISE_MEMBER(rows);
SERIALISE_MEMBER(columns);
SERIALISE_MEMBER(matrixByteStride);
SERIALISE_MEMBER(elements);
SERIALISE_MEMBER(arrayByteStride);
SERIALISE_MEMBER(name);
SERIALISE_MEMBER(flags);
SERIALISE_MEMBER(pointerTypeID);
SERIALISE_MEMBER(members);
SIZE_CHECK(72);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, ShaderConstant &el)
{
SERIALISE_MEMBER(name);
SERIALISE_MEMBER(byteOffset);
SERIALISE_MEMBER(bitFieldOffset);
SERIALISE_MEMBER(bitFieldSize);
SERIALISE_MEMBER(defaultValue);
SERIALISE_MEMBER(type);
SIZE_CHECK(112);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, ConstantBlock &el)
{
SERIALISE_MEMBER(name);
SERIALISE_MEMBER(variables);
SERIALISE_MEMBER(fixedBindNumber);
SERIALISE_MEMBER(fixedBindSetOrSpace);
SERIALISE_MEMBER(bindArraySize);
SERIALISE_MEMBER(byteSize);
SERIALISE_MEMBER(bufferBacked);
SERIALISE_MEMBER(compileConstants);
SIZE_CHECK(72);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, ShaderSampler &el)
{
SERIALISE_MEMBER(name);
SERIALISE_MEMBER(fixedBindNumber);
SERIALISE_MEMBER(fixedBindSetOrSpace);
SERIALISE_MEMBER(bindArraySize);
SIZE_CHECK(40);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, ShaderResource &el)
{
SERIALISE_MEMBER(textureType);
SERIALISE_MEMBER(descriptorType);
SERIALISE_MEMBER(name);
SERIALISE_MEMBER(variableType);
SERIALISE_MEMBER(fixedBindNumber);
SERIALISE_MEMBER(fixedBindSetOrSpace);
SERIALISE_MEMBER(bindArraySize);
SERIALISE_MEMBER(isTexture);
SERIALISE_MEMBER(hasSampler);
SERIALISE_MEMBER(isInputAttachment);
SERIALISE_MEMBER(isReadOnly);
SIZE_CHECK(120);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, ShaderEntryPoint &el)
{
SERIALISE_MEMBER(name);
SERIALISE_MEMBER(stage);
SIZE_CHECK(32);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, ShaderCompileFlag &el)
{
SERIALISE_MEMBER(name);
SERIALISE_MEMBER(value);
SIZE_CHECK(48);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, ShaderCompileFlags &el)
{
SERIALISE_MEMBER(flags);
SIZE_CHECK(24);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, ShaderSourceFile &el)
{
SERIALISE_MEMBER(filename);
SERIALISE_MEMBER(contents);
SIZE_CHECK(48);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, ShaderDebugInfo &el)
{
SERIALISE_MEMBER(compileFlags);
SERIALISE_MEMBER(files);
SERIALISE_MEMBER(entryLocation);
SERIALISE_MEMBER(editBaseFile);
SERIALISE_MEMBER(encoding);
SERIALISE_MEMBER(compiler);
SERIALISE_MEMBER(debuggable);
SERIALISE_MEMBER(sourceDebugInformation);
SERIALISE_MEMBER(debugStatus);
SIZE_CHECK(136);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, ShaderReflection &el)
{
SERIALISE_MEMBER(resourceId);
SERIALISE_MEMBER(entryPoint);
SERIALISE_MEMBER(stage);
SERIALISE_MEMBER(debugInfo);
SERIALISE_MEMBER(encoding);
SERIALISE_MEMBER(rawBytes);
SERIALISE_MEMBER(outputTopology);
SERIALISE_MEMBER(dispatchThreadsDimension);
SERIALISE_MEMBER(inputSignature);
SERIALISE_MEMBER(outputSignature);
SERIALISE_MEMBER(constantBlocks);
SERIALISE_MEMBER(samplers);
SERIALISE_MEMBER(readOnlyResources);
SERIALISE_MEMBER(readWriteResources);
SERIALISE_MEMBER(interfaces);
SERIALISE_MEMBER(pointerTypes);
SERIALISE_MEMBER(taskPayload);
SERIALISE_MEMBER(rayPayload);
SERIALISE_MEMBER(rayAttributes);
SIZE_CHECK(632);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, ShaderVariable &el)
{
SERIALISE_MEMBER(rows);
SERIALISE_MEMBER(columns);
SERIALISE_MEMBER(name);
SERIALISE_MEMBER(type);
SERIALISE_MEMBER(flags);
SERIALISE_MEMBER(value.u64v);
SERIALISE_MEMBER(members);
SIZE_CHECK(184);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, DebugVariableReference &el)
{
SERIALISE_MEMBER(name);
SERIALISE_MEMBER(type);
SERIALISE_MEMBER(component);
SIZE_CHECK(32);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, SourceVariableMapping &el)
{
SERIALISE_MEMBER(name);
SERIALISE_MEMBER(type);
SERIALISE_MEMBER(rows);
SERIALISE_MEMBER(columns);
SERIALISE_MEMBER(offset);
SERIALISE_MEMBER(signatureIndex);
SERIALISE_MEMBER(variables);
SIZE_CHECK(72);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, LineColumnInfo &el)
{
SERIALISE_MEMBER(disassemblyLine);
SERIALISE_MEMBER(fileIndex);
SERIALISE_MEMBER(lineStart);
SERIALISE_MEMBER(lineEnd);
SERIALISE_MEMBER(colStart);
SERIALISE_MEMBER(colEnd);
SIZE_CHECK(24);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, InstructionSourceInfo &el)
{
SERIALISE_MEMBER(instruction);
SERIALISE_MEMBER(lineInfo);
SERIALISE_MEMBER(sourceVars);
SIZE_CHECK(56);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, ShaderVariableChange &el)
{
SERIALISE_MEMBER(before);
SERIALISE_MEMBER(after);
SIZE_CHECK(368);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, ShaderDebugState &el)
{
SERIALISE_MEMBER(nextInstruction);
SERIALISE_MEMBER(stepIndex);
SERIALISE_MEMBER(flags);
SERIALISE_MEMBER(changes);
SERIALISE_MEMBER(callstack);
SIZE_CHECK(64);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, ShaderDebugTrace &el)
{
SERIALISE_MEMBER(stage);
SERIALISE_MEMBER(inputs);
SERIALISE_MEMBER(constantBlocks);
SERIALISE_MEMBER(samplers);
SERIALISE_MEMBER(readOnlyResources);
SERIALISE_MEMBER(readWriteResources);
SERIALISE_MEMBER(sourceVars);
SERIALISE_MEMBER(instInfo);
// serialise the debugger pointer entirely opaquely, this is only used for replay proxying
uint64_t debugger = 0;
if(ser.IsWriting())
debugger = (uint64_t)(uintptr_t)el.debugger;
SERIALISE_ELEMENT(debugger);
if(ser.IsReading())
el.debugger = (ShaderDebugger *)debugger;
SIZE_CHECK(184);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, TextureFilter &el)
{
SERIALISE_MEMBER(minify);
SERIALISE_MEMBER(magnify);
SERIALISE_MEMBER(mip);
SERIALISE_MEMBER(filter);
SIZE_CHECK(4);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, TextureSwizzle4 &el)
{
SERIALISE_MEMBER(red);
SERIALISE_MEMBER(green);
SERIALISE_MEMBER(blue);
SERIALISE_MEMBER(alpha);
SIZE_CHECK(4);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, ResourceDescription &el)
{
SERIALISE_MEMBER(resourceId);
SERIALISE_MEMBER(type);
SERIALISE_MEMBER(autogeneratedName);
SERIALISE_MEMBER(name);
SERIALISE_MEMBER(initialisationChunks);
SERIALISE_MEMBER(derivedResources);
SERIALISE_MEMBER(parentResources);
SIZE_CHECK(112);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, TextureDescription &el)
{
SERIALISE_MEMBER(format);
SERIALISE_MEMBER(dimension);
SERIALISE_MEMBER(type);
SERIALISE_MEMBER(width);
SERIALISE_MEMBER(height);
SERIALISE_MEMBER(depth);
SERIALISE_MEMBER(resourceId);
SERIALISE_MEMBER(cubemap);
SERIALISE_MEMBER(mips);
SERIALISE_MEMBER(arraysize);
SERIALISE_MEMBER(creationFlags);
SERIALISE_MEMBER(msQual);
SERIALISE_MEMBER(msSamp);
SERIALISE_MEMBER(byteSize);
SIZE_CHECK(72);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, BufferDescription &el)
{
SERIALISE_MEMBER(resourceId);
SERIALISE_MEMBER(creationFlags);
SERIALISE_MEMBER(gpuAddress);
SERIALISE_MEMBER(length);
SIZE_CHECK(32);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, DescriptorStoreDescription &el)
{
SERIALISE_MEMBER(resourceId);
SERIALISE_MEMBER(descriptorByteSize);
SERIALISE_MEMBER(firstDescriptorOffset);
SERIALISE_MEMBER(descriptorCount);
SIZE_CHECK(24);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, APIProperties &el)
{
SERIALISE_MEMBER(pipelineType);
SERIALISE_MEMBER(localRenderer);
SERIALISE_MEMBER(vendor);
SERIALISE_MEMBER(degraded);
SERIALISE_MEMBER(shaderDebugging);
SERIALISE_MEMBER(pixelHistory);
SERIALISE_MEMBER(rgpCapture);
SERIALISE_MEMBER(ShaderLinkage);
SERIALISE_MEMBER(YUVTextures);
SERIALISE_MEMBER(SparseResources);
SERIALISE_MEMBER(MultiGPU);
SERIALISE_MEMBER(D3D12Bundle);
SERIALISE_MEMBER(DXILShaders);
SIZE_CHECK(24);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, DriverInformation &el)
{
SERIALISE_MEMBER(vendor);
SERIALISE_MEMBER(version);
SIZE_CHECK(132);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, DebugMessage &el)
{
SERIALISE_MEMBER(eventId);
SERIALISE_MEMBER(category);
SERIALISE_MEMBER(severity);
SERIALISE_MEMBER(source);
SERIALISE_MEMBER(messageID);
SERIALISE_MEMBER(description);
SIZE_CHECK(48);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, APIEvent &el)
{
SERIALISE_MEMBER(eventId);
SERIALISE_MEMBER(chunkIndex);
SERIALISE_MEMBER(fileOffset);
SIZE_CHECK(16);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, ActionDescription &el)
{
SERIALISE_MEMBER(eventId);
SERIALISE_MEMBER(actionId);
SERIALISE_MEMBER(customName);
SERIALISE_MEMBER(flags);
SERIALISE_MEMBER(markerColor);
SERIALISE_MEMBER(numIndices);
SERIALISE_MEMBER(numInstances);
SERIALISE_MEMBER(baseVertex);
SERIALISE_MEMBER(indexOffset);
SERIALISE_MEMBER(vertexOffset);
SERIALISE_MEMBER(instanceOffset);
SERIALISE_MEMBER(drawIndex);
SERIALISE_MEMBER(dispatchDimension);
SERIALISE_MEMBER(dispatchThreadsDimension);
SERIALISE_MEMBER(dispatchBase);
SERIALISE_MEMBER(copySource);
SERIALISE_MEMBER(copySourceSubresource);
SERIALISE_MEMBER(copyDestination);
SERIALISE_MEMBER(copyDestinationSubresource);
if(ser.IsReading())
el.parent = el.previous = el.next = NULL;
SERIALISE_MEMBER(outputs);
SERIALISE_MEMBER(depthOut);
SERIALISE_MEMBER(events);
SERIALISE_MEMBER(children);
SIZE_CHECK(312);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, ConstantBindStats &el)
{
SERIALISE_MEMBER(calls);
SERIALISE_MEMBER(sets);
SERIALISE_MEMBER(nulls);
SERIALISE_MEMBER(bindslots);
SERIALISE_MEMBER(sizes);
SIZE_CHECK(64);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, SamplerBindStats &el)
{
SERIALISE_MEMBER(calls);
SERIALISE_MEMBER(sets);
SERIALISE_MEMBER(nulls);
SERIALISE_MEMBER(bindslots);
SIZE_CHECK(40);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, ResourceBindStats &el)
{
SERIALISE_MEMBER(calls);
SERIALISE_MEMBER(sets);
SERIALISE_MEMBER(nulls);
SERIALISE_MEMBER(types);
SERIALISE_MEMBER(bindslots);
SIZE_CHECK(64);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, ResourceUpdateStats &el)
{
SERIALISE_MEMBER(calls);
SERIALISE_MEMBER(clients);
SERIALISE_MEMBER(servers);
SERIALISE_MEMBER(types);
SERIALISE_MEMBER(sizes);
SIZE_CHECK(64);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, DrawcallStats &el)
{
SERIALISE_MEMBER(calls);
SERIALISE_MEMBER(instanced);
SERIALISE_MEMBER(indirect);
SERIALISE_MEMBER(counts);
SIZE_CHECK(40);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, DispatchStats &el)
{
SERIALISE_MEMBER(calls);
SERIALISE_MEMBER(indirect);
SIZE_CHECK(8);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, IndexBindStats &el)
{
SERIALISE_MEMBER(calls);
SERIALISE_MEMBER(sets);
SERIALISE_MEMBER(nulls);
SIZE_CHECK(12);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, VertexBindStats &el)
{
SERIALISE_MEMBER(calls);
SERIALISE_MEMBER(sets);
SERIALISE_MEMBER(nulls);
SERIALISE_MEMBER(bindslots);
SIZE_CHECK(40);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, LayoutBindStats &el)
{
SERIALISE_MEMBER(calls);
SERIALISE_MEMBER(sets);
SERIALISE_MEMBER(nulls);
SIZE_CHECK(12);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, ShaderChangeStats &el)
{
SERIALISE_MEMBER(calls);
SERIALISE_MEMBER(sets);
SERIALISE_MEMBER(nulls);
SERIALISE_MEMBER(redundants);
SIZE_CHECK(16);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, BlendStats &el)
{
SERIALISE_MEMBER(calls);
SERIALISE_MEMBER(sets);
SERIALISE_MEMBER(nulls);
SERIALISE_MEMBER(redundants);
SIZE_CHECK(16);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, DepthStencilStats &el)
{
SERIALISE_MEMBER(calls);
SERIALISE_MEMBER(sets);
SERIALISE_MEMBER(nulls);
SERIALISE_MEMBER(redundants);
SIZE_CHECK(16);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, RasterizationStats &el)
{
SERIALISE_MEMBER(calls);
SERIALISE_MEMBER(sets);
SERIALISE_MEMBER(nulls);
SERIALISE_MEMBER(redundants);
SERIALISE_MEMBER(viewports);
SERIALISE_MEMBER(rects);
SIZE_CHECK(64);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, OutputTargetStats &el)
{
SERIALISE_MEMBER(calls);
SERIALISE_MEMBER(sets);
SERIALISE_MEMBER(nulls);
SERIALISE_MEMBER(bindslots);
SIZE_CHECK(40);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, FrameStatistics &el)
{
SERIALISE_MEMBER(recorded);
SERIALISE_MEMBER(constants);
SERIALISE_MEMBER(samplers);
SERIALISE_MEMBER(resources);
SERIALISE_MEMBER(updates);
SERIALISE_MEMBER(draws);
SERIALISE_MEMBER(dispatches);
SERIALISE_MEMBER(indices);
SERIALISE_MEMBER(vertices);
SERIALISE_MEMBER(layouts);
SERIALISE_MEMBER(shaders);
SERIALISE_MEMBER(blends);
SERIALISE_MEMBER(depths);
SERIALISE_MEMBER(rasters);
SERIALISE_MEMBER(outputs);
SIZE_CHECK(424);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, FrameDescription &el)
{
SERIALISE_MEMBER(frameNumber);
SERIALISE_MEMBER(fileOffset);
SERIALISE_MEMBER(uncompressedFileSize);
SERIALISE_MEMBER(compressedFileSize);
SERIALISE_MEMBER(persistentSize);
SERIALISE_MEMBER(initDataSize);
SERIALISE_MEMBER(captureTime);
SERIALISE_MEMBER(stats);
SERIALISE_MEMBER(debugMessages);
SIZE_CHECK(504);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, FrameRecord &el)
{
SERIALISE_MEMBER(frameInfo);
SERIALISE_MEMBER(actionList);
SIZE_CHECK(528);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, TaskGroupSize &el)
{
SERIALISE_MEMBER(x);
SERIALISE_MEMBER(y);
SERIALISE_MEMBER(z);
SIZE_CHECK(12);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, MeshletSize &el)
{
SERIALISE_MEMBER(numIndices);
SERIALISE_MEMBER(numVertices);
SIZE_CHECK(8);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, MeshFormat &el)
{
SERIALISE_MEMBER(indexResourceId);
SERIALISE_MEMBER(indexByteOffset);
SERIALISE_MEMBER(indexByteStride);
SERIALISE_MEMBER(indexByteSize);
SERIALISE_MEMBER(baseVertex);
SERIALISE_MEMBER(vertexResourceId);
SERIALISE_MEMBER(vertexByteOffset);
SERIALISE_MEMBER(vertexByteStride);
SERIALISE_MEMBER(vertexByteSize);
SERIALISE_MEMBER(meshletSizes);
SERIALISE_MEMBER(dispatchSize);
SERIALISE_MEMBER(taskSizes);
SERIALISE_MEMBER(meshletIndexOffset);
SERIALISE_MEMBER(perPrimitiveOffset);
SERIALISE_MEMBER(perPrimitiveStride);
SERIALISE_MEMBER(format);
SERIALISE_MEMBER(meshColor);
SERIALISE_MEMBER(topology);
SERIALISE_MEMBER(numIndices);
SERIALISE_MEMBER(instStepRate);
SERIALISE_MEMBER(nearPlane);
SERIALISE_MEMBER(farPlane);
SERIALISE_MEMBER(unproject);
SERIALISE_MEMBER(instanced);
SERIALISE_MEMBER(showAlpha);
SERIALISE_MEMBER(status);
SIZE_CHECK(240);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, Offset &el)
{
SERIALISE_MEMBER(x);
SERIALISE_MEMBER(y);
SIZE_CHECK(8);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, FloatVector &el)
{
SERIALISE_MEMBER(x);
SERIALISE_MEMBER(y);
SERIALISE_MEMBER(z);
SERIALISE_MEMBER(w);
SIZE_CHECK(16);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, Uuid &el)
{
SERIALISE_MEMBER(words);
SIZE_CHECK(16);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, CounterDescription &el)
{
SERIALISE_MEMBER(counter);
SERIALISE_MEMBER(name);
SERIALISE_MEMBER(category);
SERIALISE_MEMBER(description);
SERIALISE_MEMBER(resultType);
SERIALISE_MEMBER(resultByteWidth);
SERIALISE_MEMBER(unit);
SERIALISE_MEMBER(uuid);
SIZE_CHECK(112);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, PixelValue &el)
{
SERIALISE_MEMBER(uintValue);
SIZE_CHECK(16);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, Subresource &el)
{
SERIALISE_MEMBER(mip);
SERIALISE_MEMBER(slice);
SERIALISE_MEMBER(sample);
SIZE_CHECK(12);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, ModificationValue &el)
{
SERIALISE_MEMBER(col);
SERIALISE_MEMBER(depth);
SERIALISE_MEMBER(stencil);
SIZE_CHECK(24);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, PixelModification &el)
{
SERIALISE_MEMBER(eventId);
SERIALISE_MEMBER(directShaderWrite);
SERIALISE_MEMBER(unboundPS);
SERIALISE_MEMBER(fragIndex);
SERIALISE_MEMBER(primitiveID);
SERIALISE_MEMBER(preMod);
SERIALISE_MEMBER(shaderOut);
SERIALISE_MEMBER(postMod);
SERIALISE_MEMBER(sampleMasked);
SERIALISE_MEMBER(backfaceCulled);
SERIALISE_MEMBER(depthClipped);
SERIALISE_MEMBER(depthBoundsFailed);
SERIALISE_MEMBER(viewClipped);
SERIALISE_MEMBER(scissorClipped);
SERIALISE_MEMBER(shaderDiscarded);
SERIALISE_MEMBER(depthTestFailed);
SERIALISE_MEMBER(stencilTestFailed);
SERIALISE_MEMBER(predicationSkipped);
SIZE_CHECK(100);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, EventUsage &el)
{
SERIALISE_MEMBER(eventId);
SERIALISE_MEMBER(usage);
SERIALISE_MEMBER(view);
SIZE_CHECK(16);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, CounterResult &el)
{
SERIALISE_MEMBER(eventId);
SERIALISE_MEMBER(counter);
SERIALISE_MEMBER(value);
SIZE_CHECK(16);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, CounterValue &el)
{
SERIALISE_MEMBER(u64);
SIZE_CHECK(8);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, GPUDevice &el)
{
SERIALISE_MEMBER(vendor);
SERIALISE_MEMBER(deviceID);
SERIALISE_MEMBER(driver);
SERIALISE_MEMBER(name);
SERIALISE_MEMBER(apis);
SIZE_CHECK(80);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, ReplayOptions &el)
{
SERIALISE_MEMBER(apiValidation);
SERIALISE_MEMBER(forceGPUVendor);
SERIALISE_MEMBER(forceGPUDeviceID);
SERIALISE_MEMBER(forceGPUDriverName);
SERIALISE_MEMBER(optimisation);
SIZE_CHECK(48);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, DebugPixelInputs &el)
{
SERIALISE_MEMBER(sample);
SERIALISE_MEMBER(primitive);
SERIALISE_MEMBER(view);
SIZE_CHECK(12);
}
#pragma region Common pipeline state
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, Viewport &el)
{
SERIALISE_MEMBER(enabled);
SERIALISE_MEMBER(x);
SERIALISE_MEMBER(y);
SERIALISE_MEMBER(width);
SERIALISE_MEMBER(height);
SERIALISE_MEMBER(minDepth);
SERIALISE_MEMBER(maxDepth);
SIZE_CHECK(28);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, Scissor &el)
{
SERIALISE_MEMBER(x);
SERIALISE_MEMBER(y);
SERIALISE_MEMBER(width);
SERIALISE_MEMBER(height);
SERIALISE_MEMBER(enabled);
SIZE_CHECK(20);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, BlendEquation &el)
{
SERIALISE_MEMBER(source);
SERIALISE_MEMBER(destination);
SERIALISE_MEMBER(operation);
SIZE_CHECK(12);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, ColorBlend &el)
{
SERIALISE_MEMBER(colorBlend);
SERIALISE_MEMBER(alphaBlend);
SERIALISE_MEMBER(logicOperation);
SERIALISE_MEMBER(enabled);
SERIALISE_MEMBER(logicOperationEnabled);
SERIALISE_MEMBER(writeMask);
SIZE_CHECK(32);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, DescriptorRange &el)
{
SERIALISE_MEMBER(offset);
SERIALISE_MEMBER(descriptorSize);
SERIALISE_MEMBER(count);
SIZE_CHECK(12);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, Descriptor &el)
{
SERIALISE_MEMBER(type);
SERIALISE_MEMBER(flags);
SERIALISE_MEMBER(format);
SERIALISE_MEMBER(resource);
SERIALISE_MEMBER(secondary);
SERIALISE_MEMBER(view);
SERIALISE_MEMBER(byteOffset);
SERIALISE_MEMBER(byteSize);
SERIALISE_MEMBER(counterByteOffset);
SERIALISE_MEMBER(bufferStructCount);
SERIALISE_MEMBER(elementByteSize);
SERIALISE_MEMBER(minLODClamp);
SERIALISE_MEMBER(firstSlice);
SERIALISE_MEMBER(numSlices);
SERIALISE_MEMBER(firstMip);
SERIALISE_MEMBER(numMips);
SERIALISE_MEMBER(swizzle);
SERIALISE_MEMBER(textureType);
SIZE_CHECK(80);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, SamplerDescriptor &el)
{
SERIALISE_MEMBER(object);
SERIALISE_MEMBER(type);
SERIALISE_MEMBER(addressU);
SERIALISE_MEMBER(addressV);
SERIALISE_MEMBER(addressW);
SERIALISE_MEMBER(compareFunction);
SERIALISE_MEMBER(filter);
SERIALISE_MEMBER(srgbBorder);
SERIALISE_MEMBER(seamlessCubemaps);
SERIALISE_MEMBER(unnormalized);
SERIALISE_MEMBER(maxAnisotropy);
SERIALISE_MEMBER(maxLOD);
SERIALISE_MEMBER(minLOD);
SERIALISE_MEMBER(mipBias);
SERIALISE_MEMBER(borderColorValue);
SERIALISE_MEMBER(borderColorType);
SERIALISE_MEMBER(swizzle);
SERIALISE_MEMBER(ycbcrModel);
SERIALISE_MEMBER(ycbcrRange);
SERIALISE_MEMBER(xChromaOffset);
SERIALISE_MEMBER(yChromaOffset);
SERIALISE_MEMBER(chromaFilter);
SERIALISE_MEMBER(forceExplicitReconstruction);
SERIALISE_MEMBER(creationTimeConstant);
SERIALISE_MEMBER(ycbcrSampler);
SIZE_CHECK(72);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, DescriptorAccess &el)
{
SERIALISE_MEMBER(stage);
SERIALISE_MEMBER(type);
SERIALISE_MEMBER(index);
SERIALISE_MEMBER(arrayElement);
SERIALISE_MEMBER(descriptorStore);
SERIALISE_MEMBER(byteOffset);
SERIALISE_MEMBER(byteSize);
SERIALISE_MEMBER(staticallyUnused);
SIZE_CHECK(32);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, DescriptorLogicalLocation &el)
{
SERIALISE_MEMBER(stageMask);
SERIALISE_MEMBER(category);
SERIALISE_MEMBER(fixedBindNumber);
SERIALISE_MEMBER(logicalBindName);
SIZE_CHECK(16);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, StencilFace &el)
{
SERIALISE_MEMBER(failOperation);
SERIALISE_MEMBER(depthFailOperation);
SERIALISE_MEMBER(passOperation);
SERIALISE_MEMBER(function);
SERIALISE_MEMBER(reference);
SERIALISE_MEMBER(compareMask);
SERIALISE_MEMBER(writeMask);
SIZE_CHECK(28);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, ShaderMeshMessageLocation &el)
{
SERIALISE_MEMBER(taskGroup);
SERIALISE_MEMBER(meshGroup);
SERIALISE_MEMBER(thread);
SIZE_CHECK(36);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, ShaderComputeMessageLocation &el)
{
SERIALISE_MEMBER(workgroup);
SERIALISE_MEMBER(thread);
SIZE_CHECK(24);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, ShaderVertexMessageLocation &el)
{
SERIALISE_MEMBER(vertexIndex);
SERIALISE_MEMBER(instance);
SERIALISE_MEMBER(view);
SIZE_CHECK(12);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, ShaderPixelMessageLocation &el)
{
SERIALISE_MEMBER(x);
SERIALISE_MEMBER(y);
SERIALISE_MEMBER(sample);
SERIALISE_MEMBER(primitive);
SERIALISE_MEMBER(view);
SIZE_CHECK(20);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, ShaderGeometryMessageLocation &el)
{
SERIALISE_MEMBER(primitive);
SIZE_CHECK(4);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, ShaderMessageLocation &el)
{
SERIALISE_MEMBER(mesh);
SIZE_CHECK(36);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, ShaderMessage &el)
{
SERIALISE_MEMBER(stage);
SERIALISE_MEMBER(location);
SERIALISE_MEMBER(message);
SIZE_CHECK(72);
}
#pragma endregion
#pragma region D3D11 pipeline state
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, D3D11Pipe::Layout &el)
{
SERIALISE_MEMBER(semanticName);
SERIALISE_MEMBER(semanticIndex);
SERIALISE_MEMBER(format);
SERIALISE_MEMBER(inputSlot);
SERIALISE_MEMBER(byteOffset);
SERIALISE_MEMBER(perInstance);
SERIALISE_MEMBER(instanceDataStepRate);
SIZE_CHECK(56);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, D3D11Pipe::VertexBuffer &el)
{
SERIALISE_MEMBER(resourceId);
SERIALISE_MEMBER(byteOffset);
SERIALISE_MEMBER(byteStride);
SIZE_CHECK(16);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, D3D11Pipe::IndexBuffer &el)
{
SERIALISE_MEMBER(resourceId);
SERIALISE_MEMBER(byteOffset);
SERIALISE_MEMBER(byteStride);
SIZE_CHECK(16);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, D3D11Pipe::InputAssembly &el)
{
SERIALISE_MEMBER(layouts);
SERIALISE_MEMBER(resourceId);
// don't serialise bytecode, just set it to NULL. See the definition of SERIALISE_MEMBER_DUMMY
SERIALISE_MEMBER_OPT_EMPTY(bytecode);
SERIALISE_MEMBER(vertexBuffers);
SERIALISE_MEMBER(indexBuffer);
SERIALISE_MEMBER(topology);
SIZE_CHECK(88);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, D3D11Pipe::Shader &el)
{
SERIALISE_MEMBER(resourceId);
// don't serialise reflection, just set it to NULL. See the definition of SERIALISE_MEMBER_DUMMY
SERIALISE_MEMBER_OPT_EMPTY(reflection);
SERIALISE_MEMBER(stage);
SERIALISE_MEMBER(classInstances);
SIZE_CHECK(48);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, D3D11Pipe::StreamOutBind &el)
{
SERIALISE_MEMBER(resourceId);
SERIALISE_MEMBER(byteOffset);
SIZE_CHECK(16);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, D3D11Pipe::StreamOut &el)
{
SERIALISE_MEMBER(outputs);
SERIALISE_MEMBER(rasterizedStream);
SIZE_CHECK(32);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, D3D11Pipe::RasterizerState &el)
{
SERIALISE_MEMBER(resourceId);
SERIALISE_MEMBER(fillMode);
SERIALISE_MEMBER(cullMode);
SERIALISE_MEMBER(frontCCW);
SERIALISE_MEMBER(depthBias);
SERIALISE_MEMBER(depthBiasClamp);
SERIALISE_MEMBER(slopeScaledDepthBias);
SERIALISE_MEMBER(depthClip);
SERIALISE_MEMBER(scissorEnable);
SERIALISE_MEMBER(multisampleEnable);
SERIALISE_MEMBER(antialiasedLines);
SERIALISE_MEMBER(forcedSampleCount);
SERIALISE_MEMBER(conservativeRasterization);
SIZE_CHECK(48);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, D3D11Pipe::Rasterizer &el)
{
SERIALISE_MEMBER(viewports);
SERIALISE_MEMBER(scissors);
SERIALISE_MEMBER(state);
SIZE_CHECK(96);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, D3D11Pipe::DepthStencilState &el)
{
SERIALISE_MEMBER(resourceId);
SERIALISE_MEMBER(depthEnable);
SERIALISE_MEMBER(depthFunction);
SERIALISE_MEMBER(depthWrites);
SERIALISE_MEMBER(stencilEnable);
SERIALISE_MEMBER(frontFace);
SERIALISE_MEMBER(backFace);
SIZE_CHECK(72);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, D3D11Pipe::BlendState &el)
{
SERIALISE_MEMBER(resourceId);
SERIALISE_MEMBER(alphaToCoverage);
SERIALISE_MEMBER(independentBlend);
SERIALISE_MEMBER(blends);
SERIALISE_MEMBER(blendFactor);
SERIALISE_MEMBER(sampleMask);
SIZE_CHECK(64);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, D3D11Pipe::OutputMerger &el)
{
SERIALISE_MEMBER(depthStencilState);
SERIALISE_MEMBER(blendState);
SERIALISE_MEMBER(renderTargets);
SERIALISE_MEMBER(uavStartSlot);
SERIALISE_MEMBER(depthTarget);
SERIALISE_MEMBER(depthReadOnly);
SERIALISE_MEMBER(stencilReadOnly);
SIZE_CHECK(256);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, D3D11Pipe::Predication &el)
{
SERIALISE_MEMBER(resourceId);
SERIALISE_MEMBER(value);
SERIALISE_MEMBER(isPassing);
SIZE_CHECK(16);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, D3D11Pipe::State &el)
{
SERIALISE_MEMBER(inputAssembly);
SERIALISE_MEMBER(vertexShader);
SERIALISE_MEMBER(hullShader);
SERIALISE_MEMBER(domainShader);
SERIALISE_MEMBER(geometryShader);
SERIALISE_MEMBER(pixelShader);
SERIALISE_MEMBER(computeShader);
SERIALISE_MEMBER(descriptorStore);
SERIALISE_MEMBER(descriptorCount);
SERIALISE_MEMBER(descriptorByteSize);
SERIALISE_MEMBER(streamOut);
SERIALISE_MEMBER(rasterizer);
SERIALISE_MEMBER(outputMerger);
SERIALISE_MEMBER(predication);
SIZE_CHECK(792);
}
#pragma endregion D3D11 pipeline state
#pragma region D3D12 pipeline state
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, D3D12Pipe::Layout &el)
{
SERIALISE_MEMBER(semanticName);
SERIALISE_MEMBER(semanticIndex);
SERIALISE_MEMBER(format);
SERIALISE_MEMBER(inputSlot);
SERIALISE_MEMBER(byteOffset);
SERIALISE_MEMBER(perInstance);
SERIALISE_MEMBER(instanceDataStepRate);
SIZE_CHECK(56);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, D3D12Pipe::VertexBuffer &el)
{
SERIALISE_MEMBER(resourceId);
SERIALISE_MEMBER(byteOffset);
SERIALISE_MEMBER(byteSize);
SERIALISE_MEMBER(byteStride);
SIZE_CHECK(24);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, D3D12Pipe::IndexBuffer &el)
{
SERIALISE_MEMBER(resourceId);
SERIALISE_MEMBER(byteOffset);
SERIALISE_MEMBER(byteSize);
SERIALISE_MEMBER(byteStride);
SIZE_CHECK(24);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, D3D12Pipe::InputAssembly &el)
{
SERIALISE_MEMBER(layouts);
SERIALISE_MEMBER(vertexBuffers);
SERIALISE_MEMBER(indexBuffer);
SERIALISE_MEMBER(indexStripCutValue);
SERIALISE_MEMBER(topology);
SIZE_CHECK(80);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, D3D12Pipe::Shader &el)
{
SERIALISE_MEMBER(resourceId);
// don't serialise reflection, just set it to NULL. See the definition of SERIALISE_MEMBER_DUMMY
SERIALISE_MEMBER_OPT_EMPTY(reflection);
SERIALISE_MEMBER(stage);
SIZE_CHECK(24);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, D3D12Pipe::StreamOutBind &el)
{
SERIALISE_MEMBER(resourceId);
SERIALISE_MEMBER(byteOffset);
SERIALISE_MEMBER(byteSize);
SERIALISE_MEMBER(writtenCountResourceId);
SERIALISE_MEMBER(writtenCountByteOffset);
SIZE_CHECK(40);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, D3D12Pipe::StreamOut &el)
{
SERIALISE_MEMBER(outputs);
SERIALISE_MEMBER(rasterizedStream);
SIZE_CHECK(32);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, D3D12Pipe::RasterizerState &el)
{
SERIALISE_MEMBER(fillMode);
SERIALISE_MEMBER(cullMode);
SERIALISE_MEMBER(frontCCW);
SERIALISE_MEMBER(depthBias);
SERIALISE_MEMBER(depthBiasClamp);
SERIALISE_MEMBER(slopeScaledDepthBias);
SERIALISE_MEMBER(depthClip);
SERIALISE_MEMBER(lineRasterMode);
SERIALISE_MEMBER(forcedSampleCount);
SERIALISE_MEMBER(conservativeRasterization);
SERIALISE_MEMBER(baseShadingRate);
SERIALISE_MEMBER(shadingRateCombiners);
SERIALISE_MEMBER(shadingRateImage);
SIZE_CHECK(64);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, D3D12Pipe::Rasterizer &el)
{
SERIALISE_MEMBER(sampleMask);
SERIALISE_MEMBER(viewports);
SERIALISE_MEMBER(scissors);
SERIALISE_MEMBER(state);
SIZE_CHECK(120);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, D3D12Pipe::DepthStencilState &el)
{
SERIALISE_MEMBER(depthEnable);
SERIALISE_MEMBER(depthWrites);
SERIALISE_MEMBER(depthBoundsEnable);
SERIALISE_MEMBER(depthFunction);
SERIALISE_MEMBER(stencilEnable);
SERIALISE_MEMBER(frontFace);
SERIALISE_MEMBER(backFace);
SERIALISE_MEMBER(minDepthBounds);
SERIALISE_MEMBER(maxDepthBounds);
SIZE_CHECK(72);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, D3D12Pipe::BlendState &el)
{
SERIALISE_MEMBER(alphaToCoverage);
SERIALISE_MEMBER(independentBlend);
SERIALISE_MEMBER(blends);
SERIALISE_MEMBER(blendFactor);
SIZE_CHECK(48);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, D3D12Pipe::OM &el)
{
SERIALISE_MEMBER(depthStencilState);
SERIALISE_MEMBER(blendState);
SERIALISE_MEMBER(renderTargets);
SERIALISE_MEMBER(depthTarget);
SERIALISE_MEMBER(depthReadOnly);
SERIALISE_MEMBER(stencilReadOnly);
SERIALISE_MEMBER(multiSampleCount);
SERIALISE_MEMBER(multiSampleQuality);
SIZE_CHECK(240);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, D3D12Pipe::ResourceState &el)
{
SERIALISE_MEMBER(name);
SIZE_CHECK(24);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, D3D12Pipe::ResourceData &el)
{
SERIALISE_MEMBER(resourceId);
SERIALISE_MEMBER(states);
SIZE_CHECK(32);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, D3D12Pipe::RootTableRange &el)
{
SERIALISE_MEMBER(category);
SERIALISE_MEMBER(space);
SERIALISE_MEMBER(baseRegister);
SERIALISE_MEMBER(count);
SERIALISE_MEMBER(tableByteOffset);
SERIALISE_MEMBER(appended);
SIZE_CHECK(24);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, D3D12Pipe::RootParam &el)
{
SERIALISE_MEMBER(visibility);
SERIALISE_MEMBER(constants);
SERIALISE_MEMBER(descriptor);
SERIALISE_MEMBER(heap);
SERIALISE_MEMBER(heapByteOffset);
SERIALISE_MEMBER(tableRanges);
SIZE_CHECK(152);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, D3D12Pipe::StaticSampler &el)
{
SERIALISE_MEMBER(visibility);
SERIALISE_MEMBER(space);
SERIALISE_MEMBER(reg);
SERIALISE_MEMBER(descriptor);
SIZE_CHECK(88);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, D3D12Pipe::RootSignature &el)
{
SERIALISE_MEMBER(resourceId);
SERIALISE_MEMBER(parameters);
SERIALISE_MEMBER(staticSamplers);
SIZE_CHECK(56);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, D3D12Pipe::State &el)
{
SERIALISE_MEMBER(pipelineResourceId);
SERIALISE_MEMBER(descriptorHeaps);
SERIALISE_MEMBER(rootSignature);
SERIALISE_MEMBER(inputAssembly);
SERIALISE_MEMBER(vertexShader);
SERIALISE_MEMBER(hullShader);
SERIALISE_MEMBER(domainShader);
SERIALISE_MEMBER(geometryShader);
SERIALISE_MEMBER(pixelShader);
SERIALISE_MEMBER(computeShader);
SERIALISE_MEMBER(ampShader);
SERIALISE_MEMBER(meshShader);
SERIALISE_MEMBER(streamOut);
SERIALISE_MEMBER(rasterizer);
SERIALISE_MEMBER(outputMerger);
SERIALISE_MEMBER(resourceStates);
SIZE_CHECK(776);
}
#pragma endregion D3D12 pipeline state
#pragma region OpenGL pipeline state
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, GLPipe::VertexAttribute &el)
{
SERIALISE_MEMBER(enabled);
SERIALISE_MEMBER(floatCast);
SERIALISE_MEMBER(boundShaderInput);
SERIALISE_MEMBER(format);
SERIALISE_MEMBER(genericValue);
SERIALISE_MEMBER(vertexBufferSlot);
SERIALISE_MEMBER(byteOffset);
SIZE_CHECK(40);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, GLPipe::VertexBuffer &el)
{
SERIALISE_MEMBER(resourceId);
SERIALISE_MEMBER(byteStride);
SERIALISE_MEMBER(byteOffset);
SERIALISE_MEMBER(instanceDivisor);
SIZE_CHECK(24);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, GLPipe::VertexInput &el)
{
SERIALISE_MEMBER(vertexArrayObject);
SERIALISE_MEMBER(attributes);
SERIALISE_MEMBER(vertexBuffers);
SERIALISE_MEMBER(indexBuffer);
SERIALISE_MEMBER(indexByteStride);
SERIALISE_MEMBER(topology);
SERIALISE_MEMBER(primitiveRestart);
SERIALISE_MEMBER(restartIndex);
SERIALISE_MEMBER(provokingVertexLast);
SIZE_CHECK(88);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, GLPipe::Shader &el)
{
SERIALISE_MEMBER(shaderResourceId);
SERIALISE_MEMBER(programResourceId);
// don't serialise reflection, just set it to NULL. See the definition of SERIALISE_MEMBER_DUMMY
SERIALISE_MEMBER_OPT_EMPTY(reflection);
SERIALISE_MEMBER(stage);
SERIALISE_MEMBER(subroutines);
SIZE_CHECK(56);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, GLPipe::FixedVertexProcessing &el)
{
SERIALISE_MEMBER(defaultInnerLevel);
SERIALISE_MEMBER(defaultOuterLevel);
SERIALISE_MEMBER(discard);
SERIALISE_MEMBER(clipPlanes);
SERIALISE_MEMBER(clipOriginLowerLeft);
SERIALISE_MEMBER(clipNegativeOneToOne);
SIZE_CHECK(36);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, GLPipe::TextureCompleteness &el)
{
SERIALISE_MEMBER(descriptorByteOffset);
SERIALISE_MEMBER(completeStatus);
SERIALISE_MEMBER(typeConflict);
SIZE_CHECK(56);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, GLPipe::Feedback &el)
{
SERIALISE_MEMBER(feedbackResourceId);
SERIALISE_MEMBER(bufferResourceId);
SERIALISE_MEMBER(byteOffset);
SERIALISE_MEMBER(byteSize);
SERIALISE_MEMBER(active);
SERIALISE_MEMBER(paused);
SIZE_CHECK(112);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, GLPipe::RasterizerState &el)
{
SERIALISE_MEMBER(fillMode);
SERIALISE_MEMBER(cullMode);
SERIALISE_MEMBER(frontCCW);
SERIALISE_MEMBER(depthBias);
SERIALISE_MEMBER(slopeScaledDepthBias);
SERIALISE_MEMBER(offsetClamp);
SERIALISE_MEMBER(depthClamp);
SERIALISE_MEMBER(multisampleEnable);
SERIALISE_MEMBER(sampleShading);
SERIALISE_MEMBER(sampleMask);
SERIALISE_MEMBER(sampleMaskValue);
SERIALISE_MEMBER(sampleCoverage);
SERIALISE_MEMBER(sampleCoverageInvert);
SERIALISE_MEMBER(sampleCoverageValue);
SERIALISE_MEMBER(alphaToCoverage);
SERIALISE_MEMBER(alphaToOne);
SERIALISE_MEMBER(minSampleShadingRate);
SERIALISE_MEMBER(programmablePointSize);
SERIALISE_MEMBER(pointSize);
SERIALISE_MEMBER(lineWidth);
SERIALISE_MEMBER(pointFadeThreshold);
SERIALISE_MEMBER(pointOriginUpperLeft);
SIZE_CHECK(68);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, GLPipe::Rasterizer &el)
{
SERIALISE_MEMBER(viewports);
SERIALISE_MEMBER(scissors);
SERIALISE_MEMBER(state);
SIZE_CHECK(120);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, GLPipe::DepthState &el)
{
SERIALISE_MEMBER(depthEnable);
SERIALISE_MEMBER(depthFunction);
SERIALISE_MEMBER(depthWrites);
SERIALISE_MEMBER(depthBounds);
SERIALISE_MEMBER(nearBound);
SERIALISE_MEMBER(farBound);
SIZE_CHECK(24);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, GLPipe::StencilState &el)
{
SERIALISE_MEMBER(stencilEnable);
SERIALISE_MEMBER(frontFace);
SERIALISE_MEMBER(backFace);
SIZE_CHECK(60);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, GLPipe::FBO &el)
{
SERIALISE_MEMBER(resourceId);
SERIALISE_MEMBER(colorAttachments);
SERIALISE_MEMBER(depthAttachment);
SERIALISE_MEMBER(stencilAttachment);
SERIALISE_MEMBER(drawBuffers);
SERIALISE_MEMBER(readBuffer);
SIZE_CHECK(224);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, GLPipe::BlendState &el)
{
SERIALISE_MEMBER(blends);
SERIALISE_MEMBER(blendFactor);
SIZE_CHECK(40);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, GLPipe::FrameBuffer &el)
{
SERIALISE_MEMBER(framebufferSRGB);
SERIALISE_MEMBER(dither);
SERIALISE_MEMBER(drawFBO);
SERIALISE_MEMBER(readFBO);
SERIALISE_MEMBER(blendState);
SIZE_CHECK(496);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, GLPipe::Hints &el)
{
SERIALISE_MEMBER(derivatives);
SERIALISE_MEMBER(lineSmoothing);
SERIALISE_MEMBER(polySmoothing);
SERIALISE_MEMBER(textureCompression);
SERIALISE_MEMBER(lineSmoothingEnabled);
SERIALISE_MEMBER(polySmoothingEnabled);
SIZE_CHECK(20);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, GLPipe::State &el)
{
SERIALISE_MEMBER(vertexInput);
SERIALISE_MEMBER(vertexShader);
SERIALISE_MEMBER(tessControlShader);
SERIALISE_MEMBER(tessEvalShader);
SERIALISE_MEMBER(geometryShader);
SERIALISE_MEMBER(fragmentShader);
SERIALISE_MEMBER(computeShader);
SERIALISE_MEMBER(pipelineResourceId);
SERIALISE_MEMBER(vertexProcessing);
SERIALISE_MEMBER(descriptorStore);
SERIALISE_MEMBER(descriptorCount);
SERIALISE_MEMBER(descriptorByteSize);
SERIALISE_MEMBER(textureCompleteness);
SERIALISE_MEMBER(transformFeedback);
SERIALISE_MEMBER(rasterizer);
SERIALISE_MEMBER(depthState);
SERIALISE_MEMBER(stencilState);
SERIALISE_MEMBER(framebuffer);
SERIALISE_MEMBER(hints);
SIZE_CHECK(1352);
}
#pragma endregion OpenGL pipeline state
#pragma region Vulkan pipeline state
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, VKPipe::DynamicOffset &el)
{
SERIALISE_MEMBER(descriptorByteOffset);
SERIALISE_MEMBER(dynamicBufferByteOffset);
SIZE_CHECK(16);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, VKPipe::DescriptorSet &el)
{
SERIALISE_MEMBER(layoutResourceId);
SERIALISE_MEMBER(descriptorSetResourceId);
SERIALISE_MEMBER(pushDescriptor);
SERIALISE_MEMBER(dynamicOffsets);
SIZE_CHECK(48);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, VKPipe::Pipeline &el)
{
SERIALISE_MEMBER(pipelineResourceId);
SERIALISE_MEMBER(pipelineComputeLayoutResourceId);
SERIALISE_MEMBER(pipelinePreRastLayoutResourceId);
SERIALISE_MEMBER(pipelineFragmentLayoutResourceId);
SERIALISE_MEMBER(flags);
SERIALISE_MEMBER(descriptorSets);
SIZE_CHECK(64);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, VKPipe::IndexBuffer &el)
{
SERIALISE_MEMBER(resourceId);
SERIALISE_MEMBER(byteOffset);
SERIALISE_MEMBER(byteStride);
SIZE_CHECK(24);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, VKPipe::InputAssembly &el)
{
SERIALISE_MEMBER(primitiveRestartEnable);
SERIALISE_MEMBER(indexBuffer);
SERIALISE_MEMBER(topology);
SIZE_CHECK(40);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, VKPipe::VertexAttribute &el)
{
SERIALISE_MEMBER(location);
SERIALISE_MEMBER(binding);
SERIALISE_MEMBER(format);
SERIALISE_MEMBER(byteOffset);
SIZE_CHECK(20);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, VKPipe::VertexBinding &el)
{
SERIALISE_MEMBER(vertexBufferBinding);
SERIALISE_MEMBER(perInstance);
SERIALISE_MEMBER(instanceDivisor);
SIZE_CHECK(12);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, VKPipe::VertexBuffer &el)
{
SERIALISE_MEMBER(resourceId);
SERIALISE_MEMBER(byteOffset);
SERIALISE_MEMBER(byteStride);
SERIALISE_MEMBER(byteSize);
SIZE_CHECK(24);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, VKPipe::VertexInput &el)
{
SERIALISE_MEMBER(attributes);
SERIALISE_MEMBER(bindings);
SERIALISE_MEMBER(vertexBuffers);
SIZE_CHECK(72);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, VKPipe::Shader &el)
{
SERIALISE_MEMBER(resourceId);
SERIALISE_MEMBER(entryPoint);
// don't serialise reflection, just set it to NULL. See the definition of SERIALISE_MEMBER_DUMMY
SERIALISE_MEMBER_OPT_EMPTY(reflection);
SERIALISE_MEMBER(stage);
SERIALISE_MEMBER(pushConstantRangeByteOffset);
SERIALISE_MEMBER(pushConstantRangeByteSize);
SERIALISE_MEMBER(specializationData);
SERIALISE_MEMBER(specializationIds);
SIZE_CHECK(104);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, VKPipe::Tessellation &el)
{
SERIALISE_MEMBER(numControlPoints);
SERIALISE_MEMBER(domainOriginUpperLeft);
SIZE_CHECK(8);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, VKPipe::XFBBuffer &el)
{
SERIALISE_MEMBER(active);
SERIALISE_MEMBER(bufferResourceId);
SERIALISE_MEMBER(byteOffset);
SERIALISE_MEMBER(byteSize);
SERIALISE_MEMBER(counterBufferResourceId);
SERIALISE_MEMBER(counterBufferOffset);
SIZE_CHECK(16);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, VKPipe::TransformFeedback &el)
{
SERIALISE_MEMBER(buffers);
SERIALISE_MEMBER(rasterizedStream);
SIZE_CHECK(24);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, VKPipe::ViewportScissor &el)
{
SERIALISE_MEMBER(vp);
SERIALISE_MEMBER(scissor);
SIZE_CHECK(48);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, VKPipe::ViewState &el)
{
SERIALISE_MEMBER(viewportScissors);
SERIALISE_MEMBER(discardRectangles);
SERIALISE_MEMBER(discardRectanglesExclusive);
SERIALISE_MEMBER(depthNegativeOneToOne);
SIZE_CHECK(56);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, VKPipe::Rasterizer &el)
{
SERIALISE_MEMBER(depthClampEnable);
SERIALISE_MEMBER(depthClipEnable);
SERIALISE_MEMBER(rasterizerDiscardEnable);
SERIALISE_MEMBER(frontCCW);
SERIALISE_MEMBER(fillMode);
SERIALISE_MEMBER(cullMode);
SERIALISE_MEMBER(conservativeRasterization);
SERIALISE_MEMBER(extraPrimitiveOverestimationSize);
SERIALISE_MEMBER(provokingVertexFirst);
SERIALISE_MEMBER(depthBiasEnable);
SERIALISE_MEMBER(depthBias);
SERIALISE_MEMBER(depthBiasClamp);
SERIALISE_MEMBER(slopeScaledDepthBias);
SERIALISE_MEMBER(lineWidth);
SERIALISE_MEMBER(lineRasterMode);
SERIALISE_MEMBER(lineStippleFactor);
SERIALISE_MEMBER(lineStipplePattern);
SERIALISE_MEMBER(pipelineShadingRate);
SERIALISE_MEMBER(shadingRateCombiners);
SIZE_CHECK(68);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, VKPipe::SampleLocations &el)
{
SERIALISE_MEMBER(gridWidth);
SERIALISE_MEMBER(gridHeight);
SERIALISE_MEMBER(customLocations);
SIZE_CHECK(32);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, VKPipe::MultiSample &el)
{
SERIALISE_MEMBER(rasterSamples);
SERIALISE_MEMBER(sampleShadingEnable);
SERIALISE_MEMBER(minSampleShading);
SERIALISE_MEMBER(sampleMask);
SERIALISE_MEMBER(sampleLocations);
SIZE_CHECK(48);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, VKPipe::ColorBlendState &el)
{
SERIALISE_MEMBER(alphaToCoverageEnable);
SERIALISE_MEMBER(alphaToOneEnable);
SERIALISE_MEMBER(blends);
SERIALISE_MEMBER(blendFactor);
SIZE_CHECK(48);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, VKPipe::DepthStencil &el)
{
SERIALISE_MEMBER(depthTestEnable);
SERIALISE_MEMBER(depthWriteEnable);
SERIALISE_MEMBER(depthBoundsEnable);
SERIALISE_MEMBER(depthFunction);
SERIALISE_MEMBER(stencilTestEnable);
SERIALISE_MEMBER(frontFace);
SERIALISE_MEMBER(backFace);
SERIALISE_MEMBER(minDepthBounds);
SERIALISE_MEMBER(maxDepthBounds);
SIZE_CHECK(72);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, VKPipe::RenderPass &el)
{
SERIALISE_MEMBER(resourceId);
SERIALISE_MEMBER(subpass);
SERIALISE_MEMBER(inputAttachments);
SERIALISE_MEMBER(colorAttachments);
SERIALISE_MEMBER(resolveAttachments);
SERIALISE_MEMBER(depthstencilAttachment);
SERIALISE_MEMBER(depthstencilResolveAttachment);
SERIALISE_MEMBER(fragmentDensityAttachment);
SERIALISE_MEMBER(shadingRateAttachment);
SERIALISE_MEMBER(shadingRateTexelSize);
SERIALISE_MEMBER(multiviews);
SERIALISE_MEMBER(fragmentDensityOffsets);
SERIALISE_MEMBER(tileOnlyMSAASampleCount);
SIZE_CHECK(168);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, VKPipe::Framebuffer &el)
{
SERIALISE_MEMBER(resourceId);
SERIALISE_MEMBER(attachments);
SERIALISE_MEMBER(width);
SERIALISE_MEMBER(height);
SERIALISE_MEMBER(layers);
SIZE_CHECK(48);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, VKPipe::RenderArea &el)
{
SERIALISE_MEMBER(x);
SERIALISE_MEMBER(y);
SERIALISE_MEMBER(width);
SERIALISE_MEMBER(height);
SIZE_CHECK(16);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, VKPipe::CurrentPass &el)
{
SERIALISE_MEMBER(renderpass);
SERIALISE_MEMBER(framebuffer);
SERIALISE_MEMBER(renderArea);
SERIALISE_MEMBER(colorFeedbackAllowed);
SERIALISE_MEMBER(depthFeedbackAllowed);
SERIALISE_MEMBER(stencilFeedbackAllowed);
SIZE_CHECK(240);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, VKPipe::ImageLayout &el)
{
SERIALISE_MEMBER(baseMip);
SERIALISE_MEMBER(baseLayer);
SERIALISE_MEMBER(numMip);
SERIALISE_MEMBER(numLayer);
SERIALISE_MEMBER(name);
SIZE_CHECK(40);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, VKPipe::ImageData &el)
{
SERIALISE_MEMBER(resourceId);
SERIALISE_MEMBER(layouts);
SIZE_CHECK(32);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, VKPipe::ConditionalRendering &el)
{
SERIALISE_MEMBER(bufferId);
SERIALISE_MEMBER(byteOffset);
SERIALISE_MEMBER(isInverted);
SERIALISE_MEMBER(isPassing);
SIZE_CHECK(24);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, VKPipe::State &el)
{
SERIALISE_MEMBER(compute);
SERIALISE_MEMBER(graphics);
SERIALISE_MEMBER(pushconsts);
SERIALISE_MEMBER(inputAssembly);
SERIALISE_MEMBER(vertexInput);
SERIALISE_MEMBER(vertexShader);
SERIALISE_MEMBER(tessControlShader);
SERIALISE_MEMBER(tessEvalShader);
SERIALISE_MEMBER(geometryShader);
SERIALISE_MEMBER(fragmentShader);
SERIALISE_MEMBER(computeShader);
SERIALISE_MEMBER(taskShader);
SERIALISE_MEMBER(meshShader);
SERIALISE_MEMBER(tessellation);
SERIALISE_MEMBER(viewportScissor);
SERIALISE_MEMBER(rasterizer);
SERIALISE_MEMBER(multisample);
SERIALISE_MEMBER(colorBlend);
SERIALISE_MEMBER(depthStencil);
SERIALISE_MEMBER(currentPass);
SERIALISE_MEMBER(images);
SERIALISE_MEMBER(shaderMessages);
SERIALISE_MEMBER(conditionalRendering);
SIZE_CHECK(1744);
}
#pragma endregion Vulkan pipeline state
INSTANTIATE_SERIALISE_TYPE(PathEntry)
INSTANTIATE_SERIALISE_TYPE(SectionProperties)
INSTANTIATE_SERIALISE_TYPE(EnvironmentModification)
INSTANTIATE_SERIALISE_TYPE(CaptureOptions)
INSTANTIATE_SERIALISE_TYPE(ResourceFormat)
INSTANTIATE_SERIALISE_TYPE(SigParameter)
INSTANTIATE_SERIALISE_TYPE(ShaderConstantType)
INSTANTIATE_SERIALISE_TYPE(ShaderConstant)
INSTANTIATE_SERIALISE_TYPE(ConstantBlock)
INSTANTIATE_SERIALISE_TYPE(ShaderSampler)
INSTANTIATE_SERIALISE_TYPE(ShaderMessage);
INSTANTIATE_SERIALISE_TYPE(ShaderResource)
INSTANTIATE_SERIALISE_TYPE(ShaderEntryPoint)
INSTANTIATE_SERIALISE_TYPE(ShaderCompileFlags)
INSTANTIATE_SERIALISE_TYPE(ShaderDebugInfo)
INSTANTIATE_SERIALISE_TYPE(ShaderReflection)
INSTANTIATE_SERIALISE_TYPE(ShaderVariable)
INSTANTIATE_SERIALISE_TYPE(SourceVariableMapping);
INSTANTIATE_SERIALISE_TYPE(ShaderDebugState)
INSTANTIATE_SERIALISE_TYPE(ShaderDebugTrace)
INSTANTIATE_SERIALISE_TYPE(ResourceDescription)
INSTANTIATE_SERIALISE_TYPE(TextureDescription)
INSTANTIATE_SERIALISE_TYPE(BufferDescription)
INSTANTIATE_SERIALISE_TYPE(DescriptorStoreDescription)
INSTANTIATE_SERIALISE_TYPE(APIProperties)
INSTANTIATE_SERIALISE_TYPE(DriverInformation)
INSTANTIATE_SERIALISE_TYPE(DebugMessage)
INSTANTIATE_SERIALISE_TYPE(APIEvent)
INSTANTIATE_SERIALISE_TYPE(ActionDescription)
INSTANTIATE_SERIALISE_TYPE(ConstantBindStats)
INSTANTIATE_SERIALISE_TYPE(SamplerBindStats)
INSTANTIATE_SERIALISE_TYPE(ResourceBindStats)
INSTANTIATE_SERIALISE_TYPE(ResourceUpdateStats)
INSTANTIATE_SERIALISE_TYPE(DrawcallStats)
INSTANTIATE_SERIALISE_TYPE(DispatchStats)
INSTANTIATE_SERIALISE_TYPE(IndexBindStats)
INSTANTIATE_SERIALISE_TYPE(VertexBindStats)
INSTANTIATE_SERIALISE_TYPE(LayoutBindStats)
INSTANTIATE_SERIALISE_TYPE(ShaderChangeStats)
INSTANTIATE_SERIALISE_TYPE(BlendStats)
INSTANTIATE_SERIALISE_TYPE(DepthStencilStats)
INSTANTIATE_SERIALISE_TYPE(RasterizationStats)
INSTANTIATE_SERIALISE_TYPE(OutputTargetStats)
INSTANTIATE_SERIALISE_TYPE(FrameStatistics)
INSTANTIATE_SERIALISE_TYPE(FrameDescription)
INSTANTIATE_SERIALISE_TYPE(FrameRecord)
INSTANTIATE_SERIALISE_TYPE(MeshFormat)
INSTANTIATE_SERIALISE_TYPE(FloatVector)
INSTANTIATE_SERIALISE_TYPE(Offset);
INSTANTIATE_SERIALISE_TYPE(Uuid)
INSTANTIATE_SERIALISE_TYPE(CounterDescription)
INSTANTIATE_SERIALISE_TYPE(PixelValue)
INSTANTIATE_SERIALISE_TYPE(Subresource)
INSTANTIATE_SERIALISE_TYPE(PixelModification)
INSTANTIATE_SERIALISE_TYPE(EventUsage)
INSTANTIATE_SERIALISE_TYPE(CounterResult)
INSTANTIATE_SERIALISE_TYPE(CounterValue)
INSTANTIATE_SERIALISE_TYPE(GPUDevice)
INSTANTIATE_SERIALISE_TYPE(ReplayOptions)
INSTANTIATE_SERIALISE_TYPE(DebugPixelInputs)
INSTANTIATE_SERIALISE_TYPE(DescriptorRange)
INSTANTIATE_SERIALISE_TYPE(Descriptor)
INSTANTIATE_SERIALISE_TYPE(SamplerDescriptor)
INSTANTIATE_SERIALISE_TYPE(DescriptorAccess)
INSTANTIATE_SERIALISE_TYPE(DescriptorLogicalLocation)
INSTANTIATE_SERIALISE_TYPE(D3D11Pipe::Layout)
INSTANTIATE_SERIALISE_TYPE(D3D11Pipe::InputAssembly)
INSTANTIATE_SERIALISE_TYPE(D3D11Pipe::Shader)
INSTANTIATE_SERIALISE_TYPE(D3D11Pipe::Rasterizer)
INSTANTIATE_SERIALISE_TYPE(D3D11Pipe::OutputMerger)
INSTANTIATE_SERIALISE_TYPE(D3D11Pipe::State)
INSTANTIATE_SERIALISE_TYPE(D3D12Pipe::Layout)
INSTANTIATE_SERIALISE_TYPE(D3D12Pipe::InputAssembly)
INSTANTIATE_SERIALISE_TYPE(D3D12Pipe::Shader)
INSTANTIATE_SERIALISE_TYPE(D3D12Pipe::Rasterizer)
INSTANTIATE_SERIALISE_TYPE(D3D12Pipe::OM)
INSTANTIATE_SERIALISE_TYPE(D3D12Pipe::ResourceState)
INSTANTIATE_SERIALISE_TYPE(D3D12Pipe::ResourceData)
INSTANTIATE_SERIALISE_TYPE(D3D12Pipe::State)
INSTANTIATE_SERIALISE_TYPE(GLPipe::VertexAttribute)
INSTANTIATE_SERIALISE_TYPE(GLPipe::VertexInput)
INSTANTIATE_SERIALISE_TYPE(GLPipe::Shader)
INSTANTIATE_SERIALISE_TYPE(GLPipe::Rasterizer)
INSTANTIATE_SERIALISE_TYPE(GLPipe::DepthState)
INSTANTIATE_SERIALISE_TYPE(GLPipe::StencilState)
INSTANTIATE_SERIALISE_TYPE(GLPipe::BlendState)
INSTANTIATE_SERIALISE_TYPE(GLPipe::FrameBuffer)
INSTANTIATE_SERIALISE_TYPE(GLPipe::State)
INSTANTIATE_SERIALISE_TYPE(VKPipe::DescriptorSet)
INSTANTIATE_SERIALISE_TYPE(VKPipe::Pipeline)
INSTANTIATE_SERIALISE_TYPE(VKPipe::VertexAttribute)
INSTANTIATE_SERIALISE_TYPE(VKPipe::VertexInput)
INSTANTIATE_SERIALISE_TYPE(VKPipe::Shader)
INSTANTIATE_SERIALISE_TYPE(VKPipe::ViewState)
INSTANTIATE_SERIALISE_TYPE(VKPipe::ColorBlendState)
INSTANTIATE_SERIALISE_TYPE(VKPipe::DepthStencil)
INSTANTIATE_SERIALISE_TYPE(VKPipe::CurrentPass)
INSTANTIATE_SERIALISE_TYPE(VKPipe::ImageLayout)
INSTANTIATE_SERIALISE_TYPE(VKPipe::ImageData)
INSTANTIATE_SERIALISE_TYPE(VKPipe::ConditionalRendering)
INSTANTIATE_SERIALISE_TYPE(VKPipe::State)