Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
Public Member Functions | Static Public Member Functions | Private Member Functions | List of all members
skgpu::graphite::DawnCommandBuffer Class Referencefinal

#include <DawnCommandBuffer.h>

Inheritance diagram for skgpu::graphite::DawnCommandBuffer:
skgpu::graphite::CommandBuffer

Public Member Functions

 ~DawnCommandBuffer () override
 
wgpu::CommandBuffer finishEncoding ()
 
- Public Member Functions inherited from skgpu::graphite::CommandBuffer
virtual ~CommandBuffer ()
 
void trackResource (sk_sp< Resource > resource)
 
void trackCommandBufferResource (sk_sp< Resource > resource)
 
void resetCommandBuffer ()
 
void addFinishedProc (sk_sp< RefCntedCallback > finishedProc)
 
void callFinishedProcs (bool success)
 
virtual void addWaitSemaphores (size_t numWaitSemaphores, const BackendSemaphore *waitSemaphores)
 
virtual void addSignalSemaphores (size_t numWaitSemaphores, const BackendSemaphore *signalSemaphores)
 
virtual void prepareSurfaceForStateUpdate (SkSurface *targetSurface, const MutableTextureState *newState)
 
void addBuffersToAsyncMapOnSubmit (SkSpan< const sk_sp< Buffer > >)
 
SkSpan< const sk_sp< Buffer > > buffersToAsyncMapOnSubmit () const
 
bool addRenderPass (const RenderPassDesc &, sk_sp< Texture > colorTexture, sk_sp< Texture > resolveTexture, sk_sp< Texture > depthStencilTexture, SkRect viewport, const DrawPassList &drawPasses)
 
bool addComputePass (DispatchGroupSpan dispatchGroups)
 
bool copyBufferToBuffer (const Buffer *srcBuffer, size_t srcOffset, sk_sp< Buffer > dstBuffer, size_t dstOffset, size_t size)
 
bool copyTextureToBuffer (sk_sp< Texture >, SkIRect srcRect, sk_sp< Buffer >, size_t bufferOffset, size_t bufferRowBytes)
 
bool copyBufferToTexture (const Buffer *, sk_sp< Texture >, const BufferTextureCopyData *, int count)
 
bool copyTextureToTexture (sk_sp< Texture > src, SkIRect srcRect, sk_sp< Texture > dst, SkIPoint dstPoint, int mipLevel)
 
bool synchronizeBufferToCpu (sk_sp< Buffer >)
 
bool clearBuffer (const Buffer *buffer, size_t offset, size_t size)
 
void setReplayTranslation (SkIVector translation)
 
void clearReplayTranslation ()
 

Static Public Member Functions

static std::unique_ptr< DawnCommandBufferMake (const DawnSharedContext *, DawnResourceProvider *)
 

Private Member Functions

void onResetCommandBuffer () override
 
bool setNewCommandBufferResources () override
 
bool onAddRenderPass (const RenderPassDesc &, const Texture *colorTexture, const Texture *resolveTexture, const Texture *depthStencilTexture, SkRect viewport, const DrawPassList &) override
 
bool onAddComputePass (DispatchGroupSpan) override
 
bool onCopyBufferToBuffer (const Buffer *srcBuffer, size_t srcOffset, const Buffer *dstBuffer, size_t dstOffset, size_t size) override
 
bool onCopyTextureToBuffer (const Texture *, SkIRect srcRect, const Buffer *, size_t bufferOffset, size_t bufferRowBytes) override
 
bool onCopyBufferToTexture (const Buffer *, const Texture *, const BufferTextureCopyData *copyData, int count) override
 
bool onCopyTextureToTexture (const Texture *src, SkIRect srcRect, const Texture *dst, SkIPoint dstPoint, int mipLevel) override
 
bool onSynchronizeBufferToCpu (const Buffer *, bool *outDidResultInWork) override
 
bool onClearBuffer (const Buffer *, size_t offset, size_t size) override
 

Additional Inherited Members

- Public Types inherited from skgpu::graphite::CommandBuffer
using DrawPassList = skia_private::TArray< std::unique_ptr< DrawPass > >
 
using DispatchGroupSpan = SkSpan< const std::unique_ptr< DispatchGroup > >
 
- Protected Member Functions inherited from skgpu::graphite::CommandBuffer
 CommandBuffer ()
 
