Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit 20c626a

Browse files
SenorBlancoSkia Commit-Bot
authored andcommitted
Update Dawn backend to ToT. This is about 3 months of changes.
Remove optional param to SetIndexBuffer(). Update SetVertexBuffers -> SetVertexBuffer. PipelineStageDescriptor -> ProgrammableStageDescriptor. Update past generator changes, ring buffer changes, etc. Add ErrorScopeTracker.cpp/.h to the build. Add Vulkan MemoryResourceAllocator files. Fix vertexShader ShaderStageDescriptor. Fix spirv-cross include path. TextureUsageBit -> TextureUsage, etc. DawnErrorCallback fixes. Removal of texture.CreateDefaultView. Fix GL supported_extesions mumbo jumbo. Update past ChromeOS change. Add PassResourceUsageTracker.cpp/.h to build. Add GLFormat.cpp/.h to build. Add Extensions and Toggles to the build. Add EncodingContext, AttachmentState to build. Add RenderEncoderBase to Dawn build. gn format dawn BUILD.gn, spirv-cross BUILD.gn. Change-Id: I26538d63c93668647048814aad6ad456ae323679 Reviewed-on: https://skia-review.googlesource.com/c/skia/+/248261 Commit-Queue: Stephen White <senorblanco@chromium.org> Reviewed-by: Corentin Wallez <cwallez@chromium.org>
1 parent ba8752f commit 20c626a

18 files changed

+219
-133
lines changed

