blob: 9b630dd7b87e80385ff96592431ab2894e36dc67 [file] [log] [blame]
// Copyright 2025 The Dawn & Tint Authors
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
// 1. Redistributions of source code must retain the above copyright notice, this
// list of conditions and the following disclaimer.
//
// 2. Redistributions in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
//
// 3. Neither the name of the copyright holder nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#ifndef SRC_DAWN_SERIALIZATION_SCHEMA_H_
#define SRC_DAWN_SERIALIZATION_SCHEMA_H_
#include <cstdint>
#include <string>
#include <vector>
namespace schema {
// NOTE: This file must be included after files that define
// DAWN_REPLAY_SERIALIZABLE and DAWN_REPLAY_MAKE_ROOT_CMD_AND_CMD_DATA.
// Those macro are different for serialization and deserialization.
// TODO(crbug.com/413053623): Switch to protobufs or json. This is just to get
// stuff working. We'll switch to something else once we're sure of the data we
// want to capture.
using ObjectId = uint64_t;
// device is always 1
const ObjectId kDeviceId = 1;
enum class ObjectType : uint32_t {
Invalid = 0, // 0 is invalid at it's more likely to catch bugs.
BindGroup,
BindGroupLayout,
Buffer,
CommandBuffer,
ComputePipeline,
Device,
PipelineLayout,
QuerySet,
RenderBundle,
RenderPipeline,
Sampler,
ShaderModule,
Texture,
TextureView,
ExternalTexture,
};
enum class BindGroupLayoutEntryType : uint32_t {
Invalid = 0, // 0 is invalid at it's more likely to catch bugs.
BufferBinding,
SamplerBinding,
TextureBinding,
TexelBufferBinding,
StorageTextureBinding,
ExternalTextureBinding,
StaticSamplerBindingInfo,
InputAttachmentBindingInfo,
};
enum class CommandBufferCommand : uint32_t {
Invalid = 0, // 0 is invalid at it's more likely to catch bugs.
BeginComputePass,
BeginOcclusionQuery,
BeginRenderPass,
ClearBuffer,
CopyBufferToBuffer,
CopyBufferToTexture,
CopyTextureToBuffer,
CopyTextureToTexture,
Dispatch,
DispatchIndirect,
Draw,
DrawIndexed,
DrawIndexedIndirect,
DrawIndirect,
End,
EndOcclusionQuery,
EndRenderPass,
ExecuteBundles,
InsertDebugMarker,
PopDebugGroup,
PushDebugGroup,
ResolveQuerySet,
SetBindGroup,
SetBlendConstant,
SetComputePipeline,
SetImmediates,
SetIndexBuffer,
SetRenderPipeline,
SetScissorRect,
SetStencilReference,
SetVertexBuffer,
SetViewport,
WriteBuffer,
WriteTimestamp,
};
enum class RootCommand : uint32_t {
Invalid = 0, // 0 is invalid at it's more likely to catch bugs.
CreateResource,
QueueSubmit,
WriteBuffer,
WriteTexture,
SetLabel,
InitTexture,
End,
};
#define ORIGIN3D_MEMBER(X) \
X(uint32_t, x) \
X(uint32_t, y) \
X(uint32_t, z)
DAWN_REPLAY_SERIALIZABLE(struct, Origin3D, ORIGIN3D_MEMBER){};
#define EXTENT3D_MEMBER(X) \
X(uint32_t, width) \
X(uint32_t, height) \
X(uint32_t, depthOrArrayLayers)
DAWN_REPLAY_SERIALIZABLE(struct, Extent3D, EXTENT3D_MEMBER){};
#define COLOR_MEMBER(X) \
X(double, r) \
X(double, g) \
X(double, b) \
X(double, a)
DAWN_REPLAY_SERIALIZABLE(struct, Color, COLOR_MEMBER){};
#define TEXTURE_COMPONENT_SWIZZLE_MEMBER(X) \
X(wgpu::ComponentSwizzle, r) \
X(wgpu::ComponentSwizzle, g) \
X(wgpu::ComponentSwizzle, b) \
X(wgpu::ComponentSwizzle, a)
DAWN_REPLAY_SERIALIZABLE(struct, TextureComponentSwizzle, TEXTURE_COMPONENT_SWIZZLE_MEMBER){};
#define PIPELINE_CONSTANT_MEMBER(X) \
X(std::string, name) \
X(double, value)
DAWN_REPLAY_SERIALIZABLE(struct, PipelineConstant, PIPELINE_CONSTANT_MEMBER){};
#define PROGRAMMABLE_STAGE_MEMBER(X) \
X(ObjectId, moduleId) \
X(std::string, entryPoint) \
X(std::vector<PipelineConstant>, constants)
DAWN_REPLAY_SERIALIZABLE(struct, ProgrammableStage, PROGRAMMABLE_STAGE_MEMBER){};
#define VERTEX_ATTRIBUTE_MEMBER(X) \
X(wgpu::VertexFormat, format) \
X(uint64_t, offset) \
X(uint32_t, shaderLocation)
DAWN_REPLAY_SERIALIZABLE(struct, VertexAttribute, VERTEX_ATTRIBUTE_MEMBER){};
#define VERTEX_BUFFER_LAYOUT_MEMBER(X) \
X(uint64_t, arrayStride) \
X(wgpu::VertexStepMode, stepMode) \
X(std::vector<VertexAttribute>, attributes)
DAWN_REPLAY_SERIALIZABLE(struct, VertexBufferLayout, VERTEX_BUFFER_LAYOUT_MEMBER){};
#define VERTEX_STATE_MEMBER(X) \
X(ProgrammableStage, program) \
X(std::vector<VertexBufferLayout>, buffers)
DAWN_REPLAY_SERIALIZABLE(struct, VertexState, VERTEX_STATE_MEMBER){};
#define PRIMITIVE_STATE_MEMBER(X) \
X(wgpu::PrimitiveTopology, topology) \
X(wgpu::IndexFormat, stripIndexFormat) \
X(wgpu::FrontFace, frontFace) \
X(wgpu::CullMode, cullMode) \
X(bool, unclippedDepth)
DAWN_REPLAY_SERIALIZABLE(struct, PrimitiveState, PRIMITIVE_STATE_MEMBER){};
#define STENCIL_FACE_STATE_MEMBER(X) \
X(wgpu::CompareFunction, compare) \
X(wgpu::StencilOperation, failOp) \
X(wgpu::StencilOperation, depthFailOp) \
X(wgpu::StencilOperation, passOp)
DAWN_REPLAY_SERIALIZABLE(struct, StencilFaceState, STENCIL_FACE_STATE_MEMBER){};
#define DEPTH_STENCIL_STATE_MEMBER(X) \
X(wgpu::TextureFormat, format) \
X(bool, depthWriteEnabled) \
X(wgpu::CompareFunction, depthCompare) \
X(StencilFaceState, stencilFront) \
X(StencilFaceState, stencilBack) \
X(uint32_t, stencilReadMask) \
X(uint32_t, stencilWriteMask) \
X(int32_t, depthBias) \
X(float, depthBiasSlopeScale) \
X(float, depthBiasClamp)
DAWN_REPLAY_SERIALIZABLE(struct, DepthStencilState, DEPTH_STENCIL_STATE_MEMBER){};
#define MULTISAMPLE_STATE_MEMBER(X) \
X(uint32_t, count) \
X(uint32_t, mask) \
X(bool, alphaToCoverageEnabled)
DAWN_REPLAY_SERIALIZABLE(struct, MultisampleState, MULTISAMPLE_STATE_MEMBER){};
#define BLEND_COMPONENT_MEMBER(X) \
X(wgpu::BlendOperation, operation) \
X(wgpu::BlendFactor, srcFactor) \
X(wgpu::BlendFactor, dstFactor)
DAWN_REPLAY_SERIALIZABLE(struct, BlendComponent, BLEND_COMPONENT_MEMBER){};
#define BLEND_STATE_MEMBER(X) \
X(BlendComponent, color) \
X(BlendComponent, alpha)
DAWN_REPLAY_SERIALIZABLE(struct, BlendState, BLEND_STATE_MEMBER){};
#define COLOR_TARGET_STATE_MEMBER(X) \
X(wgpu::TextureFormat, format) \
X(BlendState, blend) \
X(wgpu::ColorWriteMask, writeMask)
DAWN_REPLAY_SERIALIZABLE(struct, ColorTargetState, COLOR_TARGET_STATE_MEMBER){};
#define FRAGMENT_STATE_MEMBER(X) \
X(ProgrammableStage, program) \
X(std::vector<ColorTargetState>, targets)
DAWN_REPLAY_SERIALIZABLE(struct, FragmentState, FRAGMENT_STATE_MEMBER){};
#define BIND_GROUP_LAYOUT_BINDING_MEMBER(X) \
X(uint32_t, binding) \
X(wgpu::ShaderStage, visibility) \
X(uint32_t, bindingArraySize)
DAWN_REPLAY_SERIALIZABLE(struct, BindGroupLayoutBinding, BIND_GROUP_LAYOUT_BINDING_MEMBER){};
#define BUFFER_BIND_GROUP_LAYOUT_MEMBER(X) \
X(wgpu::BufferBindingType, type) \
X(uint64_t, minBindingSize) \
X(bool, hasDynamicOffset)
DAWN_REPLAY_MAKE_BINDGROUP_LAYOUT_VARIANT(BufferBinding, BUFFER_BIND_GROUP_LAYOUT_MEMBER){};
#define SAMPLER_BIND_GROUP_LAYOUT_MEMBER(X) X(wgpu::SamplerBindingType, type)
DAWN_REPLAY_MAKE_BINDGROUP_LAYOUT_VARIANT(SamplerBinding, SAMPLER_BIND_GROUP_LAYOUT_MEMBER){};
#define STORAGE_TEXTURE_BIND_GROUP_LAYOUT_MEMBER(X) \
X(wgpu::TextureFormat, format) \
X(wgpu::TextureViewDimension, viewDimension) \
X(wgpu::StorageTextureAccess, access)
DAWN_REPLAY_MAKE_BINDGROUP_LAYOUT_VARIANT(StorageTextureBinding,
STORAGE_TEXTURE_BIND_GROUP_LAYOUT_MEMBER){};
#define TEXTURE_BIND_GROUP_LAYOUT_MEMBER(X) \
X(wgpu::TextureSampleType, sampleType) \
X(wgpu::TextureViewDimension, viewDimension) \
X(bool, multisampled)
DAWN_REPLAY_MAKE_BINDGROUP_LAYOUT_VARIANT(TextureBinding, TEXTURE_BIND_GROUP_LAYOUT_MEMBER){};
#define BIND_GROUP_LAYOUT_MEMBER(X) X(uint32_t, numEntries)
DAWN_REPLAY_SERIALIZABLE(struct, BindGroupLayout, BIND_GROUP_LAYOUT_MEMBER){};
#define PIPELINE_LAYOUT_MEMBER(X) \
X(std::vector<ObjectId>, bindGroupLayoutIds) \
X(uint32_t, immediateSize)
DAWN_REPLAY_SERIALIZABLE(struct, PipelineLayout, PIPELINE_LAYOUT_MEMBER){};
#define BUFFER_CREATION_MEMBER(X) \
X(uint64_t, size) \
X(wgpu::BufferUsage, usage)
DAWN_REPLAY_SERIALIZABLE(struct, Buffer, BUFFER_CREATION_MEMBER){};
#define SAMPLER_CREATION_MEMBER(X) \
X(wgpu::AddressMode, addressModeU) \
X(wgpu::AddressMode, addressModeV) \
X(wgpu::AddressMode, addressModeW) \
X(wgpu::FilterMode, magFilter) \
X(wgpu::FilterMode, minFilter) \
X(wgpu::MipmapFilterMode, mipmapFilter) \
X(float, lodMinClamp) \
X(float, lodMaxClamp) \
X(wgpu::CompareFunction, compare) \
X(uint16_t, maxAnisotropy)
DAWN_REPLAY_SERIALIZABLE(struct, Sampler, SAMPLER_CREATION_MEMBER){};
#define RENDER_BUNDLE_CREATION_MEMBER(X) \
X(std::vector<wgpu::TextureFormat>, colorFormats) \
X(wgpu::TextureFormat, depthStencilFormat) \
X(uint32_t, sampleCount) \
X(bool, depthReadOnly) \
X(bool, stencilReadOnly)
DAWN_REPLAY_SERIALIZABLE(struct, RenderBundle, RENDER_BUNDLE_CREATION_MEMBER){};
#define TEXTURE_CREATION_MEMBER(X) \
X(wgpu::TextureUsage, usage) \
X(wgpu::TextureDimension, dimension) \
X(Extent3D, size) \
X(wgpu::TextureFormat, format) \
X(uint32_t, mipLevelCount) \
X(uint32_t, sampleCount) \
X(std::vector<wgpu::TextureFormat>, viewFormats)
DAWN_REPLAY_SERIALIZABLE(struct, Texture, TEXTURE_CREATION_MEMBER){};
#define TEXTURE_VIEW_CREATION_MEMBER(X) \
X(ObjectId, textureId) \
X(wgpu::TextureFormat, format) \
X(wgpu::TextureViewDimension, dimension) \
X(uint32_t, baseMipLevel) \
X(uint32_t, mipLevelCount) \
X(uint32_t, baseArrayLayer) \
X(uint32_t, arrayLayerCount) \
X(wgpu::TextureAspect, aspect) \
X(wgpu::TextureUsage, usage) \
X(TextureComponentSwizzle, swizzle)
DAWN_REPLAY_SERIALIZABLE(struct, TextureView, TEXTURE_VIEW_CREATION_MEMBER){};
#define QUERYSET_CREATION_MEMBER(X) \
X(wgpu::QueryType, type) \
X(uint32_t, count)
DAWN_REPLAY_SERIALIZABLE(struct, QuerySet, QUERYSET_CREATION_MEMBER){};
// TODO(452840621): Make this use a chain instead of hard coded to WGSL only and handle other
// chained structs.
#define SHADER_MODULE_CREATION_MEMBER(X) X(std::string, code)
DAWN_REPLAY_SERIALIZABLE(struct, ShaderModule, SHADER_MODULE_CREATION_MEMBER){};
#define COMPUTE_PIPELINE_CREATION_MEMBER(X) \
X(ObjectId, layoutId) \
X(ProgrammableStage, compute)
DAWN_REPLAY_SERIALIZABLE(struct, ComputePipeline, COMPUTE_PIPELINE_CREATION_MEMBER){};
#define RENDER_PIPELINE_CREATION_MEMBER(X) \
X(ObjectId, layoutId) \
X(VertexState, vertex) \
X(PrimitiveState, primitive) \
X(DepthStencilState, depthStencil) \
X(MultisampleState, multisample) \
X(FragmentState, fragment)
DAWN_REPLAY_SERIALIZABLE(struct, RenderPipeline, RENDER_PIPELINE_CREATION_MEMBER){};
#define BUFFER_BIND_GROUP_ENTRY_MEMBER(X) \
X(ObjectId, bufferId) \
X(uint64_t, offset) \
X(uint64_t, size)
DAWN_REPLAY_MAKE_BINDGROUP_VARIANT(BufferBinding, BUFFER_BIND_GROUP_ENTRY_MEMBER){};
#define SAMPLER_BIND_GROUP_ENTRY_MEMBER(X) X(ObjectId, samplerId)
DAWN_REPLAY_MAKE_BINDGROUP_VARIANT(SamplerBinding, SAMPLER_BIND_GROUP_ENTRY_MEMBER){};
#define TEXTURE_BIND_GROUP_ENTRY_MEMBER(X) X(ObjectId, textureViewId)
DAWN_REPLAY_MAKE_BINDGROUP_VARIANT(TextureBinding, TEXTURE_BIND_GROUP_ENTRY_MEMBER){};
#define BIND_GROUP_CREATION_MEMBER(X) \
X(ObjectId, layoutId) \
X(uint32_t, numEntries)
DAWN_REPLAY_SERIALIZABLE(struct, BindGroup, BIND_GROUP_CREATION_MEMBER){};
#define LABELED_RESOURCE_MEMBER(X) \
X(ObjectType, type) \
X(ObjectId, id) \
X(std::string, label)
DAWN_REPLAY_SERIALIZABLE(struct, LabeledResource, LABELED_RESOURCE_MEMBER){};
#define TEXEL_COPY_BUFFER_LAYOUT_MEMBER(X) \
X(uint64_t, offset) \
X(uint32_t, bytesPerRow) \
X(uint32_t, rowsPerImage)
DAWN_REPLAY_SERIALIZABLE(struct, TexelCopyBufferLayout, TEXEL_COPY_BUFFER_LAYOUT_MEMBER){};
#define TEXEL_COPY_BUFFER_INFO_MEMBER(X) \
X(ObjectId, bufferId) \
X(TexelCopyBufferLayout, layout)
DAWN_REPLAY_SERIALIZABLE(struct, TexelCopyBufferInfo, TEXEL_COPY_BUFFER_INFO_MEMBER){};
#define TEXEL_COPY_TEXTURE_INFO_MEMBER(X) \
X(ObjectId, textureId) \
X(uint32_t, mipLevel) \
X(Origin3D, origin) \
X(wgpu::TextureAspect, aspect)
DAWN_REPLAY_SERIALIZABLE(struct, TexelCopyTextureInfo, TEXEL_COPY_TEXTURE_INFO_MEMBER){};
#define TIMESTAMP_WRITES_MEMBER(X) \
X(ObjectId, querySetId) \
X(uint32_t, beginningOfPassWriteIndex) \
X(uint32_t, endOfPassWriteIndex)
DAWN_REPLAY_SERIALIZABLE(struct, TimestampWrites, TIMESTAMP_WRITES_MEMBER){};
#define COLOR_ATTACHMENT_MEMBER(X) \
X(ObjectId, viewId) \
X(uint32_t, depthSlice) \
X(ObjectId, resolveTargetId) \
X(wgpu::LoadOp, loadOp) \
X(wgpu::StoreOp, storeOp) \
X(Color, clearValue)
DAWN_REPLAY_SERIALIZABLE(struct, ColorAttachment, COLOR_ATTACHMENT_MEMBER){};
#define RENDER_PASS_DEPTH_STENCIL_ATTACHMENT_MEMBER(X) \
X(ObjectId, viewId) \
X(wgpu::LoadOp, depthLoadOp) \
X(wgpu::StoreOp, depthStoreOp) \
X(float, depthClearValue) \
X(bool, depthReadOnly) \
X(wgpu::LoadOp, stencilLoadOp) \
X(wgpu::StoreOp, stencilStoreOp) \
X(uint32_t, stencilClearValue) \
X(bool, stencilReadOnly)
DAWN_REPLAY_SERIALIZABLE(struct,
RenderPassDepthStencilAttachment,
RENDER_PASS_DEPTH_STENCIL_ATTACHMENT_MEMBER){};
#define CREATE_RESOURCE_CMD_DATA_MEMBER(X) X(LabeledResource, resource)
DAWN_REPLAY_MAKE_ROOT_CMD_AND_CMD_DATA(CreateResource, CREATE_RESOURCE_CMD_DATA_MEMBER){};
#define SET_LABEL_CMD_DATA_MEMBER(X) \
X(ObjectId, id) \
X(ObjectType, type) \
X(std::string, label)
DAWN_REPLAY_MAKE_ROOT_CMD_AND_CMD_DATA(SetLabel, SET_LABEL_CMD_DATA_MEMBER){};
#define WRITE_BUFFER_CMD_DATA_MEMBER(X) \
X(ObjectId, bufferId) \
X(uint64_t, bufferOffset) \
X(uint64_t, size)
DAWN_REPLAY_MAKE_ROOT_CMD_AND_CMD_DATA(WriteBuffer, WRITE_BUFFER_CMD_DATA_MEMBER){};
#define WRITE_TEXTURE_CMD_DATA_MEMBER(X) \
X(TexelCopyTextureInfo, destination) \
X(TexelCopyBufferLayout, layout) \
X(Extent3D, size) \
X(uint64_t, dataSize)
DAWN_REPLAY_MAKE_ROOT_CMD_AND_CMD_DATA(WriteTexture, WRITE_TEXTURE_CMD_DATA_MEMBER){};
#define INIT_TEXTURE_CMD_DATA_MEMBER(X) \
X(TexelCopyTextureInfo, destination) \
X(TexelCopyBufferLayout, layout) \
X(Extent3D, size) \
X(uint64_t, dataSize)
DAWN_REPLAY_MAKE_ROOT_CMD_AND_CMD_DATA(InitTexture, INIT_TEXTURE_CMD_DATA_MEMBER){};
#define QUEUE_SUBMIT_CMD_DATA_MEMBER(X) X(std::vector<ObjectId>, commandBuffers)
DAWN_REPLAY_MAKE_ROOT_CMD_AND_CMD_DATA(QueueSubmit, QUEUE_SUBMIT_CMD_DATA_MEMBER){};
#define COPY_BUFFER_TO_BUFFER_CMD_DATA_MEMBER(X) \
X(ObjectId, srcBufferId) \
X(uint64_t, srcOffset) \
X(ObjectId, dstBufferId) \
X(uint64_t, dstOffset) \
X(uint64_t, size)
DAWN_REPLAY_MAKE_COMMAND_BUFFER_CMD_AND_CMD_DATA(CopyBufferToBuffer,
COPY_BUFFER_TO_BUFFER_CMD_DATA_MEMBER){};
#define COPY_BUFFER_TO_TEXTURE_CMD_DATA_MEMBER(X) \
X(TexelCopyBufferInfo, source) \
X(TexelCopyTextureInfo, destination) \
X(Extent3D, copySize)
DAWN_REPLAY_MAKE_COMMAND_BUFFER_CMD_AND_CMD_DATA(CopyBufferToTexture,
COPY_BUFFER_TO_TEXTURE_CMD_DATA_MEMBER){};
#define COPY_TEXTURE_TO_BUFFER_CMD_DATA_MEMBER(X) \
X(TexelCopyTextureInfo, source) \
X(TexelCopyBufferInfo, destination) \
X(Extent3D, copySize)
DAWN_REPLAY_MAKE_COMMAND_BUFFER_CMD_AND_CMD_DATA(CopyTextureToBuffer,
COPY_TEXTURE_TO_BUFFER_CMD_DATA_MEMBER){};
#define COPY_TEXTURE_TO_TEXTURE_CMD_DATA_MEMBER(X) \
X(TexelCopyTextureInfo, source) \
X(TexelCopyTextureInfo, destination) \
X(Extent3D, copySize)
DAWN_REPLAY_MAKE_COMMAND_BUFFER_CMD_AND_CMD_DATA(CopyTextureToTexture,
COPY_TEXTURE_TO_TEXTURE_CMD_DATA_MEMBER){};
#define WRITE_BUFFER_CMD_ENCODER_DATA_MEMBER(X) \
X(ObjectId, bufferId) \
X(uint64_t, bufferOffset) \
X(std::vector<uint8_t>, data)
DAWN_REPLAY_MAKE_COMMAND_BUFFER_CMD_AND_CMD_DATA(WriteBuffer,
WRITE_BUFFER_CMD_ENCODER_DATA_MEMBER){};
#define BEGIN_COMPUTE_PASS_CMD_DATA_MEMBER(X) \
X(std::string, label) \
X(TimestampWrites, timestampWrites)
DAWN_REPLAY_MAKE_COMMAND_BUFFER_CMD_AND_CMD_DATA(BeginComputePass,
BEGIN_COMPUTE_PASS_CMD_DATA_MEMBER){};
#define BEGIN_RENDER_PASS_CMD_DATA_MEMBER(X) \
X(std::string, label) \
X(std::vector<ColorAttachment>, colorAttachments) \
X(RenderPassDepthStencilAttachment, depthStencilAttachment) \
X(ObjectId, occlusionQuerySetId) \
X(TimestampWrites, timestampWrites) \
X(uint64_t, maxDrawCount)
DAWN_REPLAY_MAKE_COMMAND_BUFFER_CMD_AND_CMD_DATA(BeginRenderPass,
BEGIN_RENDER_PASS_CMD_DATA_MEMBER){};
#define RESOLVE_QUERYSET_CMD_DATA_MEMBER(X) \
X(ObjectId, querySetId) \
X(uint32_t, firstQuery) \
X(uint32_t, queryCount) \
X(ObjectId, destinationId) \
X(uint64_t, destinationOffset)
DAWN_REPLAY_MAKE_COMMAND_BUFFER_CMD_AND_CMD_DATA(ResolveQuerySet,
RESOLVE_QUERYSET_CMD_DATA_MEMBER){};
#define SET_COMPUTE_PIPELINE_CMD_DATA_MEMBER(X) X(ObjectId, pipelineId)
DAWN_REPLAY_MAKE_COMMAND_BUFFER_CMD_AND_CMD_DATA(SetComputePipeline,
SET_COMPUTE_PIPELINE_CMD_DATA_MEMBER){};
#define SET_BIND_GROUP_CMD_DATA_MEMBER(X) \
X(uint32_t, index) \
X(ObjectId, bindGroupId) \
X(std::vector<uint32_t>, dynamicOffsets)
DAWN_REPLAY_MAKE_COMMAND_BUFFER_CMD_AND_CMD_DATA(SetBindGroup, SET_BIND_GROUP_CMD_DATA_MEMBER){};
#define SET_IMMEDIATES_CMD_DATA_MEMBER(X) \
X(uint32_t, offset) \
X(std::vector<uint8_t>, data)
DAWN_REPLAY_MAKE_COMMAND_BUFFER_CMD_AND_CMD_DATA(SetImmediates, SET_IMMEDIATES_CMD_DATA_MEMBER){};
#define SET_CLEAR_BUFFER_CMD_DATA_MEMBER(X) \
X(ObjectId, bufferId) \
X(uint64_t, offset) \
X(uint64_t, size)
DAWN_REPLAY_MAKE_COMMAND_BUFFER_CMD_AND_CMD_DATA(ClearBuffer, SET_CLEAR_BUFFER_CMD_DATA_MEMBER){};
#define DISPATCH_CMD_DATA_MEMBER(X) \
X(uint32_t, x) \
X(uint32_t, y) \
X(uint32_t, z)
DAWN_REPLAY_MAKE_COMMAND_BUFFER_CMD_AND_CMD_DATA(Dispatch, DISPATCH_CMD_DATA_MEMBER){};
#define DISPATCH_INDIRECT_CMD_DATA_MEMBER(X) \
X(ObjectId, bufferId) \
X(uint64_t, offset)
DAWN_REPLAY_MAKE_COMMAND_BUFFER_CMD_AND_CMD_DATA(DispatchIndirect,
DISPATCH_INDIRECT_CMD_DATA_MEMBER){};
#define SET_RENDER_PIPELINE_CMD_DATA_MEMBER(X) X(ObjectId, pipelineId)
DAWN_REPLAY_MAKE_COMMAND_BUFFER_CMD_AND_CMD_DATA(SetRenderPipeline,
SET_RENDER_PIPELINE_CMD_DATA_MEMBER){};
#define PUSH_DEBUG_GROUP_CMD_DATA_MEMBER(X) X(std::string, groupLabel)
DAWN_REPLAY_MAKE_COMMAND_BUFFER_CMD_AND_CMD_DATA(PushDebugGroup,
PUSH_DEBUG_GROUP_CMD_DATA_MEMBER){};
#define INSERT_DEBUG_MARKER_CMD_DATA_MEMBER(X) X(std::string, markerLabel)
DAWN_REPLAY_MAKE_COMMAND_BUFFER_CMD_AND_CMD_DATA(InsertDebugMarker,
INSERT_DEBUG_MARKER_CMD_DATA_MEMBER){};
#define BEGIN_OCCLUSION_QUERY_CMD_DATA_MEMBER(X) X(uint32_t, queryIndex)
DAWN_REPLAY_MAKE_COMMAND_BUFFER_CMD_AND_CMD_DATA(BeginOcclusionQuery,
BEGIN_OCCLUSION_QUERY_CMD_DATA_MEMBER){};
#define EXECUTE_BUNDLES_CMD_DATA_MEMBER(X) X(std::vector<ObjectId>, bundleIds)
DAWN_REPLAY_MAKE_COMMAND_BUFFER_CMD_AND_CMD_DATA(ExecuteBundles, EXECUTE_BUNDLES_CMD_DATA_MEMBER){};
#define SET_VERTEX_BUFFER_CMD_DATA_MEMBER(X) \
X(uint32_t, slot) \
X(ObjectId, bufferId) \
X(uint64_t, offset) \
X(uint64_t, size)
DAWN_REPLAY_MAKE_COMMAND_BUFFER_CMD_AND_CMD_DATA(SetVertexBuffer,
SET_VERTEX_BUFFER_CMD_DATA_MEMBER){};
#define SET_INDEX_BUFFER_CMD_DATA_MEMBER(X) \
X(ObjectId, bufferId) \
X(wgpu::IndexFormat, format) \
X(uint64_t, offset) \
X(uint64_t, size)
DAWN_REPLAY_MAKE_COMMAND_BUFFER_CMD_AND_CMD_DATA(SetIndexBuffer,
SET_INDEX_BUFFER_CMD_DATA_MEMBER){};
#define SET_BLEND_CONSTANT_CMD_DATA_MEMBER(X) X(Color, color)
DAWN_REPLAY_MAKE_COMMAND_BUFFER_CMD_AND_CMD_DATA(SetBlendConstant,
SET_BLEND_CONSTANT_CMD_DATA_MEMBER){};
#define SET_SCISSOR_RECT_CMD_DATA_MEMBER(X) \
X(uint32_t, x) \
X(uint32_t, y) \
X(uint32_t, width) \
X(uint32_t, height)
DAWN_REPLAY_MAKE_COMMAND_BUFFER_CMD_AND_CMD_DATA(SetScissorRect,
SET_SCISSOR_RECT_CMD_DATA_MEMBER){};
#define SET_STENCIL_REFERENCE_CMD_DATA_MEMBER(X) X(uint32_t, reference)
DAWN_REPLAY_MAKE_COMMAND_BUFFER_CMD_AND_CMD_DATA(SetStencilReference,
SET_STENCIL_REFERENCE_CMD_DATA_MEMBER){};
#define SET_VIEWPORT_CMD_DATA_MEMBER(X) \
X(float, x) \
X(float, y) \
X(float, width) \
X(float, height) \
X(float, minDepth) \
X(float, maxDepth)
DAWN_REPLAY_MAKE_COMMAND_BUFFER_CMD_AND_CMD_DATA(SetViewport, SET_VIEWPORT_CMD_DATA_MEMBER){};
#define DRAW_CMD_DATA_MEMBER(X) \
X(uint32_t, vertexCount) \
X(uint32_t, instanceCount) \
X(uint32_t, firstVertex) \
X(uint32_t, firstInstance)
DAWN_REPLAY_MAKE_COMMAND_BUFFER_CMD_AND_CMD_DATA(Draw, DRAW_CMD_DATA_MEMBER){};
#define DRAW_INDEXED_CMD_DATA_MEMBER(X) \
X(uint32_t, indexCount) \
X(uint32_t, instanceCount) \
X(uint32_t, firstIndex) \
X(int32_t, baseVertex) \
X(uint32_t, firstInstance)
DAWN_REPLAY_MAKE_COMMAND_BUFFER_CMD_AND_CMD_DATA(DrawIndexed, DRAW_INDEXED_CMD_DATA_MEMBER){};
#define DRAW_INDIRECT_CMD_DATA_MEMBER(X) \
X(ObjectId, indirectBufferId) \
X(uint64_t, indirectOffset)
DAWN_REPLAY_MAKE_COMMAND_BUFFER_CMD_AND_CMD_DATA(DrawIndirect, DRAW_INDIRECT_CMD_DATA_MEMBER){};
#define DRAW_INDEXED_INDIRECT_CMD_DATA_MEMBER(X) \
X(ObjectId, indirectBufferId) \
X(uint64_t, indirectOffset)
DAWN_REPLAY_MAKE_COMMAND_BUFFER_CMD_AND_CMD_DATA(DrawIndexedIndirect,
DRAW_INDIRECT_CMD_DATA_MEMBER){};
#define WRITE_TIMESTAMP_CMD_DATA_MEMBER(X) \
X(ObjectId, querySetId) \
X(uint32_t, queryIndex)
DAWN_REPLAY_MAKE_COMMAND_BUFFER_CMD_AND_CMD_DATA(WriteTimestamp, WRITE_TIMESTAMP_CMD_DATA_MEMBER){};
} // namespace schema
#endif // SRC_DAWN_SERIALIZATION_SCHEMA_H_