- Protected Attributes inherited from skgpu::graphite::CommandBuffer
SkISize fRenderPassSize
 
SkIVector fReplayTranslation
 

Detailed Description

Definition at line 31 of file DawnCommandBuffer.h.

Constructor & Destructor Documentation

◆ ~DawnCommandBuffer()

skgpu::graphite::DawnCommandBuffer::~DawnCommandBuffer ( )
override

Definition at line 64 of file DawnCommandBuffer.cpp.

64{}

Member Function Documentation

◆ finishEncoding()

wgpu::CommandBuffer skgpu::graphite::DawnCommandBuffer::finishEncoding ( )

Definition at line 66 of file DawnCommandBuffer.cpp.

66 {
67 SkASSERT(fCommandEncoder);
68 wgpu::CommandBuffer cmdBuffer = fCommandEncoder.Finish();
69
70 fCommandEncoder = nullptr;
71
72 return cmdBuffer;
73}
#define SkASSERT(cond)
Definition SkAssert.h:116

◆ Make()

std::unique_ptr< DawnCommandBuffer > skgpu::graphite::DawnCommandBuffer::Make ( const DawnSharedContext sharedContext,
DawnResourceProvider resourceProvider 
)
static

Definition at line 49 of file DawnCommandBuffer.cpp.

50 {
51 std::unique_ptr<DawnCommandBuffer> cmdBuffer(
52 new DawnCommandBuffer(sharedContext, resourceProvider));
53 if (!cmdBuffer->setNewCommandBufferResources()) {
54 return {};
55 }
56 return cmdBuffer;
57}

◆ onAddComputePass()

bool skgpu::graphite::DawnCommandBuffer::onAddComputePass ( DispatchGroupSpan  groups)
overrideprivatevirtual

Implements skgpu::graphite::CommandBuffer.

Definition at line 119 of file DawnCommandBuffer.cpp.

119 {
120 this->beginComputePass();
121 for (const auto& group : groups) {
122 group->addResourceRefs(this);
123 for (const auto& dispatch : group->dispatches()) {
124 this->bindComputePipeline(group->getPipeline(dispatch.fPipelineIndex));
125 this->bindDispatchResources(*group, dispatch);
126 if (const WorkgroupSize* globalSize =
127 std::get_if<WorkgroupSize>(&dispatch.fGlobalSizeOrIndirect)) {
128 this->dispatchWorkgroups(*globalSize);
129 } else {
130 SkASSERT(std::holds_alternative<BufferView>(dispatch.fGlobalSizeOrIndirect));
131 const BufferView& indirect =
132 *std::get_if<BufferView>(&dispatch.fGlobalSizeOrIndirect);
133 this->dispatchWorkgroupsIndirect(indirect.fInfo.fBuffer, indirect.fInfo.fOffset);
134 }
135 }
136 }
137 this->endComputePass();
138 return true;
139}

◆ onAddRenderPass()

bool skgpu::graphite::DawnCommandBuffer::onAddRenderPass ( const RenderPassDesc renderPassDesc,
const Texture colorTexture,
const Texture resolveTexture,
const Texture depthStencilTexture,
SkRect  viewport,
const DrawPassList drawPasses 
)
overrideprivatevirtual

Implements skgpu::graphite::CommandBuffer.

Definition at line 96 of file DawnCommandBuffer.cpp.

101 {
102 // Update viewport's constant buffer before starting a render pass.
103 this->preprocessViewport(viewport);
104
105 if (!this->beginRenderPass(renderPassDesc, colorTexture, resolveTexture, depthStencilTexture)) {
106 return false;
107 }
108
109 this->setViewport(viewport);
110
111 for (const auto& drawPass : drawPasses) {
112 this->addDrawPass(drawPass.get());
113 }
114
115 this->endRenderPass();
116 return true;
117}

◆ onClearBuffer()

bool skgpu::graphite::DawnCommandBuffer::onClearBuffer ( const Buffer buffer,
size_t  offset,
size_t  size 
)
overrideprivatevirtual

Implements skgpu::graphite::CommandBuffer.

Definition at line 998 of file DawnCommandBuffer.cpp.