DEPS

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ deps = {
88
"buildtools" : "https://chromium.googlesource.com/chromium/buildtools.git@505de88083136eefd056e5ee4ca0f01fe9b33de8",
99
"common" : "https://skia.googlesource.com/common.git@9737551d7a52c3db3262db5856e6bcd62c462b92",
1010
"third_party/externals/angle2" : "https://chromium.googlesource.com/angle/angle.git@2d0e5b554d4ffbca76730d0e7308e665675446df",
11-
"third_party/externals/dawn" : "https://dawn.googlesource.com/dawn.git@472bd1ec29d8d4e03404bf4b4e0233e4fc6031ce",
11+
"third_party/externals/dawn" : "https://dawn.googlesource.com/dawn.git@3b05a6e03160c1516a7e565b5cebe69dc0325bd5",
1212
"third_party/externals/dng_sdk" : "https://android.googlesource.com/platform/external/dng_sdk.git@c8d0c9b1d16bfda56f15165d39e0ffa360a11123",
1313
"third_party/externals/egl-registry" : "https://skia.googlesource.com/external/github.com/KhronosGroup/EGL-Registry@a0bca08de07c7d7651047bedc0b653cfaaa4f2ae",
1414
"third_party/externals/expat" : "https://android.googlesource.com/platform/external/expat.git@e5aa0a2cb0a5f759ef31c0819dc67d9b14246a4a",

build_overrides/dawn.gni

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@
55

66
# These are variables that are overridable by projects that include Dawn.
77

8-
dawn_root = "../externals/dawn"
9-
108
# The paths to Dawn's dependencies. For now, we leave these unset to
119
# use Dawn's DEPS. Eventually, we'll move to Skia's copies of as
1210
# many of these as possible. This will require updating Skia's

gn/BUILDCONFIG.gn

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,10 @@ is_linux = current_os == "linux"
6161
is_mac = current_os == "mac"
6262
is_win = current_os == "win"
6363

64+
# This is just to make the Dawn build files happy. Skia itself uses target_os = "linux"
65+
# for ChromeOS, so this variable will not affect Skia proper.
66+
is_chromeos = false
67+
6468
if (target_cpu == "") {
6569
target_cpu = host_cpu
6670
if (is_android || is_ios) {

src/gpu/dawn/GrDawnBuffer.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,19 +10,19 @@
1010
#include "src/gpu/dawn/GrDawnGpu.h"
1111

1212
namespace {
13-
dawn::BufferUsageBit GrGpuBufferTypeToDawnUsageBit(GrGpuBufferType type) {
13+
dawn::BufferUsage GrGpuBufferTypeToDawnUsageBit(GrGpuBufferType type) {
1414
switch (type) {
1515
case GrGpuBufferType::kVertex:
16-
return dawn::BufferUsageBit::Vertex;
16+
return dawn::BufferUsage::Vertex;
1717
case GrGpuBufferType::kIndex:
18-
return dawn::BufferUsageBit::Index;
18+
return dawn::BufferUsage::Index;
1919
case GrGpuBufferType::kXferCpuToGpu:
20-
return dawn::BufferUsageBit::CopySrc;
20+
return dawn::BufferUsage::CopySrc;
2121
case GrGpuBufferType::kXferGpuToCpu:
22-
return dawn::BufferUsageBit::CopyDst;
22+
return dawn::BufferUsage::CopyDst;
2323
default:
2424
SkASSERT(!"buffer type not supported by Dawn");
25-
return dawn::BufferUsageBit::Vertex;
25+
return dawn::BufferUsage::Vertex;
2626
}
2727
}
2828
}
@@ -33,7 +33,7 @@ GrDawnBuffer::GrDawnBuffer(GrDawnGpu* gpu, size_t sizeInBytes, GrGpuBufferType t
3333
, fStagingBuffer(nullptr) {
3434
dawn::BufferDescriptor bufferDesc;
3535
bufferDesc.size = sizeInBytes;
36-
bufferDesc.usage = GrGpuBufferTypeToDawnUsageBit(type) | dawn::BufferUsageBit::CopyDst;
36+
bufferDesc.usage = GrGpuBufferTypeToDawnUsageBit(type) | dawn::BufferUsage::CopyDst;
3737
fBuffer = this->getDawnGpu()->device().CreateBuffer(&bufferDesc);
3838
this->registerWithCache(SkBudgeted::kYes);
3939
}

src/gpu/dawn/GrDawnGpu.cpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ GrDawnGpu::GrDawnGpu(GrContext* context, const GrContextOptions& options,
125125
, fDevice(device)
126126
, fQueue(device.CreateQueue())
127127
, fCompiler(new SkSL::Compiler())
128-
, fUniformRingBuffer(this, dawn::BufferUsageBit::Uniform)
128+
, fUniformRingBuffer(this, dawn::BufferUsage::Uniform)
129129
, fRenderPipelineCache(kMaxRenderPipelineEntries)
130130
, fStagingManager(fDevice) {
131131
fCaps.reset(new GrDawnCaps(options));
@@ -327,12 +327,12 @@ GrBackendTexture GrDawnGpu::onCreateBackendTexture(int width, int height,
327327

328328
dawn::TextureDescriptor desc;
329329
desc.usage =
330-
dawn::TextureUsageBit::Sampled |
331-
dawn::TextureUsageBit::CopySrc |
332-
dawn::TextureUsageBit::CopyDst;
330+
dawn::TextureUsage::Sampled |
331+
dawn::TextureUsage::CopySrc |
332+
dawn::TextureUsage::CopyDst;
333333

334334
if (GrRenderable::kYes == renderable) {
335-
desc.usage |= dawn::TextureUsageBit::OutputAttachment;
335+
desc.usage |= dawn::TextureUsage::OutputAttachment;
336336
}
337337

338338
desc.size.width = width;
@@ -436,8 +436,8 @@ GrBackendRenderTarget GrDawnGpu::createTestingOnlyBackendRenderTarget(int width,
436436

437437
dawn::TextureDescriptor desc;
438438
desc.usage =
439-
dawn::TextureUsageBit::CopySrc |
440-
dawn::TextureUsageBit::OutputAttachment;
439+
dawn::TextureUsage::CopySrc |
440+
dawn::TextureUsage::OutputAttachment;
441441

442442
desc.size.width = width;
443443
desc.size.height = height;
@@ -533,7 +533,7 @@ bool GrDawnGpu::onReadPixels(GrSurface* surface, int left, int top, int width, i
533533
int sizeInBytes = rowBytes * height;
534534

535535
dawn::BufferDescriptor desc;
536-
desc.usage = dawn::BufferUsageBit::CopyDst | dawn::BufferUsageBit::MapRead;
536+
desc.usage = dawn::BufferUsage::CopyDst | dawn::BufferUsage::MapRead;
537537
desc.size = sizeInBytes;
538538

539539
dawn::Buffer buf = device().CreateBuffer(&desc);

src/gpu/dawn/GrDawnOpsRenderPass.cpp

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ dawn::RenderPassEncoder GrDawnOpsRenderPass::beginRenderPass(dawn::LoadOp colorO
5959
dawn::Texture texture = static_cast<GrDawnRenderTarget*>(fRenderTarget)->texture();
6060
auto stencilAttachment = static_cast<GrDawnStencilAttachment*>(
6161
fRenderTarget->renderTargetPriv().getStencilAttachment());
62-
dawn::TextureView colorView = texture.CreateDefaultView();
62+
dawn::TextureView colorView = texture.CreateView();
6363
const float *c = fColorInfo.fClearColor.vec();
6464

6565
dawn::RenderPassColorAttachmentDescriptor colorAttachment;
@@ -71,7 +71,7 @@ dawn::RenderPassEncoder GrDawnOpsRenderPass::beginRenderPass(dawn::LoadOp colorO
7171
dawn::RenderPassColorAttachmentDescriptor* colorAttachments = { &colorAttachment };
7272
dawn::RenderPassDescriptor renderPassDescriptor;
7373
renderPassDescriptor.colorAttachmentCount = 1;
74-
renderPassDescriptor.colorAttachments = &colorAttachments;
74+
renderPassDescriptor.colorAttachments = colorAttachments;
7575
if (stencilAttachment) {
7676
dawn::RenderPassDepthStencilAttachmentDescriptor depthStencilAttachment;
7777
depthStencilAttachment.attachment = stencilAttachment->view();
@@ -178,9 +178,8 @@ void GrDawnOpsRenderPass::sendInstancedMeshToGpu(GrPrimitiveType,
178178
const GrBuffer* instanceBuffer,
179179
int instanceCount,
180180
int baseInstance) {
181-
static const uint64_t vertexBufferOffsets[1] = {0};
182181
dawn::Buffer vb = static_cast<const GrDawnBuffer*>(vertexBuffer)->get();
183-
fPassEncoder.SetVertexBuffers(0, 1, &vb, vertexBufferOffsets);
182+
fPassEncoder.SetVertexBuffer(0, vb);
184183
fPassEncoder.Draw(vertexCount, 1, baseVertex, baseInstance);
185184
fGpu->stats()->incNumDraws();
186185
}
@@ -195,12 +194,10 @@ void GrDawnOpsRenderPass::sendIndexedInstancedMeshToGpu(GrPrimitiveType,
195194
int instanceCount,
196195
int baseInstance,
197196
GrPrimitiveRestart restart) {
198-
uint64_t vertexBufferOffsets[1];
199-
vertexBufferOffsets[0] = 0;
200197
dawn::Buffer vb = static_cast<const GrDawnBuffer*>(vertexBuffer)->get();
201198
dawn::Buffer ib = static_cast<const GrDawnBuffer*>(indexBuffer)->get();
202-
fPassEncoder.SetIndexBuffer(ib, 0);
203-
fPassEncoder.SetVertexBuffers(0, 1, &vb, vertexBufferOffsets);
199+
fPassEncoder.SetIndexBuffer(ib);
200+
fPassEncoder.SetVertexBuffer(0, vb);
204201
fPassEncoder.DrawIndexed(indexCount, 1, baseIndex, baseVertex, baseInstance);
205202
fGpu->stats()->incNumDraws();
206203
}

src/gpu/dawn/GrDawnProgramBuilder.cpp

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,11 @@
1515
#include "src/sksl/SkSLCompiler.h"
1616

1717
static SkSL::String sksl_to_spirv(const GrDawnGpu* gpu, const char* shaderString,
18-
SkSL::Program::Kind kind, SkSL::Program::Inputs* inputs) {
18+
SkSL::Program::Kind kind, bool flipY,
19+
SkSL::Program::Inputs* inputs) {
1920
SkSL::Program::Settings settings;
2021
settings.fCaps = gpu->caps()->shaderCaps();
22+
settings.fFlipY = flipY;
2123
std::unique_ptr<SkSL::Program> program = gpu->shaderCompiler()->convertProgram(
2224
kind,
2325
shaderString,
@@ -307,9 +309,10 @@ sk_sp<GrDawnProgram> GrDawnProgramBuilder::Build(GrDawnGpu* gpu,
307309
uint32_t fragmentUniformSize = builder.fUniformHandler.fCurrentFragmentUBOOffset;
308310
sk_sp<GrDawnProgram> result(
309311
new GrDawnProgram(uniforms, geometryUniformSize, fragmentUniformSize));
310-
auto vsModule = builder.createShaderModule(builder.fVS, SkSL::Program::kVertex_Kind,
312+
bool flipY = programInfo.origin() != kTopLeft_GrSurfaceOrigin;
313+
auto vsModule = builder.createShaderModule(builder.fVS, SkSL::Program::kVertex_Kind, flipY,
311314
&vertInputs);
312-
auto fsModule = builder.createShaderModule(builder.fFS, SkSL::Program::kFragment_Kind,
315+
auto fsModule = builder.createShaderModule(builder.fFS, SkSL::Program::kFragment_Kind, flipY,
313316
&fragInputs);
314317
result->fGeometryProcessor = std::move(builder.fGeometryProcessor);
315318
result->fXferProcessor = std::move(builder.fXferProcessor);
@@ -318,19 +321,19 @@ sk_sp<GrDawnProgram> GrDawnProgramBuilder::Build(GrDawnGpu* gpu,
318321
std::vector<dawn::BindGroupLayoutBinding> layoutBindings;
319322
if (0 != geometryUniformSize) {
320323
layoutBindings.push_back({ GrDawnUniformHandler::kGeometryBinding,
321-
dawn::ShaderStageBit::Vertex,
324+
dawn::ShaderStage::Vertex,
322325
dawn::BindingType::UniformBuffer});
323326
}
324327
if (0 != fragmentUniformSize) {
325328
layoutBindings.push_back({ GrDawnUniformHandler::kFragBinding,
326-
dawn::ShaderStageBit::Fragment,
329+
dawn::ShaderStage::Fragment,
327330
dawn::BindingType::UniformBuffer});
328331
}
329332
uint32_t binding = GrDawnUniformHandler::kSamplerBindingBase;
330333
for (int i = 0; i < builder.fUniformHandler.fSamplers.count(); ++i) {
331-
layoutBindings.push_back({ binding++, dawn::ShaderStageBit::Fragment,
334+
layoutBindings.push_back({ binding++, dawn::ShaderStage::Fragment,
332335
dawn::BindingType::Sampler});
333-
layoutBindings.push_back({ binding++, dawn::ShaderStageBit::Fragment,
336+
layoutBindings.push_back({ binding++, dawn::ShaderStage::Fragment,
334337
dawn::BindingType::SampledTexture});
335338
}
336339
dawn::BindGroupLayoutDescriptor bindGroupLayoutDesc;
@@ -401,26 +404,25 @@ sk_sp<GrDawnProgram> GrDawnProgramBuilder::Build(GrDawnGpu* gpu,
401404
vertexInput.bufferCount = inputs.size();
402405
vertexInput.buffers = &inputs.front();
403406

404-
dawn::PipelineStageDescriptor vsDesc;
407+
dawn::ProgrammableStageDescriptor vsDesc;
405408
vsDesc.module = vsModule;
406409
vsDesc.entryPoint = "main";
407410

408-
dawn::PipelineStageDescriptor fsDesc;
411+
dawn::ProgrammableStageDescriptor fsDesc;
409412
fsDesc.module = fsModule;
410413
fsDesc.entryPoint = "main";
411414

412415
dawn::RenderPipelineDescriptor rpDesc;
413416
rpDesc.layout = pipelineLayout;
414-
rpDesc.vertexStage = &vsDesc;
417+
rpDesc.vertexStage = vsDesc;
415418
rpDesc.fragmentStage = &fsDesc;
416419
rpDesc.vertexInput = &vertexInput;
417420
rpDesc.primitiveTopology = to_dawn_primitive_topology(primitiveType);
418421
if (hasDepthStencil) {
419422
rpDesc.depthStencilState = &depthStencilState;
420423
}
421424
rpDesc.colorStateCount = 1;
422-
dawn::ColorStateDescriptor* colorStatesPtr[] = { &colorState };
423-
rpDesc.colorStates = colorStatesPtr;
425+
rpDesc.colorStates = &colorState;
424426
result->fRenderPipeline = gpu->device().CreateRenderPipeline(&rpDesc);
425427
return result;
426428
}
@@ -437,6 +439,7 @@ GrDawnProgramBuilder::GrDawnProgramBuilder(GrDawnGpu* gpu,
437439

438440
dawn::ShaderModule GrDawnProgramBuilder::createShaderModule(const GrGLSLShaderBuilder& builder,
439441
SkSL::Program::Kind kind,
442+
bool flipY,
440443
SkSL::Program::Inputs* inputs) {
441444
dawn::Device device = fGpu->device();
442445
SkString source(builder.fCompilerString.c_str());
@@ -446,7 +449,7 @@ dawn::ShaderModule GrDawnProgramBuilder::createShaderModule(const GrGLSLShaderBu
446449
printf("converting program:\n%s\n", sksl.c_str());
447450
#endif
448451

449-
SkSL::String spirvSource = sksl_to_spirv(fGpu, source.c_str(), kind, inputs);
452+
SkSL::String spirvSource = sksl_to_spirv(fGpu, source.c_str(), kind, flipY, inputs);
450453

451454
dawn::ShaderModuleDescriptor desc;
452455
desc.codeSize = spirvSource.size() / 4;

src/gpu/dawn/GrDawnProgramBuilder.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ struct GrDawnProgram : public SkRefCnt {
3939
void getRTAdjustmentVec(float* destVec) {
4040
destVec[0] = 2.f / fRenderTargetSize.fWidth;
4141
destVec[1] = -1.f;
42-
if (kBottomLeft_GrSurfaceOrigin == fRenderTargetOrigin) {
42+
if (kTopLeft_GrSurfaceOrigin == fRenderTargetOrigin) {
4343
destVec[2] = -2.f / fRenderTargetSize.fHeight;
4444
destVec[3] = 1.f;
4545
} else {
@@ -91,7 +91,7 @@ class GrDawnProgramBuilder : public GrGLSLProgramBuilder {
9191
const GrProgramInfo&,
9292
GrProgramDesc*);
9393
dawn::ShaderModule createShaderModule(const GrGLSLShaderBuilder&, SkSL::Program::Kind,
94-
SkSL::Program::Inputs* inputs);
94+
bool flipY, SkSL::Program::Inputs* inputs);
9595
GrDawnGpu* fGpu;
9696
GrDawnVaryingHandler fVaryingHandler;
9797
GrDawnUniformHandler fUniformHandler;

src/gpu/dawn/GrDawnRingBuffer.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ namespace {
1414
const int kDefaultSize = 512 * 1024;
1515
}
1616

17-
GrDawnRingBuffer::GrDawnRingBuffer(GrDawnGpu* gpu, dawn::BufferUsageBit usage)
17+
GrDawnRingBuffer::GrDawnRingBuffer(GrDawnGpu* gpu, dawn::BufferUsage usage)
1818
: fGpu(gpu) , fUsage(usage) {
1919
}
2020

@@ -24,7 +24,7 @@ GrDawnRingBuffer::~GrDawnRingBuffer() {
2424
GrDawnRingBuffer::Slice GrDawnRingBuffer::allocate(int size) {
2525
if (!fBuffer || fOffset + size > kDefaultSize) {
2626
dawn::BufferDescriptor desc;
27-
desc.usage = fUsage | dawn::BufferUsageBit::CopyDst;
27+
desc.usage = fUsage | dawn::BufferUsage::CopyDst;
2828
desc.size = kDefaultSize;
2929
fBuffer = fGpu->device().CreateBuffer(&desc);
3030
fOffset = 0;

src/gpu/dawn/GrDawnRingBuffer.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ class GrDawnGpu;
1616

1717
class GrDawnRingBuffer : public SkRefCnt {
1818
public:
19-
GrDawnRingBuffer(GrDawnGpu* gpu, dawn::BufferUsageBit usage);
19+
GrDawnRingBuffer(GrDawnGpu* gpu, dawn::BufferUsage usage);
2020
~GrDawnRingBuffer() override;
2121

2222
struct Slice {
@@ -35,7 +35,7 @@ class GrDawnRingBuffer : public SkRefCnt {
3535

3636
private:
3737
GrDawnGpu* fGpu;
38-
dawn::BufferUsageBit fUsage;
38+
dawn::BufferUsage fUsage;
3939
dawn::Buffer fBuffer;
4040
int fOffset = 0;
4141
};

0 commit comments

Comments
 (0)