/*
 * Copyright 2022 Google LLC
 *
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */

#ifndef skgpu_graphite_CommandTypes_DEFINED
#define skgpu_graphite_CommandTypes_DEFINED

#include "include/core/SkRect.h"
#include "include/gpu/graphite/GraphiteTypes.h"

namespace skgpu::graphite {

// specifies a single region for copying, either from buffer to texture, or vice versa
struct BufferTextureCopyData {
    size_t fBufferOffset;
    size_t fBufferRowBytes;
    SkIRect fRect;
    unsigned int fMipLevel;
};

// Specifies a scissor, which can only be subsequently queried given a translation and clip which
// are assumed to be applied to all commands in the render pass in which the scissor is set.
class Scissor {
public:
    explicit Scissor(const SkIRect& rect) : fRect(rect) {}

    SkIRect getRect(const SkIVector& replayTranslation, const SkIRect& replayClip) const {
        SkIRect rect = fRect.makeOffset(replayTranslation);
        if (!rect.intersect(replayClip)) {
            rect.setEmpty();
        }
        return rect;
    }

private:
    const SkIRect fRect;
};

}  // namespace skgpu::graphite

#endif // skgpu_graphite_DrawTypes_DEFINED