998 {
999 SkASSERT(!fActiveRenderPassEncoder);
1000 SkASSERT(!fActiveComputePassEncoder);
1001
1002 auto& wgpuBuffer = static_cast<const DawnBuffer*>(buffer)->dawnBuffer();
1003 fCommandEncoder.ClearBuffer(wgpuBuffer, offset, size);
1004
1005 return true;
1006}
static const uint8_t buffer[]
Point offset

◆ onCopyBufferToBuffer()

bool skgpu::graphite::DawnCommandBuffer::onCopyBufferToBuffer ( const Buffer srcBuffer,
size_t  srcOffset,
const Buffer dstBuffer,
size_t  dstOffset,
size_t  size 
)
overrideprivatevirtual

Implements skgpu::graphite::CommandBuffer.

Definition at line 881 of file DawnCommandBuffer.cpp.

885 {
886 SkASSERT(!fActiveRenderPassEncoder);
887 SkASSERT(!fActiveComputePassEncoder);
888
889 auto& wgpuBufferSrc = static_cast<const DawnBuffer*>(srcBuffer)->dawnBuffer();
890 auto& wgpuBufferDst = static_cast<const DawnBuffer*>(dstBuffer)->dawnBuffer();
891
892 fCommandEncoder.CopyBufferToBuffer(wgpuBufferSrc, srcOffset, wgpuBufferDst, dstOffset, size);
893 return true;
894}

◆ onCopyBufferToTexture()

bool skgpu::graphite::DawnCommandBuffer::onCopyBufferToTexture ( const Buffer buffer,
const Texture texture,
const BufferTextureCopyData copyData,
int  count 
)
overrideprivatevirtual

Implements skgpu::graphite::CommandBuffer.

Definition at line 928 of file DawnCommandBuffer.cpp.

931 {
932 SkASSERT(!fActiveRenderPassEncoder);
933 SkASSERT(!fActiveComputePassEncoder);
934
935 auto& wgpuTexture = static_cast<const DawnTexture*>(texture)->dawnTexture();
936 auto& wgpuBuffer = static_cast<const DawnBuffer*>(buffer)->dawnBuffer();
937
938 wgpu::ImageCopyBuffer src;
939 src.buffer = wgpuBuffer;
940
941 wgpu::ImageCopyTexture dst;
942 dst.texture = wgpuTexture;
943
944 for (int i = 0; i < count; ++i) {
945 src.layout.offset = copyData[i].fBufferOffset;
946 // Dawn requires buffer's alignment to be multiples of 256.
947 // https://b.corp.google.com/issues/259264489
948 SkASSERT((copyData[i].fBufferRowBytes & 0xFF) == 0);
949 src.layout.bytesPerRow = copyData[i].fBufferRowBytes;
950
951 dst.origin.x = copyData[i].fRect.x();
952 dst.origin.y = copyData[i].fRect.y();
953 dst.mipLevel = copyData[i].fMipLevel;
954
955 wgpu::Extent3D copySize = {static_cast<uint32_t>(copyData[i].fRect.width()),
956 static_cast<uint32_t>(copyData[i].fRect.height()),
957 1};
958 fCommandEncoder.CopyBufferToTexture(&src, &dst, &copySize);
959 }
960
961 return true;
962}
SkRect fRect
int count
FlTexture * texture
dst
Definition cp.py:12
constexpr float height() const
Definition SkRect.h:769

◆ onCopyTextureToBuffer()

bool skgpu::graphite::DawnCommandBuffer::onCopyTextureToBuffer ( const Texture texture,
SkIRect  srcRect,
const Buffer buffer,
size_t  bufferOffset,
size_t  bufferRowBytes 
)
overrideprivatevirtual

Implements skgpu::graphite::CommandBuffer.

Definition at line 896 of file DawnCommandBuffer.cpp.

