// Copyright 2017 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_NATIVE_COMMANDS_H_ #define SRC_DAWN_NATIVE_COMMANDS_H_ #include <array> #include <bitset> #include <string> #include <vector> #include "dawn/common/Constants.h" #include "dawn/common/Ref.h" #include "dawn/native/AttachmentState.h" #include "dawn/native/BindingInfo.h" #include "dawn/native/Texture.h" #include "dawn/native/dawn_platform.h" namespace dawn::native { // Definition of the commands that are present in the CommandIterator given by the // CommandBufferBuilder. There are not defined in CommandBuffer.h to break some header // dependencies: Ref<Object> needs Object to be defined. enum class Command { … }; struct TimestampWrites { … }; struct BeginComputePassCmd { … }; struct BeginOcclusionQueryCmd { … }; struct RenderPassColorAttachmentInfo { … }; struct RenderPassStorageAttachmentInfo { … }; struct RenderPassDepthStencilAttachmentInfo { … }; struct BeginRenderPassCmd { … }; struct BufferCopy { … }; struct TextureCopy { … }; struct CopyBufferToBufferCmd { … }; struct CopyBufferToTextureCmd { … }; struct CopyTextureToBufferCmd { … }; struct CopyTextureToTextureCmd { … }; struct DispatchCmd { … }; struct DispatchIndirectCmd { … }; struct DrawCmd { … }; struct DrawIndexedCmd { … }; struct DrawIndirectCmd { … }; struct DrawIndexedIndirectCmd : DrawIndirectCmd { … }; struct MultiDrawIndirectCmd { … }; struct MultiDrawIndexedIndirectCmd : MultiDrawIndirectCmd { … }; struct EndComputePassCmd { … }; struct EndOcclusionQueryCmd { … }; struct EndRenderPassCmd { … }; struct ExecuteBundlesCmd { … }; struct ClearBufferCmd { … }; struct InsertDebugMarkerCmd { … }; struct PixelLocalStorageBarrierCmd { … }; struct PopDebugGroupCmd { … }; struct PushDebugGroupCmd { … }; struct ResolveQuerySetCmd { … }; struct SetComputePipelineCmd { … }; struct SetRenderPipelineCmd { … }; struct SetStencilReferenceCmd { … }; struct SetViewportCmd { … }; struct SetScissorRectCmd { … }; struct SetBlendConstantCmd { … }; struct SetBindGroupCmd { … }; struct SetIndexBufferCmd { … }; struct SetVertexBufferCmd { … }; struct WriteBufferCmd { … }; struct WriteTimestampCmd { … }; // This needs to be called before the CommandIterator is freed so that the Ref<> present in // the commands have a chance to run their destructor and remove internal references. class CommandIterator; void FreeCommands(CommandIterator* commands); // Helper function to allow skipping over a command when it is unimplemented, while still // consuming the correct amount of data from the command iterator. void SkipCommand(CommandIterator* commands, Command type); } // namespace dawn::native #endif // SRC_DAWN_NATIVE_COMMANDS_H_