900 {
901 SkASSERT(!fActiveRenderPassEncoder);
902 SkASSERT(!fActiveComputePassEncoder);
903
904 const auto* wgpuTexture = static_cast<const DawnTexture*>(texture);
905 auto& wgpuBuffer = static_cast<const DawnBuffer*>(buffer)->dawnBuffer();
906
907 wgpu::ImageCopyTexture src;
908 src.texture = wgpuTexture->dawnTexture();
909 src.origin.x = srcRect.x();
910 src.origin.y = srcRect.y();
911 src.aspect = wgpuTexture->textureInfo().dawnTextureSpec().fAspect;
912
913 wgpu::ImageCopyBuffer dst;
914 dst.buffer = wgpuBuffer;
915 dst.layout.offset = bufferOffset;
916 // Dawn requires buffer's alignment to be multiples of 256.
917 // https://b.corp.google.com/issues/259264489
918 SkASSERT((bufferRowBytes & 0xFF) == 0);
919 dst.layout.bytesPerRow = bufferRowBytes;
920
921 wgpu::Extent3D copySize = {
922 static_cast<uint32_t>(srcRect.width()), static_cast<uint32_t>(srcRect.height()), 1};
923 fCommandEncoder.CopyTextureToBuffer(&src, &dst, &copySize);
924
925 return true;
926}
constexpr int32_t x() const
Definition SkRect.h:141
constexpr int32_t y() const
Definition SkRect.h:148
constexpr int32_t height() const
Definition SkRect.h:165
constexpr int32_t width() const
Definition SkRect.h:158

◆ onCopyTextureToTexture()

bool skgpu::graphite::DawnCommandBuffer::onCopyTextureToTexture ( const Texture src,
SkIRect  srcRect,
const Texture dst,
SkIPoint  dstPoint,
int  mipLevel 
)
overrideprivatevirtual

Implements skgpu::graphite::CommandBuffer.

Definition at line 964 of file DawnCommandBuffer.cpp.

968 {
969 SkASSERT(!fActiveRenderPassEncoder);
970 SkASSERT(!fActiveComputePassEncoder);
971
972 auto& wgpuTextureSrc = static_cast<const DawnTexture*>(src)->dawnTexture();
973 auto& wgpuTextureDst = static_cast<const DawnTexture*>(dst)->dawnTexture();
974
975 wgpu::ImageCopyTexture srcArgs;
976 srcArgs.texture = wgpuTextureSrc;
977 srcArgs.origin.x = srcRect.fLeft;
978 srcArgs.origin.y = srcRect.fTop;
979
980 wgpu::ImageCopyTexture dstArgs;
981 dstArgs.texture = wgpuTextureDst;
982 dstArgs.origin.x = dstPoint.fX;
983 dstArgs.origin.y = dstPoint.fY;
984 dstArgs.mipLevel = mipLevel;
985
986 wgpu::Extent3D copySize = {
987 static_cast<uint32_t>(srcRect.width()), static_cast<uint32_t>(srcRect.height()), 1};
988
989 fCommandEncoder.CopyTextureToTexture(&srcArgs, &dstArgs, &copySize);
990
991 return true;
992}
int32_t fX
x-axis value
int32_t fY
y-axis value
int32_t fTop
smaller y-axis bounds
Definition SkRect.h:34
int32_t fLeft
smaller x-axis bounds
Definition SkRect.h:33

◆ onResetCommandBuffer()

void skgpu::graphite::DawnCommandBuffer::onResetCommandBuffer ( )
overrideprivatevirtual

Implements skgpu::graphite::CommandBuffer.

Definition at line 75 of file DawnCommandBuffer.cpp.

75 {
76 fIntrinsicConstantBuffer = nullptr;
77
78 fActiveGraphicsPipeline = nullptr;
79 fActiveRenderPassEncoder = nullptr;
80 fActiveComputePassEncoder = nullptr;
81 fCommandEncoder = nullptr;
82
83 for (auto& bufferSlot : fBoundUniformBuffers) {
84 bufferSlot = nullptr;
85 }
86 fBoundUniformBuffersDirty = true;
87}

◆ onSynchronizeBufferToCpu()

bool skgpu::graphite::DawnCommandBuffer::onSynchronizeBufferToCpu ( const Buffer buffer,
bool *  outDidResultInWork 
)
overrideprivatevirtual

Implements skgpu::graphite::CommandBuffer.

Definition at line 994 of file DawnCommandBuffer.cpp.

994 {
995 return true;
996}

◆ setNewCommandBufferResources()

bool skgpu::graphite::DawnCommandBuffer::setNewCommandBufferResources ( )
overrideprivatevirtual

Implements skgpu::graphite::CommandBuffer.

Definition at line 89 of file DawnCommandBuffer.cpp.

89 {
90 SkASSERT(!fCommandEncoder);
91 fCommandEncoder = fSharedContext->device().CreateCommandEncoder();
92 SkASSERT(fCommandEncoder);
93 return true;
94}
const wgpu::Device & device() const

The documentation for this class was generated from the following files: