Remove [[block]] attribute from all shaders

This has been removed from WGSL and is now deprecated in Tint.

Bug: tint:1324
Change-Id: Ic187ce3c5ce0723db6f3ca6483e9f5e73ce27acc
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/72880
Auto-Submit: James Price <jrprice@google.com>
Reviewed-by: Corentin Wallez <cwallez@google.com>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
This commit is contained in:
James Price 2021-12-15 13:13:26 +00:00 committed by Dawn LUCI CQ
parent 16ae3b8b95
commit d4f8c39f52
47 changed files with 165 additions and 165 deletions

View File

@ -58,7 +58,7 @@ void init() {
640, 480); 640, 480);
wgpu::ShaderModule vsModule = utils::CreateShaderModule(device, R"( wgpu::ShaderModule vsModule = utils::CreateShaderModule(device, R"(
[[block]] struct Constants { struct Constants {
scale : f32; scale : f32;
time : f32; time : f32;
offsetX : f32; offsetX : f32;

View File

@ -151,7 +151,7 @@ void initSim() {
pos : vec2<f32>; pos : vec2<f32>;
vel : vec2<f32>; vel : vec2<f32>;
}; };
[[block]] struct SimParams { struct SimParams {
deltaT : f32; deltaT : f32;
rule1Distance : f32; rule1Distance : f32;
rule2Distance : f32; rule2Distance : f32;
@ -161,7 +161,7 @@ void initSim() {
rule3Scale : f32; rule3Scale : f32;
particleCount : u32; particleCount : u32;
}; };
[[block]] struct Particles { struct Particles {
particles : array<Particle>; particles : array<Particle>;
}; };
[[binding(0), group(0)]] var<uniform> params : SimParams; [[binding(0), group(0)]] var<uniform> params : SimParams;

View File

@ -45,18 +45,18 @@ namespace dawn_native {
// Type 'bool' cannot be used in storage class 'uniform' as it is non-host-shareable. // Type 'bool' cannot be used in storage class 'uniform' as it is non-host-shareable.
Ref<ShaderModuleBase> shaderModule; Ref<ShaderModuleBase> shaderModule;
DAWN_TRY_ASSIGN(shaderModule, utils::CreateShaderModule(device, R"( DAWN_TRY_ASSIGN(shaderModule, utils::CreateShaderModule(device, R"(
[[block]] struct UniformParams { struct UniformParams {
maxComputeWorkgroupsPerDimension: u32; maxComputeWorkgroupsPerDimension: u32;
clientOffsetInU32: u32; clientOffsetInU32: u32;
enableValidation: u32; enableValidation: u32;
duplicateNumWorkgroups: u32; duplicateNumWorkgroups: u32;
}; };
[[block]] struct IndirectParams { struct IndirectParams {
data: array<u32>; data: array<u32>;
}; };
[[block]] struct ValidatedParams { struct ValidatedParams {
data: array<u32>; data: array<u32>;
}; };

View File

@ -48,7 +48,7 @@ namespace dawn_native {
padding: u32; padding: u32;
}; };
[[block]] struct Uniforms { // offset align size struct Uniforms { // offset align size
scale: vec2<f32>; // 0 8 8 scale: vec2<f32>; // 0 8 8
offset: vec2<f32>; // 8 8 8 offset: vec2<f32>; // 8 8 8
steps_mask: u32; // 16 4 4 steps_mask: u32; // 16 4 4

View File

@ -53,7 +53,7 @@ namespace dawn_native {
let kBaseVertexEntry = 3u; let kBaseVertexEntry = 3u;
let kFirstInstanceEntry = 4u; let kFirstInstanceEntry = 4u;
[[block]] struct BatchInfo { struct BatchInfo {
numIndexBufferElementsLow: u32; numIndexBufferElementsLow: u32;
numIndexBufferElementsHigh: u32; numIndexBufferElementsHigh: u32;
numDraws: u32; numDraws: u32;
@ -61,7 +61,7 @@ namespace dawn_native {
indirectOffsets: array<u32>; indirectOffsets: array<u32>;
}; };
[[block]] struct IndirectParams { struct IndirectParams {
data: array<u32>; data: array<u32>;
}; };

View File

@ -40,15 +40,15 @@ namespace dawn_native {
high : u32; high : u32;
}; };
[[block]] struct TimestampArr { struct TimestampArr {
t : array<Timestamp>; t : array<Timestamp>;
}; };
[[block]] struct AvailabilityArr { struct AvailabilityArr {
v : array<u32>; v : array<u32>;
}; };
[[block]] struct TimestampParams { struct TimestampParams {
first : u32; first : u32;
count : u32; count : u32;
offset : u32; offset : u32;

View File

@ -1146,7 +1146,7 @@ std::ostringstream& DawnTestBase::ExpectSampledFloatDataImpl(wgpu::TextureView t
shaderSource << "let width : u32 = " << width << "u;\n"; shaderSource << "let width : u32 = " << width << "u;\n";
shaderSource << "[[group(0), binding(0)]] var tex : " << wgslTextureType << ";\n"; shaderSource << "[[group(0), binding(0)]] var tex : " << wgslTextureType << ";\n";
shaderSource << R"( shaderSource << R"(
[[block]] struct Result { struct Result {
values : array<f32>; values : array<f32>;
}; };
[[group(0), binding(1)]] var<storage, read_write> result : Result; [[group(0), binding(1)]] var<storage, read_write> result : Result;

View File

@ -67,7 +67,7 @@ class BindGroupTests : public DawnTest {
std::ostringstream fs; std::ostringstream fs;
for (size_t i = 0; i < bindingTypes.size(); ++i) { for (size_t i = 0; i < bindingTypes.size(); ++i) {
fs << "[[block]] struct Buffer" << i << R"( { fs << "struct Buffer" << i << R"( {
color : vec4<f32>; color : vec4<f32>;
};)"; };)";
@ -129,7 +129,7 @@ class BindGroupTests : public DawnTest {
// This test passes by not asserting or crashing. // This test passes by not asserting or crashing.
TEST_P(BindGroupTests, ReusedBindGroupSingleSubmit) { TEST_P(BindGroupTests, ReusedBindGroupSingleSubmit) {
wgpu::ShaderModule module = utils::CreateShaderModule(device, R"( wgpu::ShaderModule module = utils::CreateShaderModule(device, R"(
[[block]] struct Contents { struct Contents {
f : f32; f : f32;
}; };
[[group(0), binding(0)]] var <uniform> contents: Contents; [[group(0), binding(0)]] var <uniform> contents: Contents;
@ -164,7 +164,7 @@ TEST_P(BindGroupTests, ReusedUBO) {
wgpu::ShaderModule vsModule = utils::CreateShaderModule(device, R"( wgpu::ShaderModule vsModule = utils::CreateShaderModule(device, R"(
// TODO(crbug.com/tint/369): Use a mat2x2 when Tint translates it correctly. // TODO(crbug.com/tint/369): Use a mat2x2 when Tint translates it correctly.
[[block]] struct VertexUniformBuffer { struct VertexUniformBuffer {
transform : vec4<f32>; transform : vec4<f32>;
}; };
@ -182,7 +182,7 @@ TEST_P(BindGroupTests, ReusedUBO) {
})"); })");
wgpu::ShaderModule fsModule = utils::CreateShaderModule(device, R"( wgpu::ShaderModule fsModule = utils::CreateShaderModule(device, R"(
[[block]] struct FragmentUniformBuffer { struct FragmentUniformBuffer {
color : vec4<f32>; color : vec4<f32>;
}; };
[[group(0), binding(1)]] var <uniform> fragmentUbo : FragmentUniformBuffer; [[group(0), binding(1)]] var <uniform> fragmentUbo : FragmentUniformBuffer;
@ -242,7 +242,7 @@ TEST_P(BindGroupTests, UBOSamplerAndTexture) {
wgpu::ShaderModule vsModule = utils::CreateShaderModule(device, R"( wgpu::ShaderModule vsModule = utils::CreateShaderModule(device, R"(
// TODO(crbug.com/tint/369): Use a mat2x2 when Tint translates it correctly. // TODO(crbug.com/tint/369): Use a mat2x2 when Tint translates it correctly.
[[block]] struct VertexUniformBuffer { struct VertexUniformBuffer {
transform : vec4<f32>; transform : vec4<f32>;
}; };
[[group(0), binding(0)]] var <uniform> vertexUbo : VertexUniformBuffer; [[group(0), binding(0)]] var <uniform> vertexUbo : VertexUniformBuffer;
@ -345,7 +345,7 @@ TEST_P(BindGroupTests, MultipleBindLayouts) {
wgpu::ShaderModule vsModule = utils::CreateShaderModule(device, R"( wgpu::ShaderModule vsModule = utils::CreateShaderModule(device, R"(
// TODO(crbug.com/tint/369): Use a mat2x2 when Tint translates it correctly. // TODO(crbug.com/tint/369): Use a mat2x2 when Tint translates it correctly.
[[block]] struct VertexUniformBuffer { struct VertexUniformBuffer {
transform : vec4<f32>; transform : vec4<f32>;
}; };
@ -366,7 +366,7 @@ TEST_P(BindGroupTests, MultipleBindLayouts) {
})"); })");
wgpu::ShaderModule fsModule = utils::CreateShaderModule(device, R"( wgpu::ShaderModule fsModule = utils::CreateShaderModule(device, R"(
[[block]] struct FragmentUniformBuffer { struct FragmentUniformBuffer {
color : vec4<f32>; color : vec4<f32>;
}; };
@ -435,7 +435,7 @@ TEST_P(BindGroupTests, MultipleBindLayouts) {
// This test passes by not asserting or crashing. // This test passes by not asserting or crashing.
TEST_P(BindGroupTests, MultipleEntryPointsWithMultipleNonZeroGroups) { TEST_P(BindGroupTests, MultipleEntryPointsWithMultipleNonZeroGroups) {
wgpu::ShaderModule module = utils::CreateShaderModule(device, R"( wgpu::ShaderModule module = utils::CreateShaderModule(device, R"(
[[block]] struct Contents { struct Contents {
f : f32; f : f32;
}; };
[[group(0), binding(0)]] var <uniform> contents0: Contents; [[group(0), binding(0)]] var <uniform> contents0: Contents;
@ -1035,11 +1035,11 @@ TEST_P(BindGroupTests, DynamicOffsetOrder) {
wgpu::ComputePipelineDescriptor pipelineDescriptor; wgpu::ComputePipelineDescriptor pipelineDescriptor;
pipelineDescriptor.compute.module = utils::CreateShaderModule(device, R"( pipelineDescriptor.compute.module = utils::CreateShaderModule(device, R"(
[[block]] struct Buffer { struct Buffer {
value : u32; value : u32;
}; };
[[block]] struct OutputBuffer { struct OutputBuffer {
value : vec3<u32>; value : vec3<u32>;
}; };
@ -1118,11 +1118,11 @@ TEST_P(BindGroupTests, DynamicAndNonDynamicBindingsDoNotConflictAfterRemapping)
wgpu::ComputePipelineDescriptor pipelineDescriptor; wgpu::ComputePipelineDescriptor pipelineDescriptor;
pipelineDescriptor.compute.module = utils::CreateShaderModule(device, R"( pipelineDescriptor.compute.module = utils::CreateShaderModule(device, R"(
[[block]] struct Buffer { struct Buffer {
value : u32; value : u32;
}; };
[[block]] struct OutputBuffer { struct OutputBuffer {
value : vec2<u32>; value : vec2<u32>;
}; };
@ -1244,7 +1244,7 @@ TEST_P(BindGroupTests, ArbitraryBindingNumbers) {
})"); })");
wgpu::ShaderModule fsModule = utils::CreateShaderModule(device, R"( wgpu::ShaderModule fsModule = utils::CreateShaderModule(device, R"(
[[block]] struct Ubo { struct Ubo {
color : vec4<f32>; color : vec4<f32>;
}; };
@ -1386,7 +1386,7 @@ TEST_P(BindGroupTests, ReadonlyStorage) {
})"); })");
pipelineDescriptor.cFragment.module = utils::CreateShaderModule(device, R"( pipelineDescriptor.cFragment.module = utils::CreateShaderModule(device, R"(
[[block]] struct Buffer0 { struct Buffer0 {
color : vec4<f32>; color : vec4<f32>;
}; };
[[group(0), binding(0)]] var<storage, read> buffer0 : Buffer0; [[group(0), binding(0)]] var<storage, read> buffer0 : Buffer0;
@ -1501,7 +1501,7 @@ TEST_P(BindGroupTests, ReallyLargeBindGroup) {
device, wgpu::BufferUsage::Uniform, {expectedValue, 0, 0, 0}); device, wgpu::BufferUsage::Uniform, {expectedValue, 0, 0, 0});
bgEntries.push_back({nullptr, binding, buffer, 0, 4 * sizeof(uint32_t), nullptr, nullptr}); bgEntries.push_back({nullptr, binding, buffer, 0, 4 * sizeof(uint32_t), nullptr, nullptr});
interface << "[[block]] struct UniformBuffer" << i << R"({ interface << "struct UniformBuffer" << i << R"({
value : u32; value : u32;
}; };
)"; )";
@ -1518,7 +1518,7 @@ TEST_P(BindGroupTests, ReallyLargeBindGroup) {
device, wgpu::BufferUsage::Storage, {expectedValue}); device, wgpu::BufferUsage::Storage, {expectedValue});
bgEntries.push_back({nullptr, binding, buffer, 0, sizeof(uint32_t), nullptr, nullptr}); bgEntries.push_back({nullptr, binding, buffer, 0, sizeof(uint32_t), nullptr, nullptr});
interface << "[[block]] struct ReadOnlyStorageBuffer" << i << R"({ interface << "struct ReadOnlyStorageBuffer" << i << R"({
value : u32; value : u32;
}; };
)"; )";
@ -1534,7 +1534,7 @@ TEST_P(BindGroupTests, ReallyLargeBindGroup) {
device, wgpu::BufferUsage::Storage | wgpu::BufferUsage::CopySrc, {0}); device, wgpu::BufferUsage::Storage | wgpu::BufferUsage::CopySrc, {0});
bgEntries.push_back({nullptr, binding, result, 0, sizeof(uint32_t), nullptr, nullptr}); bgEntries.push_back({nullptr, binding, result, 0, sizeof(uint32_t), nullptr, nullptr});
interface << R"([[block]] struct ReadWriteStorageBuffer{ interface << R"(struct ReadWriteStorageBuffer{
value : u32; value : u32;
}; };
)"; )";

View File

@ -997,7 +997,7 @@ TEST_P(BufferZeroInitTest, BoundAsUniformBuffer) {
constexpr uint32_t kBoundBufferSize = 16u; constexpr uint32_t kBoundBufferSize = 16u;
wgpu::ShaderModule module = utils::CreateShaderModule(device, R"( wgpu::ShaderModule module = utils::CreateShaderModule(device, R"(
[[block]] struct UBO { struct UBO {
value : vec4<u32>; value : vec4<u32>;
}; };
[[group(0), binding(0)]] var<uniform> ubo : UBO; [[group(0), binding(0)]] var<uniform> ubo : UBO;
@ -1036,7 +1036,7 @@ TEST_P(BufferZeroInitTest, BoundAsReadonlyStorageBuffer) {
constexpr uint32_t kBoundBufferSize = 16u; constexpr uint32_t kBoundBufferSize = 16u;
wgpu::ShaderModule module = utils::CreateShaderModule(device, R"( wgpu::ShaderModule module = utils::CreateShaderModule(device, R"(
[[block]] struct SSBO { struct SSBO {
value : vec4<u32>; value : vec4<u32>;
}; };
[[group(0), binding(0)]] var<storage, read> ssbo : SSBO; [[group(0), binding(0)]] var<storage, read> ssbo : SSBO;
@ -1075,7 +1075,7 @@ TEST_P(BufferZeroInitTest, BoundAsStorageBuffer) {
constexpr uint32_t kBoundBufferSize = 32u; constexpr uint32_t kBoundBufferSize = 32u;
wgpu::ShaderModule module = utils::CreateShaderModule(device, R"( wgpu::ShaderModule module = utils::CreateShaderModule(device, R"(
[[block]] struct SSBO { struct SSBO {
value : array<vec4<u32>, 2>; value : array<vec4<u32>, 2>;
}; };
[[group(0), binding(0)]] var<storage, read_write> ssbo : SSBO; [[group(0), binding(0)]] var<storage, read_write> ssbo : SSBO;

View File

@ -61,7 +61,7 @@ class ColorStateTest : public DawnTest {
// attachment. basePipeline has no blending // attachment. basePipeline has no blending
void SetupSingleSourcePipelines(wgpu::ColorTargetState colorTargetState) { void SetupSingleSourcePipelines(wgpu::ColorTargetState colorTargetState) {
wgpu::ShaderModule fsModule = utils::CreateShaderModule(device, R"( wgpu::ShaderModule fsModule = utils::CreateShaderModule(device, R"(
[[block]] struct MyBlock { struct MyBlock {
color : vec4<f32>; color : vec4<f32>;
}; };
@ -791,7 +791,7 @@ TEST_P(ColorStateTest, IndependentColorState) {
{renderTargetViews[0], renderTargetViews[1], renderTargetViews[2], renderTargetViews[3]}); {renderTargetViews[0], renderTargetViews[1], renderTargetViews[2], renderTargetViews[3]});
wgpu::ShaderModule fsModule = utils::CreateShaderModule(device, R"( wgpu::ShaderModule fsModule = utils::CreateShaderModule(device, R"(
[[block]] struct MyBlock { struct MyBlock {
color0 : vec4<f32>; color0 : vec4<f32>;
color1 : vec4<f32>; color1 : vec4<f32>;
color2 : vec4<f32>; color2 : vec4<f32>;
@ -915,7 +915,7 @@ TEST_P(ColorStateTest, IndependentColorState) {
// Test that the default blend color is correctly set at the beginning of every subpass // Test that the default blend color is correctly set at the beginning of every subpass
TEST_P(ColorStateTest, DefaultBlendColor) { TEST_P(ColorStateTest, DefaultBlendColor) {
wgpu::ShaderModule fsModule = utils::CreateShaderModule(device, R"( wgpu::ShaderModule fsModule = utils::CreateShaderModule(device, R"(
[[block]] struct MyBlock { struct MyBlock {
color : vec4<f32>; color : vec4<f32>;
}; };
@ -1041,7 +1041,7 @@ TEST_P(ColorStateTest, DefaultBlendColor) {
// attachment. // attachment.
TEST_P(ColorStateTest, ColorWriteMaskDoesNotAffectRenderPassLoadOpClear) { TEST_P(ColorStateTest, ColorWriteMaskDoesNotAffectRenderPassLoadOpClear) {
wgpu::ShaderModule fsModule = utils::CreateShaderModule(device, R"( wgpu::ShaderModule fsModule = utils::CreateShaderModule(device, R"(
[[block]] struct MyBlock { struct MyBlock {
color : vec4<f32>; color : vec4<f32>;
}; };

View File

@ -88,7 +88,7 @@ void ComputeCopyStorageBufferTests::BasicTest(const char* shader) {
// Test that a trivial compute-shader memcpy implementation works. // Test that a trivial compute-shader memcpy implementation works.
TEST_P(ComputeCopyStorageBufferTests, SizedArrayOfBasic) { TEST_P(ComputeCopyStorageBufferTests, SizedArrayOfBasic) {
BasicTest(R"( BasicTest(R"(
[[block]] struct Buf { struct Buf {
s : array<vec4<u32>, 4>; s : array<vec4<u32>, 4>;
}; };
@ -111,7 +111,7 @@ TEST_P(ComputeCopyStorageBufferTests, SizedArrayOfStruct) {
b : vec2<u32>; b : vec2<u32>;
}; };
[[block]] struct Buf { struct Buf {
s : array<S, 4>; s : array<S, 4>;
}; };
@ -129,7 +129,7 @@ TEST_P(ComputeCopyStorageBufferTests, SizedArrayOfStruct) {
// Test that a trivial compute-shader memcpy implementation works. // Test that a trivial compute-shader memcpy implementation works.
TEST_P(ComputeCopyStorageBufferTests, UnsizedArrayOfBasic) { TEST_P(ComputeCopyStorageBufferTests, UnsizedArrayOfBasic) {
BasicTest(R"( BasicTest(R"(
[[block]] struct Buf { struct Buf {
s : array<vec4<u32>>; s : array<vec4<u32>>;
}; };

View File

@ -28,7 +28,7 @@ class ComputeDispatchTests : public DawnTest {
// Write workgroup number into the output buffer if we saw the biggest dispatch // Write workgroup number into the output buffer if we saw the biggest dispatch
// To make sure the dispatch was not called, write maximum u32 value for 0 dispatches // To make sure the dispatch was not called, write maximum u32 value for 0 dispatches
wgpu::ShaderModule module = utils::CreateShaderModule(device, R"( wgpu::ShaderModule module = utils::CreateShaderModule(device, R"(
[[block]] struct OutputBuf { struct OutputBuf {
workGroups : vec3<u32>; workGroups : vec3<u32>;
}; };
@ -54,10 +54,10 @@ class ComputeDispatchTests : public DawnTest {
// Test the use of the compute pipelines without using [[num_workgroups]] // Test the use of the compute pipelines without using [[num_workgroups]]
wgpu::ShaderModule moduleWithoutNumWorkgroups = utils::CreateShaderModule(device, R"( wgpu::ShaderModule moduleWithoutNumWorkgroups = utils::CreateShaderModule(device, R"(
[[block]] struct InputBuf { struct InputBuf {
expectedDispatch : vec3<u32>; expectedDispatch : vec3<u32>;
}; };
[[block]] struct OutputBuf { struct OutputBuf {
workGroups : vec3<u32>; workGroups : vec3<u32>;
}; };

View File

@ -174,17 +174,17 @@ struct Data {
footer : u32; footer : u32;
}; };
[[block]] struct Input { struct Input {
header : u32; header : u32;
{data_align}data : Data; {data_align}data : Data;
{footer_align}footer : u32; {footer_align}footer : u32;
}; };
[[block]] struct Output { struct Output {
data : {field_type}; data : {field_type};
}; };
[[block]] struct Status { struct Status {
code : u32; code : u32;
}; };

View File

@ -74,7 +74,7 @@ TEST_P(ComputeSharedMemoryTests, Basic) {
let kTileSize : u32 = 4u; let kTileSize : u32 = 4u;
let kInstances : u32 = 11u; let kInstances : u32 = 11u;
[[block]] struct Dst { struct Dst {
x : u32; x : u32;
}; };
@ -110,7 +110,7 @@ TEST_P(ComputeSharedMemoryTests, AssortedTypes) {
m: mat2x2<f32>; m: mat2x2<f32>;
}; };
[[block]] struct Dst { struct Dst {
d_struct : StructValues; d_struct : StructValues;
d_matrix : mat2x2<f32>; d_matrix : mat2x2<f32>;
d_array : array<u32, 4>; d_array : array<u32, 4>;

View File

@ -32,7 +32,7 @@ TEST_P(ComputeStorageBufferBarrierTests, AddIncrement) {
device, data.data(), bufferSize, wgpu::BufferUsage::Storage | wgpu::BufferUsage::CopySrc); device, data.data(), bufferSize, wgpu::BufferUsage::Storage | wgpu::BufferUsage::CopySrc);
wgpu::ShaderModule module = utils::CreateShaderModule(device, R"( wgpu::ShaderModule module = utils::CreateShaderModule(device, R"(
[[block]] struct Buf { struct Buf {
data : array<u32, 100>; data : array<u32, 100>;
}; };
@ -82,7 +82,7 @@ TEST_P(ComputeStorageBufferBarrierTests, AddPingPong) {
device, data.data(), bufferSize, wgpu::BufferUsage::Storage | wgpu::BufferUsage::CopySrc); device, data.data(), bufferSize, wgpu::BufferUsage::Storage | wgpu::BufferUsage::CopySrc);
wgpu::ShaderModule module = utils::CreateShaderModule(device, R"( wgpu::ShaderModule module = utils::CreateShaderModule(device, R"(
[[block]] struct Buf { struct Buf {
data : array<u32, 100>; data : array<u32, 100>;
}; };
@ -148,7 +148,7 @@ TEST_P(ComputeStorageBufferBarrierTests, StorageAndReadonlyStoragePingPongInOneP
device, data.data(), bufferSize, wgpu::BufferUsage::Storage | wgpu::BufferUsage::CopySrc); device, data.data(), bufferSize, wgpu::BufferUsage::Storage | wgpu::BufferUsage::CopySrc);
wgpu::ShaderModule module = utils::CreateShaderModule(device, R"( wgpu::ShaderModule module = utils::CreateShaderModule(device, R"(
[[block]] struct Buf { struct Buf {
data : array<u32, 100>; data : array<u32, 100>;
}; };
@ -216,7 +216,7 @@ TEST_P(ComputeStorageBufferBarrierTests, UniformToStorageAddPingPong) {
wgpu::BufferUsage::Storage | wgpu::BufferUsage::Uniform | wgpu::BufferUsage::CopySrc); wgpu::BufferUsage::Storage | wgpu::BufferUsage::Uniform | wgpu::BufferUsage::CopySrc);
wgpu::ShaderModule module = utils::CreateShaderModule(device, R"( wgpu::ShaderModule module = utils::CreateShaderModule(device, R"(
[[block]] struct Buf { struct Buf {
data : array<vec4<u32>, 25>; data : array<vec4<u32>, 25>;
}; };
@ -284,7 +284,7 @@ TEST_P(ComputeStorageBufferBarrierTests, UniformToStorageAddPingPongInOnePass) {
wgpu::BufferUsage::Storage | wgpu::BufferUsage::Uniform | wgpu::BufferUsage::CopySrc); wgpu::BufferUsage::Storage | wgpu::BufferUsage::Uniform | wgpu::BufferUsage::CopySrc);
wgpu::ShaderModule module = utils::CreateShaderModule(device, R"( wgpu::ShaderModule module = utils::CreateShaderModule(device, R"(
[[block]] struct Buf { struct Buf {
data : array<vec4<u32>, 25>; data : array<vec4<u32>, 25>;
}; };
@ -342,7 +342,7 @@ TEST_P(ComputeStorageBufferBarrierTests, IndirectBufferCorrectBarrier) {
wgpu::ComputePipelineDescriptor step2PipelineDesc; wgpu::ComputePipelineDescriptor step2PipelineDesc;
step2PipelineDesc.compute.entryPoint = "main"; step2PipelineDesc.compute.entryPoint = "main";
step2PipelineDesc.compute.module = utils::CreateShaderModule(device, R"( step2PipelineDesc.compute.module = utils::CreateShaderModule(device, R"(
[[block]] struct Buf { struct Buf {
data : array<u32, 3>; data : array<u32, 3>;
}; };
[[group(0), binding(0)]] var<storage, read_write> buf : Buf; [[group(0), binding(0)]] var<storage, read_write> buf : Buf;
@ -356,12 +356,12 @@ TEST_P(ComputeStorageBufferBarrierTests, IndirectBufferCorrectBarrier) {
wgpu::ComputePipelineDescriptor step3PipelineDesc; wgpu::ComputePipelineDescriptor step3PipelineDesc;
step3PipelineDesc.compute.entryPoint = "main"; step3PipelineDesc.compute.entryPoint = "main";
step3PipelineDesc.compute.module = utils::CreateShaderModule(device, R"( step3PipelineDesc.compute.module = utils::CreateShaderModule(device, R"(
[[block]] struct Buf { struct Buf {
data : array<u32, 3>; data : array<u32, 3>;
}; };
[[group(0), binding(0)]] var<storage, read> buf : Buf; [[group(0), binding(0)]] var<storage, read> buf : Buf;
[[block]] struct Result { struct Result {
data : u32; data : u32;
}; };
[[group(0), binding(1)]] var<storage, read_write> result : Result; [[group(0), binding(1)]] var<storage, read_write> result : Result;

View File

@ -247,7 +247,7 @@ class CopyTextureForBrowserTests : public Parent {
// comparing a value generated on CPU to the one generated on GPU. // comparing a value generated on CPU to the one generated on GPU.
wgpu::ComputePipeline MakeTestPipeline() { wgpu::ComputePipeline MakeTestPipeline() {
wgpu::ShaderModule csModule = utils::CreateShaderModule(this->device, R"( wgpu::ShaderModule csModule = utils::CreateShaderModule(this->device, R"(
[[block]] struct Uniforms { struct Uniforms {
dstTextureFlipY : u32; dstTextureFlipY : u32;
channelCount : u32; channelCount : u32;
srcCopyOrigin : vec2<u32>; srcCopyOrigin : vec2<u32>;
@ -255,7 +255,7 @@ class CopyTextureForBrowserTests : public Parent {
copySize : vec2<u32>; copySize : vec2<u32>;
alphaOp : u32; alphaOp : u32;
}; };
[[block]] struct OutputBuf { struct OutputBuf {
result : array<u32>; result : array<u32>;
}; };
[[group(0), binding(0)]] var src : texture_2d<f32>; [[group(0), binding(0)]] var src : texture_2d<f32>;

View File

@ -133,7 +133,7 @@ class CreatePipelineAsyncTest : public DawnTest {
TEST_P(CreatePipelineAsyncTest, BasicUseOfCreateComputePipelineAsync) { TEST_P(CreatePipelineAsyncTest, BasicUseOfCreateComputePipelineAsync) {
wgpu::ComputePipelineDescriptor csDesc; wgpu::ComputePipelineDescriptor csDesc;
csDesc.compute.module = utils::CreateShaderModule(device, R"( csDesc.compute.module = utils::CreateShaderModule(device, R"(
[[block]] struct SSBO { struct SSBO {
value : u32; value : u32;
}; };
[[group(0), binding(0)]] var<storage, read_write> ssbo : SSBO; [[group(0), binding(0)]] var<storage, read_write> ssbo : SSBO;
@ -163,7 +163,7 @@ TEST_P(CreatePipelineAsyncTest, BasicUseOfCreateComputePipelineAsync) {
TEST_P(CreatePipelineAsyncTest, ReleaseEntryPointAfterCreatComputePipelineAsync) { TEST_P(CreatePipelineAsyncTest, ReleaseEntryPointAfterCreatComputePipelineAsync) {
wgpu::ComputePipelineDescriptor csDesc; wgpu::ComputePipelineDescriptor csDesc;
csDesc.compute.module = utils::CreateShaderModule(device, R"( csDesc.compute.module = utils::CreateShaderModule(device, R"(
[[block]] struct SSBO { struct SSBO {
value : u32; value : u32;
}; };
[[group(0), binding(0)]] var<storage, read_write> ssbo : SSBO; [[group(0), binding(0)]] var<storage, read_write> ssbo : SSBO;
@ -202,7 +202,7 @@ TEST_P(CreatePipelineAsyncTest, CreateComputePipelineFailed) {
wgpu::ComputePipelineDescriptor csDesc; wgpu::ComputePipelineDescriptor csDesc;
csDesc.compute.module = utils::CreateShaderModule(device, R"( csDesc.compute.module = utils::CreateShaderModule(device, R"(
[[block]] struct SSBO { struct SSBO {
value : u32; value : u32;
}; };
[[group(0), binding(0)]] var<storage, read_write> ssbo : SSBO; [[group(0), binding(0)]] var<storage, read_write> ssbo : SSBO;
@ -482,7 +482,7 @@ TEST_P(CreatePipelineAsyncTest, DestroyDeviceBeforeCallbackOfCreateRenderPipelin
TEST_P(CreatePipelineAsyncTest, CreateSameComputePipelineTwice) { TEST_P(CreatePipelineAsyncTest, CreateSameComputePipelineTwice) {
wgpu::ComputePipelineDescriptor csDesc; wgpu::ComputePipelineDescriptor csDesc;
csDesc.compute.module = utils::CreateShaderModule(device, R"( csDesc.compute.module = utils::CreateShaderModule(device, R"(
[[block]] struct SSBO { struct SSBO {
value : u32; value : u32;
}; };
[[group(0), binding(0)]] var<storage, read_write> ssbo : SSBO; [[group(0), binding(0)]] var<storage, read_write> ssbo : SSBO;
@ -541,7 +541,7 @@ TEST_P(CreatePipelineAsyncTest, CreateSameComputePipelineTwiceAtSameTime) {
wgpu::ComputePipelineDescriptor csDesc; wgpu::ComputePipelineDescriptor csDesc;
csDesc.layout = pipelineLayout; csDesc.layout = pipelineLayout;
csDesc.compute.module = utils::CreateShaderModule(device, R"( csDesc.compute.module = utils::CreateShaderModule(device, R"(
[[block]] struct SSBO { struct SSBO {
value : u32; value : u32;
}; };
[[group(0), binding(0)]] var<storage, read_write> ssbo : SSBO; [[group(0), binding(0)]] var<storage, read_write> ssbo : SSBO;

View File

@ -208,7 +208,7 @@ TEST_P(D3D12CachingTests, ReuseShaderWithMultipleEntryPointsPerStage) {
// of HLSL shaders. WGSL shader should result into caching 1 HLSL shader (stage x entrypoints) // of HLSL shaders. WGSL shader should result into caching 1 HLSL shader (stage x entrypoints)
TEST_P(D3D12CachingTests, ReuseShaderWithMultipleEntryPoints) { TEST_P(D3D12CachingTests, ReuseShaderWithMultipleEntryPoints) {
wgpu::ShaderModule module = utils::CreateShaderModule(device, R"( wgpu::ShaderModule module = utils::CreateShaderModule(device, R"(
[[block]] struct Data { struct Data {
data : u32; data : u32;
}; };
[[binding(0), group(0)]] var<storage, read_write> data : Data; [[binding(0), group(0)]] var<storage, read_write> data : Data;

View File

@ -70,10 +70,10 @@ class DepthStencilSamplingTest : public DawnTest {
std::ostringstream& shaderBody) { std::ostringstream& shaderBody) {
shaderSource << "type StencilValues = array<u32, " << components.size() << ">;\n"; shaderSource << "type StencilValues = array<u32, " << components.size() << ">;\n";
shaderSource << R"( shaderSource << R"(
[[block]] struct DepthResult { struct DepthResult {
value : f32; value : f32;
}; };
[[block]] struct StencilResult { struct StencilResult {
values : StencilValues; values : StencilValues;
};)"; };)";
shaderSource << "\n"; shaderSource << "\n";
@ -181,7 +181,7 @@ class DepthStencilSamplingTest : public DawnTest {
wgpu::ShaderModule fsModule = utils::CreateShaderModule(device, R"( wgpu::ShaderModule fsModule = utils::CreateShaderModule(device, R"(
[[group(0), binding(0)]] var samp : sampler_comparison; [[group(0), binding(0)]] var samp : sampler_comparison;
[[group(0), binding(1)]] var tex : texture_depth_2d; [[group(0), binding(1)]] var tex : texture_depth_2d;
[[block]] struct Uniforms { struct Uniforms {
compareRef : f32; compareRef : f32;
}; };
[[group(0), binding(2)]] var<uniform> uniforms : Uniforms; [[group(0), binding(2)]] var<uniform> uniforms : Uniforms;
@ -203,12 +203,12 @@ class DepthStencilSamplingTest : public DawnTest {
wgpu::ShaderModule csModule = utils::CreateShaderModule(device, R"( wgpu::ShaderModule csModule = utils::CreateShaderModule(device, R"(
[[group(0), binding(0)]] var samp : sampler_comparison; [[group(0), binding(0)]] var samp : sampler_comparison;
[[group(0), binding(1)]] var tex : texture_depth_2d; [[group(0), binding(1)]] var tex : texture_depth_2d;
[[block]] struct Uniforms { struct Uniforms {
compareRef : f32; compareRef : f32;
}; };
[[group(0), binding(2)]] var<uniform> uniforms : Uniforms; [[group(0), binding(2)]] var<uniform> uniforms : Uniforms;
[[block]] struct SamplerResult { struct SamplerResult {
value : f32; value : f32;
}; };
[[group(0), binding(3)]] var<storage, read_write> samplerResult : SamplerResult; [[group(0), binding(3)]] var<storage, read_write> samplerResult : SamplerResult;

View File

@ -56,7 +56,7 @@ class DepthStencilStateTest : public DawnTest {
depthTextureView = depthTexture.CreateView(); depthTextureView = depthTexture.CreateView();
vsModule = utils::CreateShaderModule(device, R"( vsModule = utils::CreateShaderModule(device, R"(
[[block]] struct UBO { struct UBO {
color : vec3<f32>; color : vec3<f32>;
depth : f32; depth : f32;
}; };
@ -75,7 +75,7 @@ class DepthStencilStateTest : public DawnTest {
})"); })");
fsModule = utils::CreateShaderModule(device, R"( fsModule = utils::CreateShaderModule(device, R"(
[[block]] struct UBO { struct UBO {
color : vec3<f32>; color : vec3<f32>;
depth : f32; depth : f32;
}; };

View File

@ -112,7 +112,7 @@ TEST_P(DeviceLostTest, CreateBindGroupLayoutFails) {
// Test that GetBindGroupLayout fails when device is lost // Test that GetBindGroupLayout fails when device is lost
TEST_P(DeviceLostTest, GetBindGroupLayoutFails) { TEST_P(DeviceLostTest, GetBindGroupLayoutFails) {
wgpu::ShaderModule csModule = utils::CreateShaderModule(device, R"( wgpu::ShaderModule csModule = utils::CreateShaderModule(device, R"(
[[block]] struct UniformBuffer { struct UniformBuffer {
pos : vec4<f32>; pos : vec4<f32>;
}; };
[[group(0), binding(0)]] var<uniform> ubo : UniformBuffer; [[group(0), binding(0)]] var<uniform> ubo : UniformBuffer;

View File

@ -595,8 +595,8 @@ TEST_P(DrawIndexedIndirectTest, ValidateReusedBundleWithChangingParams) {
wgpu::ShaderModule paramWriterModule = utils::CreateShaderModule(device, wgpu::ShaderModule paramWriterModule = utils::CreateShaderModule(device,
R"( R"(
[[block]] struct Input { firstIndex: u32; }; struct Input { firstIndex: u32; };
[[block]] struct Params { struct Params {
indexCount: u32; indexCount: u32;
instanceCount: u32; instanceCount: u32;
firstIndex: u32; firstIndex: u32;

View File

@ -115,7 +115,7 @@ class DynamicBufferOffsetTests : public DawnTest {
std::ostringstream fs; std::ostringstream fs;
std::string multipleNumber = isInheritedPipeline ? "2" : "1"; std::string multipleNumber = isInheritedPipeline ? "2" : "1";
fs << R"( fs << R"(
[[block]] struct Buf { struct Buf {
value : vec2<u32>; value : vec2<u32>;
}; };
@ -165,7 +165,7 @@ class DynamicBufferOffsetTests : public DawnTest {
std::ostringstream cs; std::ostringstream cs;
std::string multipleNumber = isInheritedPipeline ? "2" : "1"; std::string multipleNumber = isInheritedPipeline ? "2" : "1";
cs << R"( cs << R"(
[[block]] struct Buf { struct Buf {
value : vec2<u32>; value : vec2<u32>;
}; };
@ -453,7 +453,7 @@ TEST_P(ClampedOOBDynamicBufferOffsetTests, CheckOOBAccess) {
switch (GetParam().mReadBufferUsage) { switch (GetParam().mReadBufferUsage) {
case wgpu::BufferUsage::Uniform: case wgpu::BufferUsage::Uniform:
shader << R"( shader << R"(
[[block]] struct Src { struct Src {
values : array<vec4<u32>, kArrayLength>; values : array<vec4<u32>, kArrayLength>;
}; };
[[group(0), binding(0)]] var<uniform> src : Src; [[group(0), binding(0)]] var<uniform> src : Src;
@ -461,7 +461,7 @@ TEST_P(ClampedOOBDynamicBufferOffsetTests, CheckOOBAccess) {
break; break;
case wgpu::BufferUsage::Storage: case wgpu::BufferUsage::Storage:
shader << R"( shader << R"(
[[block]] struct Src { struct Src {
values : array<vec4<u32>>; values : array<vec4<u32>>;
}; };
[[group(0), binding(0)]] var<storage, read> src : Src; [[group(0), binding(0)]] var<storage, read> src : Src;
@ -472,7 +472,7 @@ TEST_P(ClampedOOBDynamicBufferOffsetTests, CheckOOBAccess) {
} }
shader << R"( shader << R"(
[[block]] struct Dst { struct Dst {
values : array<vec4<u32>>; values : array<vec4<u32>>;
}; };
[[group(0), binding(1)]] var<storage, read_write> dst : Dst; [[group(0), binding(1)]] var<storage, read_write> dst : Dst;

View File

@ -78,7 +78,7 @@ TEST_P(EntryPointTests, TwoComputeInModule) {
wgpu::PipelineLayout pipelineLayout = device.CreatePipelineLayout(&pipelineLayoutDesc); wgpu::PipelineLayout pipelineLayout = device.CreatePipelineLayout(&pipelineLayoutDesc);
wgpu::ShaderModule module = utils::CreateShaderModule(device, R"( wgpu::ShaderModule module = utils::CreateShaderModule(device, R"(
[[block]] struct Data { struct Data {
data : u32; data : u32;
}; };
[[binding(0), group(0)]] var<storage, read_write> data : Data; [[binding(0), group(0)]] var<storage, read_write> data : Data;

View File

@ -127,7 +127,7 @@ struct VertexOutputs {
})"; })";
std::string fragmentShader = R"( std::string fragmentShader = R"(
[[block]] struct IndexVals { struct IndexVals {
vertex_index : atomic<u32>; vertex_index : atomic<u32>;
instance_index : atomic<u32>; instance_index : atomic<u32>;
}; };

View File

@ -36,7 +36,7 @@ class GpuMemorySyncTests : public DawnTest {
std::tuple<wgpu::ComputePipeline, wgpu::BindGroup> CreatePipelineAndBindGroupForCompute( std::tuple<wgpu::ComputePipeline, wgpu::BindGroup> CreatePipelineAndBindGroupForCompute(
const wgpu::Buffer& buffer) { const wgpu::Buffer& buffer) {
wgpu::ShaderModule csModule = utils::CreateShaderModule(device, R"( wgpu::ShaderModule csModule = utils::CreateShaderModule(device, R"(
[[block]] struct Data { struct Data {
a : i32; a : i32;
}; };
[[group(0), binding(0)]] var<storage, read_write> data : Data; [[group(0), binding(0)]] var<storage, read_write> data : Data;
@ -63,7 +63,7 @@ class GpuMemorySyncTests : public DawnTest {
})"); })");
wgpu::ShaderModule fsModule = utils::CreateShaderModule(device, R"( wgpu::ShaderModule fsModule = utils::CreateShaderModule(device, R"(
[[block]] struct Data { struct Data {
i : i32; i : i32;
}; };
[[group(0), binding(0)]] var<storage, read_write> data : Data; [[group(0), binding(0)]] var<storage, read_write> data : Data;
@ -243,7 +243,7 @@ class StorageToUniformSyncTests : public DawnTest {
std::tuple<wgpu::ComputePipeline, wgpu::BindGroup> CreatePipelineAndBindGroupForCompute() { std::tuple<wgpu::ComputePipeline, wgpu::BindGroup> CreatePipelineAndBindGroupForCompute() {
wgpu::ShaderModule csModule = utils::CreateShaderModule(device, R"( wgpu::ShaderModule csModule = utils::CreateShaderModule(device, R"(
[[block]] struct Data { struct Data {
a : f32; a : f32;
}; };
[[group(0), binding(0)]] var<storage, read_write> data : Data; [[group(0), binding(0)]] var<storage, read_write> data : Data;
@ -269,7 +269,7 @@ class StorageToUniformSyncTests : public DawnTest {
})"); })");
wgpu::ShaderModule fsModule = utils::CreateShaderModule(device, R"( wgpu::ShaderModule fsModule = utils::CreateShaderModule(device, R"(
[[block]] struct Contents { struct Contents {
color : f32; color : f32;
}; };
[[group(0), binding(0)]] var<uniform> contents : Contents; [[group(0), binding(0)]] var<uniform> contents : Contents;
@ -440,17 +440,17 @@ class MultipleWriteThenMultipleReadTests : public DawnTest {
TEST_P(MultipleWriteThenMultipleReadTests, SeparateBuffers) { TEST_P(MultipleWriteThenMultipleReadTests, SeparateBuffers) {
// Create pipeline, bind group, and different buffers for compute pass. // Create pipeline, bind group, and different buffers for compute pass.
wgpu::ShaderModule csModule = utils::CreateShaderModule(device, R"( wgpu::ShaderModule csModule = utils::CreateShaderModule(device, R"(
[[block]] struct VBContents { struct VBContents {
pos : array<vec4<f32>, 4>; pos : array<vec4<f32>, 4>;
}; };
[[group(0), binding(0)]] var<storage, read_write> vbContents : VBContents; [[group(0), binding(0)]] var<storage, read_write> vbContents : VBContents;
[[block]] struct IBContents { struct IBContents {
indices : array<vec4<i32>, 2>; indices : array<vec4<i32>, 2>;
}; };
[[group(0), binding(1)]] var<storage, read_write> ibContents : IBContents; [[group(0), binding(1)]] var<storage, read_write> ibContents : IBContents;
[[block]] struct ColorContents { struct ColorContents {
color : f32; color : f32;
}; };
[[group(0), binding(2)]] var<storage, read_write> uniformContents : ColorContents; [[group(0), binding(2)]] var<storage, read_write> uniformContents : ColorContents;
@ -503,7 +503,7 @@ TEST_P(MultipleWriteThenMultipleReadTests, SeparateBuffers) {
})"); })");
wgpu::ShaderModule fsModule = utils::CreateShaderModule(device, R"( wgpu::ShaderModule fsModule = utils::CreateShaderModule(device, R"(
[[block]] struct Buf { struct Buf {
color : f32; color : f32;
}; };
@ -562,7 +562,7 @@ TEST_P(MultipleWriteThenMultipleReadTests, OneBuffer) {
// Create pipeline, bind group, and a complex buffer for compute pass. // Create pipeline, bind group, and a complex buffer for compute pass.
wgpu::ShaderModule csModule = utils::CreateShaderModule(device, R"( wgpu::ShaderModule csModule = utils::CreateShaderModule(device, R"(
[[block]] struct Contents { struct Contents {
[[align(256)]] pos : array<vec4<f32>, 4>; [[align(256)]] pos : array<vec4<f32>, 4>;
[[align(256)]] indices : array<vec4<i32>, 2>; [[align(256)]] indices : array<vec4<i32>, 2>;
[[align(256)]] color0 : f32; [[align(256)]] color0 : f32;
@ -620,7 +620,7 @@ TEST_P(MultipleWriteThenMultipleReadTests, OneBuffer) {
})"); })");
wgpu::ShaderModule fsModule = utils::CreateShaderModule(device, R"( wgpu::ShaderModule fsModule = utils::CreateShaderModule(device, R"(
[[block]] struct Buf { struct Buf {
color : f32; color : f32;
}; };
[[group(0), binding(0)]] var<uniform> uniformBuffer : Buf; [[group(0), binding(0)]] var<uniform> uniformBuffer : Buf;

View File

@ -33,7 +33,7 @@ TEST_P(MaxLimitTests, MaxComputeWorkgroupStorageSize) {
GetSupportedLimits().limits.maxComputeWorkgroupStorageSize; GetSupportedLimits().limits.maxComputeWorkgroupStorageSize;
std::string shader = R"( std::string shader = R"(
[[block]] struct Dst { struct Dst {
value0 : u32; value0 : u32;
value1 : u32; value1 : u32;
}; };
@ -129,11 +129,11 @@ TEST_P(MaxLimitTests, MaxBufferBindingSize) {
std::min(maxBufferBindingSize, uint64_t(512) * 1024 * 1024); std::min(maxBufferBindingSize, uint64_t(512) * 1024 * 1024);
} }
shader = R"( shader = R"(
[[block]] struct Buf { struct Buf {
values : array<u32>; values : array<u32>;
}; };
[[block]] struct Result { struct Result {
value0 : u32; value0 : u32;
value1 : u32; value1 : u32;
}; };
@ -156,7 +156,7 @@ TEST_P(MaxLimitTests, MaxBufferBindingSize) {
uint64_t(std::numeric_limits<int32_t>::max()) + 8); uint64_t(std::numeric_limits<int32_t>::max()) + 8);
shader = R"( shader = R"(
[[block]] struct Buf { struct Buf {
value0 : u32; value0 : u32;
// padding such that value0 and value1 are the first and last bytes of the memory. // padding such that value0 and value1 are the first and last bytes of the memory.
[[size()" + [[size()" +
@ -164,7 +164,7 @@ TEST_P(MaxLimitTests, MaxBufferBindingSize) {
value1 : u32; value1 : u32;
}; };
[[block]] struct Result { struct Result {
value0 : u32; value0 : u32;
value1 : u32; value1 : u32;
}; };

View File

@ -45,7 +45,7 @@ class MultisampledRenderingTest : public DawnTest {
bool alphaToCoverageEnabled = false, bool alphaToCoverageEnabled = false,
bool flipTriangle = false) { bool flipTriangle = false) {
const char* kFsOneOutputWithDepth = R"( const char* kFsOneOutputWithDepth = R"(
[[block]] struct U { struct U {
color : vec4<f32>; color : vec4<f32>;
depth : f32; depth : f32;
}; };
@ -64,7 +64,7 @@ class MultisampledRenderingTest : public DawnTest {
})"; })";
const char* kFsOneOutputWithoutDepth = R"( const char* kFsOneOutputWithoutDepth = R"(
[[block]] struct U { struct U {
color : vec4<f32>; color : vec4<f32>;
}; };
[[group(0), binding(0)]] var<uniform> uBuffer : U; [[group(0), binding(0)]] var<uniform> uBuffer : U;
@ -83,7 +83,7 @@ class MultisampledRenderingTest : public DawnTest {
uint32_t sampleMask = 0xFFFFFFFF, uint32_t sampleMask = 0xFFFFFFFF,
bool alphaToCoverageEnabled = false) { bool alphaToCoverageEnabled = false) {
const char* kFsTwoOutputs = R"( const char* kFsTwoOutputs = R"(
[[block]] struct U { struct U {
color0 : vec4<f32>; color0 : vec4<f32>;
color1 : vec4<f32>; color1 : vec4<f32>;
}; };
@ -777,7 +777,7 @@ TEST_P(MultisampledRenderingTest, ResolveInto2DTextureWithSampleMaskAndShaderOut
constexpr float kMSAACoverage = 0.25f; constexpr float kMSAACoverage = 0.25f;
constexpr uint32_t kSampleMask = kFirstSampleMaskBit | kThirdSampleMaskBit; constexpr uint32_t kSampleMask = kFirstSampleMaskBit | kThirdSampleMaskBit;
const char* fs = R"( const char* fs = R"(
[[block]] struct U { struct U {
color : vec4<f32>; color : vec4<f32>;
}; };
[[group(0), binding(0)]] var<uniform> uBuffer : U; [[group(0), binding(0)]] var<uniform> uBuffer : U;
@ -838,7 +838,7 @@ TEST_P(MultisampledRenderingTest, ResolveIntoMultipleResolveTargetsWithShaderOut
// only the first one is covered by the triangle. // only the first one is covered by the triangle.
constexpr float kMSAACoverage = 0.25f; constexpr float kMSAACoverage = 0.25f;
const char* fs = R"( const char* fs = R"(
[[block]] struct U { struct U {
color0 : vec4<f32>; color0 : vec4<f32>;
color1 : vec4<f32>; color1 : vec4<f32>;
}; };

View File

@ -99,7 +99,7 @@ class MultisampledSamplingTest : public DawnTest {
[[group(0), binding(0)]] var texture0 : texture_multisampled_2d<f32>; [[group(0), binding(0)]] var texture0 : texture_multisampled_2d<f32>;
[[group(0), binding(1)]] var texture1 : texture_depth_multisampled_2d; [[group(0), binding(1)]] var texture1 : texture_depth_multisampled_2d;
[[block]] struct Results { struct Results {
colorSamples : array<f32, 4>; colorSamples : array<f32, 4>;
depthSamples : array<f32, 4>; depthSamples : array<f32, 4>;
}; };

View File

@ -53,7 +53,7 @@ class OpArrayLengthTest : public DawnTest {
// Common shader code to use these buffers in shaders, assuming they are in bindgroup index // Common shader code to use these buffers in shaders, assuming they are in bindgroup index
// 0. // 0.
mShaderInterface = R"( mShaderInterface = R"(
[[block]] struct DataBuffer { struct DataBuffer {
data : [[stride(4)]] array<f32>; data : [[stride(4)]] array<f32>;
}; };
@ -70,7 +70,7 @@ class OpArrayLengthTest : public DawnTest {
b : i32; b : i32;
}; };
[[block]] struct Buffer3 { struct Buffer3 {
[[size(64)]] garbage : mat4x4<f32>; [[size(64)]] garbage : mat4x4<f32>;
data : [[stride(8)]] array<Buffer3Data>; data : [[stride(8)]] array<Buffer3Data>;
}; };
@ -120,7 +120,7 @@ TEST_P(OpArrayLengthTest, Compute) {
pipelineDesc.layout = pl; pipelineDesc.layout = pl;
pipelineDesc.compute.entryPoint = "main"; pipelineDesc.compute.entryPoint = "main";
pipelineDesc.compute.module = utils::CreateShaderModule(device, (R"( pipelineDesc.compute.module = utils::CreateShaderModule(device, (R"(
[[block]] struct ResultBuffer { struct ResultBuffer {
data : [[stride(4)]] array<u32, 3>; data : [[stride(4)]] array<u32, 3>;
}; };
[[group(1), binding(0)]] var<storage, read_write> result : ResultBuffer; [[group(1), binding(0)]] var<storage, read_write> result : ResultBuffer;

View File

@ -45,7 +45,7 @@ class DepthClampingTest : public DawnTest {
depthTextureView = depthTexture.CreateView(); depthTextureView = depthTexture.CreateView();
vsModule = utils::CreateShaderModule(device, R"( vsModule = utils::CreateShaderModule(device, R"(
[[block]] struct UBO { struct UBO {
color : vec3<f32>; color : vec3<f32>;
depth : f32; depth : f32;
}; };
@ -56,7 +56,7 @@ class DepthClampingTest : public DawnTest {
})"); })");
fsModule = utils::CreateShaderModule(device, R"( fsModule = utils::CreateShaderModule(device, R"(
[[block]] struct UBO { struct UBO {
color : vec3<f32>; color : vec3<f32>;
depth : f32; depth : f32;
}; };

View File

@ -38,7 +38,7 @@ class RenderBundleTest : public DawnTest {
})"); })");
wgpu::ShaderModule fsModule = utils::CreateShaderModule(device, R"( wgpu::ShaderModule fsModule = utils::CreateShaderModule(device, R"(
[[block]] struct Ubo { struct Ubo {
color : vec4<f32>; color : vec4<f32>;
}; };
[[group(0), binding(0)]] var<uniform> fragmentUniformBuffer : Ubo; [[group(0), binding(0)]] var<uniform> fragmentUniformBuffer : Ubo;

View File

@ -38,7 +38,7 @@ class SamplerFilterAnisotropicTest : public DawnTest {
mRenderPass = utils::CreateBasicRenderPass(device, kRTSize, kRTSize); mRenderPass = utils::CreateBasicRenderPass(device, kRTSize, kRTSize);
wgpu::ShaderModule vsModule = utils::CreateShaderModule(device, R"( wgpu::ShaderModule vsModule = utils::CreateShaderModule(device, R"(
[[block]] struct Uniforms { struct Uniforms {
matrix : mat4x4<f32>; matrix : mat4x4<f32>;
}; };

View File

@ -50,7 +50,7 @@ TEST_P(ShaderTests, ComputeLog2) {
wgpu::Buffer buffer = CreateBuffer(kSteps); wgpu::Buffer buffer = CreateBuffer(kSteps);
std::string shader = R"( std::string shader = R"(
[[block]] struct Buf { struct Buf {
data : array<u32, 19>; data : array<u32, 19>;
}; };
@ -335,7 +335,7 @@ struct Inputs {
}; };
// [1] a binding point that conflicts with the regitster // [1] a binding point that conflicts with the regitster
[[block]] struct S1 { data : array<vec4<u32>, 20>; }; struct S1 { data : array<vec4<u32>, 20>; };
[[group(0), binding(1)]] var<uniform> providedData1 : S1; [[group(0), binding(1)]] var<uniform> providedData1 : S1;
[[stage(vertex)]] fn vsMain(input : Inputs) -> [[builtin(position)]] vec4<f32> { [[stage(vertex)]] fn vsMain(input : Inputs) -> [[builtin(position)]] vec4<f32> {
@ -412,7 +412,7 @@ TEST_P(ShaderTests, OverridableConstants) {
[[override]] let c9: u32 = 0u; // default override [[override]] let c9: u32 = 0u; // default override
[[override]] let c10: u32 = 10u; // default [[override]] let c10: u32 = 10u; // default
[[block]] struct Buf { struct Buf {
data : array<u32, 11>; data : array<u32, 11>;
}; };
@ -482,7 +482,7 @@ TEST_P(ShaderTests, OverridableConstantsNumericIdentifiers) {
[[override(1003)]] let c3: u32 = 3u; // default [[override(1003)]] let c3: u32 = 3u; // default
[[override(1004)]] let c4: u32; // default unspecified [[override(1004)]] let c4: u32; // default unspecified
[[block]] struct Buf { struct Buf {
data : array<u32, 4>; data : array<u32, 4>;
}; };
@ -539,7 +539,7 @@ TEST_P(ShaderTests, OverridableConstantsPrecision) {
[[override(1001)]] let c1: f32; [[override(1001)]] let c1: f32;
[[override(1002)]] let c2: f32; [[override(1002)]] let c2: f32;
[[block]] struct Buf { struct Buf {
data : array<f32, 2>; data : array<f32, 2>;
}; };
@ -593,7 +593,7 @@ TEST_P(ShaderTests, OverridableConstantsMultipleEntryPoints) {
[[override(1001)]] let c1: u32; [[override(1001)]] let c1: u32;
[[override(1002)]] let c2: u32; [[override(1002)]] let c2: u32;
[[block]] struct Buf { struct Buf {
data : array<u32, 1>; data : array<u32, 1>;
}; };

View File

@ -983,7 +983,7 @@ TEST_P(TextureZeroInitTest, ComputePassSampledTextureClear) {
wgpu::ProgrammableStageDescriptor compute; wgpu::ProgrammableStageDescriptor compute;
const char* cs = R"( const char* cs = R"(
[[group(0), binding(0)]] var tex : texture_2d<f32>; [[group(0), binding(0)]] var tex : texture_2d<f32>;
[[block]] struct Result { struct Result {
value : vec4<f32>; value : vec4<f32>;
}; };
[[group(0), binding(1)]] var<storage, read_write> result : Result; [[group(0), binding(1)]] var<storage, read_write> result : Result;

View File

@ -39,7 +39,7 @@ namespace {
})"; })";
constexpr char kFragmentShaderA[] = R"( constexpr char kFragmentShaderA[] = R"(
[[block]] struct Uniforms { struct Uniforms {
color : vec3<f32>; color : vec3<f32>;
}; };
[[group(0), binding(0)]] var<uniform> uniforms : Uniforms; [[group(0), binding(0)]] var<uniform> uniforms : Uniforms;
@ -48,10 +48,10 @@ namespace {
})"; })";
constexpr char kFragmentShaderB[] = R"( constexpr char kFragmentShaderB[] = R"(
[[block]] struct Constants { struct Constants {
color : vec3<f32>; color : vec3<f32>;
}; };
[[block]] struct Uniforms { struct Uniforms {
color : vec3<f32>; color : vec3<f32>;
}; };
[[group(0), binding(0)]] var<uniform> constants : Constants; [[group(0), binding(0)]] var<uniform> constants : Constants;

View File

@ -20,12 +20,12 @@ namespace {
constexpr uint32_t kTileSize = 32u; constexpr uint32_t kTileSize = 32u;
const std::string& kMatMulFloatHeader = R"( const std::string& kMatMulFloatHeader = R"(
[[block]] struct Uniforms { struct Uniforms {
dimAOuter : u32; dimAOuter : u32;
dimInner : u32; dimInner : u32;
dimBOuter : u32; dimBOuter : u32;
}; };
[[block]] struct Matrix { struct Matrix {
numbers: array<f32>; numbers: array<f32>;
}; };
@ -187,12 +187,12 @@ namespace {
// The vec4 version requires that dimInner and dimBOuter are divisible by 4. // The vec4 version requires that dimInner and dimBOuter are divisible by 4.
const std::string& kMatMulVec4Header = R"( const std::string& kMatMulVec4Header = R"(
[[block]] struct Uniforms { struct Uniforms {
dimAOuter : u32; dimAOuter : u32;
dimInner : u32; dimInner : u32;
dimBOuter : u32; dimBOuter : u32;
}; };
[[block]] struct Matrix { struct Matrix {
numbers: array<vec4<f32>>; numbers: array<vec4<f32>>;
}; };

View File

@ -1419,7 +1419,7 @@ class SetBindGroupValidationTest : public ValidationTest {
})"); })");
wgpu::ShaderModule fsModule = utils::CreateShaderModule(device, R"( wgpu::ShaderModule fsModule = utils::CreateShaderModule(device, R"(
[[block]] struct S { struct S {
value : vec2<f32>; value : vec2<f32>;
}; };
@ -1443,7 +1443,7 @@ class SetBindGroupValidationTest : public ValidationTest {
wgpu::ComputePipeline CreateComputePipeline() { wgpu::ComputePipeline CreateComputePipeline() {
wgpu::ShaderModule csModule = utils::CreateShaderModule(device, R"( wgpu::ShaderModule csModule = utils::CreateShaderModule(device, R"(
[[block]] struct S { struct S {
value : vec2<f32>; value : vec2<f32>;
}; };
@ -1871,7 +1871,7 @@ class SetBindGroupPersistenceValidationTest : public ValidationTest {
device.CreatePipelineLayout(&pipelineLayoutDescriptor); device.CreatePipelineLayout(&pipelineLayoutDescriptor);
std::stringstream ss; std::stringstream ss;
ss << "[[block]] struct S { value : vec2<f32>; };"; ss << "struct S { value : vec2<f32>; };";
// Build a shader which has bindings that match the pipeline layout. // Build a shader which has bindings that match the pipeline layout.
for (uint32_t l = 0; l < layouts.size(); ++l) { for (uint32_t l = 0; l < layouts.size(); ++l) {
@ -2051,7 +2051,7 @@ class BindGroupLayoutCompatibilityTest : public ValidationTest {
wgpu::RenderPipeline CreateRenderPipeline(std::vector<wgpu::BindGroupLayout> bindGroupLayouts) { wgpu::RenderPipeline CreateRenderPipeline(std::vector<wgpu::BindGroupLayout> bindGroupLayouts) {
return CreateFSRenderPipeline(R"( return CreateFSRenderPipeline(R"(
[[block]] struct S { struct S {
value : vec2<f32>; value : vec2<f32>;
}; };
@ -2086,7 +2086,7 @@ class BindGroupLayoutCompatibilityTest : public ValidationTest {
wgpu::ComputePipeline CreateComputePipeline( wgpu::ComputePipeline CreateComputePipeline(
std::vector<wgpu::BindGroupLayout> bindGroupLayouts) { std::vector<wgpu::BindGroupLayout> bindGroupLayouts) {
return CreateComputePipeline(R"( return CreateComputePipeline(R"(
[[block]] struct S { struct S {
value : vec2<f32>; value : vec2<f32>;
}; };

View File

@ -46,7 +46,7 @@ TEST_F(GetBindGroupLayoutTests, SameObject) {
DAWN_SKIP_TEST_IF(UsesWire()); DAWN_SKIP_TEST_IF(UsesWire());
wgpu::ShaderModule vsModule = utils::CreateShaderModule(device, R"( wgpu::ShaderModule vsModule = utils::CreateShaderModule(device, R"(
[[block]] struct S { struct S {
pos : vec4<f32>; pos : vec4<f32>;
}; };
[[group(0), binding(0)]] var<uniform> uniform0 : S; [[group(0), binding(0)]] var<uniform> uniform0 : S;
@ -59,12 +59,12 @@ TEST_F(GetBindGroupLayoutTests, SameObject) {
})"); })");
wgpu::ShaderModule fsModule = utils::CreateShaderModule(device, R"( wgpu::ShaderModule fsModule = utils::CreateShaderModule(device, R"(
[[block]] struct S2 { struct S2 {
pos : vec4<f32>; pos : vec4<f32>;
}; };
[[group(2), binding(0)]] var<uniform> uniform2 : S2; [[group(2), binding(0)]] var<uniform> uniform2 : S2;
[[block]] struct S3 { struct S3 {
pos : mat4x4<f32>; pos : mat4x4<f32>;
}; };
[[group(3), binding(0)]] var<storage, read_write> storage3 : S3; [[group(3), binding(0)]] var<storage, read_write> storage3 : S3;
@ -98,7 +98,7 @@ TEST_F(GetBindGroupLayoutTests, SameObject) {
// Test that default BindGroupLayouts cannot be used in the creation of a new PipelineLayout // Test that default BindGroupLayouts cannot be used in the creation of a new PipelineLayout
TEST_F(GetBindGroupLayoutTests, DefaultBindGroupLayoutPipelineCompatibility) { TEST_F(GetBindGroupLayoutTests, DefaultBindGroupLayoutPipelineCompatibility) {
wgpu::RenderPipeline pipeline = RenderPipelineFromFragmentShader(R"( wgpu::RenderPipeline pipeline = RenderPipelineFromFragmentShader(R"(
[[block]] struct S { struct S {
pos : vec4<f32>; pos : vec4<f32>;
}; };
[[group(0), binding(0)]] var<uniform> uniforms : S; [[group(0), binding(0)]] var<uniform> uniforms : S;
@ -120,7 +120,7 @@ TEST_F(GetBindGroupLayoutTests, DefaultShaderStageAndDynamicOffsets) {
DAWN_SKIP_TEST_IF(UsesWire()); DAWN_SKIP_TEST_IF(UsesWire());
wgpu::RenderPipeline pipeline = RenderPipelineFromFragmentShader(R"( wgpu::RenderPipeline pipeline = RenderPipelineFromFragmentShader(R"(
[[block]] struct S { struct S {
pos : vec4<f32>; pos : vec4<f32>;
}; };
[[group(0), binding(0)]] var<uniform> uniforms : S; [[group(0), binding(0)]] var<uniform> uniforms : S;
@ -290,7 +290,7 @@ TEST_F(GetBindGroupLayoutTests, ComputePipeline) {
DAWN_SKIP_TEST_IF(UsesWire()); DAWN_SKIP_TEST_IF(UsesWire());
wgpu::ShaderModule csModule = utils::CreateShaderModule(device, R"( wgpu::ShaderModule csModule = utils::CreateShaderModule(device, R"(
[[block]] struct S { struct S {
pos : vec4<f32>; pos : vec4<f32>;
}; };
[[group(0), binding(0)]] var<uniform> uniforms : S; [[group(0), binding(0)]] var<uniform> uniforms : S;
@ -343,7 +343,7 @@ TEST_F(GetBindGroupLayoutTests, BindingType) {
binding.visibility = wgpu::ShaderStage::Fragment; binding.visibility = wgpu::ShaderStage::Fragment;
binding.buffer.type = wgpu::BufferBindingType::Storage; binding.buffer.type = wgpu::BufferBindingType::Storage;
wgpu::RenderPipeline pipeline = RenderPipelineFromFragmentShader(R"( wgpu::RenderPipeline pipeline = RenderPipelineFromFragmentShader(R"(
[[block]] struct S { struct S {
pos : vec4<f32>; pos : vec4<f32>;
}; };
[[group(0), binding(0)]] var<storage, read_write> ssbo : S; [[group(0), binding(0)]] var<storage, read_write> ssbo : S;
@ -357,7 +357,7 @@ TEST_F(GetBindGroupLayoutTests, BindingType) {
{ {
binding.buffer.type = wgpu::BufferBindingType::Uniform; binding.buffer.type = wgpu::BufferBindingType::Uniform;
wgpu::RenderPipeline pipeline = RenderPipelineFromFragmentShader(R"( wgpu::RenderPipeline pipeline = RenderPipelineFromFragmentShader(R"(
[[block]] struct S { struct S {
pos : vec4<f32>; pos : vec4<f32>;
}; };
[[group(0), binding(0)]] var<uniform> uniforms : S; [[group(0), binding(0)]] var<uniform> uniforms : S;
@ -372,7 +372,7 @@ TEST_F(GetBindGroupLayoutTests, BindingType) {
{ {
binding.buffer.type = wgpu::BufferBindingType::ReadOnlyStorage; binding.buffer.type = wgpu::BufferBindingType::ReadOnlyStorage;
wgpu::RenderPipeline pipeline = RenderPipelineFromFragmentShader(R"( wgpu::RenderPipeline pipeline = RenderPipelineFromFragmentShader(R"(
[[block]] struct S { struct S {
pos : vec4<f32>; pos : vec4<f32>;
}; };
[[group(0), binding(0)]] var<storage, read> ssbo : S; [[group(0), binding(0)]] var<storage, read> ssbo : S;
@ -612,7 +612,7 @@ TEST_F(GetBindGroupLayoutTests, BindingIndices) {
{ {
binding.binding = 0; binding.binding = 0;
wgpu::RenderPipeline pipeline = RenderPipelineFromFragmentShader(R"( wgpu::RenderPipeline pipeline = RenderPipelineFromFragmentShader(R"(
[[block]] struct S { struct S {
pos : vec4<f32>; pos : vec4<f32>;
}; };
[[group(0), binding(0)]] var<uniform> uniforms : S; [[group(0), binding(0)]] var<uniform> uniforms : S;
@ -627,7 +627,7 @@ TEST_F(GetBindGroupLayoutTests, BindingIndices) {
{ {
binding.binding = 1; binding.binding = 1;
wgpu::RenderPipeline pipeline = RenderPipelineFromFragmentShader(R"( wgpu::RenderPipeline pipeline = RenderPipelineFromFragmentShader(R"(
[[block]] struct S { struct S {
pos : vec4<f32>; pos : vec4<f32>;
}; };
[[group(0), binding(1)]] var<uniform> uniforms : S; [[group(0), binding(1)]] var<uniform> uniforms : S;
@ -642,7 +642,7 @@ TEST_F(GetBindGroupLayoutTests, BindingIndices) {
{ {
binding.binding = 2; binding.binding = 2;
wgpu::RenderPipeline pipeline = RenderPipelineFromFragmentShader(R"( wgpu::RenderPipeline pipeline = RenderPipelineFromFragmentShader(R"(
[[block]] struct S { struct S {
pos : vec4<f32>; pos : vec4<f32>;
}; };
[[group(0), binding(1)]] var<uniform> uniforms : S; [[group(0), binding(1)]] var<uniform> uniforms : S;
@ -658,7 +658,7 @@ TEST_F(GetBindGroupLayoutTests, BindingIndices) {
// Test it is valid to have duplicate bindings in the shaders. // Test it is valid to have duplicate bindings in the shaders.
TEST_F(GetBindGroupLayoutTests, DuplicateBinding) { TEST_F(GetBindGroupLayoutTests, DuplicateBinding) {
wgpu::ShaderModule vsModule = utils::CreateShaderModule(device, R"( wgpu::ShaderModule vsModule = utils::CreateShaderModule(device, R"(
[[block]] struct S { struct S {
pos : vec4<f32>; pos : vec4<f32>;
}; };
[[group(0), binding(0)]] var<uniform> uniform0 : S; [[group(0), binding(0)]] var<uniform> uniform0 : S;
@ -671,7 +671,7 @@ TEST_F(GetBindGroupLayoutTests, DuplicateBinding) {
})"); })");
wgpu::ShaderModule fsModule = utils::CreateShaderModule(device, R"( wgpu::ShaderModule fsModule = utils::CreateShaderModule(device, R"(
[[block]] struct S { struct S {
pos : vec4<f32>; pos : vec4<f32>;
}; };
[[group(1), binding(0)]] var<uniform> uniforms : S; [[group(1), binding(0)]] var<uniform> uniforms : S;
@ -697,7 +697,7 @@ TEST_F(GetBindGroupLayoutTests, MinBufferSize) {
DAWN_SKIP_TEST_IF(UsesWire()); DAWN_SKIP_TEST_IF(UsesWire());
wgpu::ShaderModule vsModule4 = utils::CreateShaderModule(device, R"( wgpu::ShaderModule vsModule4 = utils::CreateShaderModule(device, R"(
[[block]] struct S { struct S {
pos : f32; pos : f32;
}; };
[[group(0), binding(0)]] var<uniform> uniforms : S; [[group(0), binding(0)]] var<uniform> uniforms : S;
@ -708,7 +708,7 @@ TEST_F(GetBindGroupLayoutTests, MinBufferSize) {
})"); })");
wgpu::ShaderModule vsModule64 = utils::CreateShaderModule(device, R"( wgpu::ShaderModule vsModule64 = utils::CreateShaderModule(device, R"(
[[block]] struct S { struct S {
pos : mat4x4<f32>; pos : mat4x4<f32>;
}; };
[[group(0), binding(0)]] var<uniform> uniforms : S; [[group(0), binding(0)]] var<uniform> uniforms : S;
@ -719,7 +719,7 @@ TEST_F(GetBindGroupLayoutTests, MinBufferSize) {
})"); })");
wgpu::ShaderModule fsModule4 = utils::CreateShaderModule(device, R"( wgpu::ShaderModule fsModule4 = utils::CreateShaderModule(device, R"(
[[block]] struct S { struct S {
pos : f32; pos : f32;
}; };
[[group(0), binding(0)]] var<uniform> uniforms : S; [[group(0), binding(0)]] var<uniform> uniforms : S;
@ -729,7 +729,7 @@ TEST_F(GetBindGroupLayoutTests, MinBufferSize) {
})"); })");
wgpu::ShaderModule fsModule64 = utils::CreateShaderModule(device, R"( wgpu::ShaderModule fsModule64 = utils::CreateShaderModule(device, R"(
[[block]] struct S { struct S {
pos : mat4x4<f32>; pos : mat4x4<f32>;
}; };
[[group(0), binding(0)]] var<uniform> uniforms : S; [[group(0), binding(0)]] var<uniform> uniforms : S;
@ -864,7 +864,7 @@ TEST_F(GetBindGroupLayoutTests, StageAggregation) {
// Test it is invalid to have conflicting binding types in the shaders. // Test it is invalid to have conflicting binding types in the shaders.
TEST_F(GetBindGroupLayoutTests, ConflictingBindingType) { TEST_F(GetBindGroupLayoutTests, ConflictingBindingType) {
wgpu::ShaderModule vsModule = utils::CreateShaderModule(device, R"( wgpu::ShaderModule vsModule = utils::CreateShaderModule(device, R"(
[[block]] struct S { struct S {
pos : vec4<f32>; pos : vec4<f32>;
}; };
[[group(0), binding(0)]] var<uniform> ubo : S; [[group(0), binding(0)]] var<uniform> ubo : S;
@ -875,7 +875,7 @@ TEST_F(GetBindGroupLayoutTests, ConflictingBindingType) {
})"); })");
wgpu::ShaderModule fsModule = utils::CreateShaderModule(device, R"( wgpu::ShaderModule fsModule = utils::CreateShaderModule(device, R"(
[[block]] struct S { struct S {
pos : vec4<f32>; pos : vec4<f32>;
}; };
[[group(0), binding(0)]] var<storage, read_write> ssbo : S; [[group(0), binding(0)]] var<storage, read_write> ssbo : S;
@ -988,7 +988,7 @@ TEST_F(GetBindGroupLayoutTests, UnusedIndex) {
DAWN_SKIP_TEST_IF(UsesWire()); DAWN_SKIP_TEST_IF(UsesWire());
wgpu::RenderPipeline pipeline = RenderPipelineFromFragmentShader(R"( wgpu::RenderPipeline pipeline = RenderPipelineFromFragmentShader(R"(
[[block]] struct S { struct S {
pos : vec4<f32>; pos : vec4<f32>;
}; };
[[group(0), binding(0)]] var<uniform> uniforms0 : S; [[group(0), binding(0)]] var<uniform> uniforms0 : S;
@ -1041,7 +1041,7 @@ TEST_F(GetBindGroupLayoutTests, Reflection) {
wgpu::PipelineLayout pipelineLayout = device.CreatePipelineLayout(&pipelineLayoutDesc); wgpu::PipelineLayout pipelineLayout = device.CreatePipelineLayout(&pipelineLayoutDesc);
wgpu::ShaderModule vsModule = utils::CreateShaderModule(device, R"( wgpu::ShaderModule vsModule = utils::CreateShaderModule(device, R"(
[[block]] struct S { struct S {
pos : vec4<f32>; pos : vec4<f32>;
}; };
[[group(0), binding(0)]] var<uniform> uniforms : S; [[group(0), binding(0)]] var<uniform> uniforms : S;
@ -1082,7 +1082,7 @@ TEST_F(GetBindGroupLayoutTests, Reflection) {
// Test that fragment output validation is for the correct entryPoint // Test that fragment output validation is for the correct entryPoint
TEST_F(GetBindGroupLayoutTests, FromCorrectEntryPoint) { TEST_F(GetBindGroupLayoutTests, FromCorrectEntryPoint) {
wgpu::ShaderModule module = utils::CreateShaderModule(device, R"( wgpu::ShaderModule module = utils::CreateShaderModule(device, R"(
[[block]] struct Data { struct Data {
data : f32; data : f32;
}; };
[[group(0), binding(0)]] var<storage, read_write> data0 : Data; [[group(0), binding(0)]] var<storage, read_write> data0 : Data;

View File

@ -73,7 +73,7 @@ namespace {
std::ostringstream ostream; std::ostringstream ostream;
size_t index = 0; size_t index = 0;
for (const BindingDescriptor& b : bindings) { for (const BindingDescriptor& b : bindings) {
ostream << "[[block]] struct S" << index << " { " << b.decl << "};\n"; ostream << "struct S" << index << " { " << b.decl << "};\n";
ostream << "[[group(" << b.group << "), binding(" << b.binding << ")]] "; ostream << "[[group(" << b.group << "), binding(" << b.binding << ")]] ";
switch (b.type) { switch (b.type) {
case wgpu::BufferBindingType::Uniform: case wgpu::BufferBindingType::Uniform:

View File

@ -28,7 +28,7 @@ namespace {
ValidationTest::SetUp(); ValidationTest::SetUp();
vsModule = utils::CreateShaderModule(device, R"( vsModule = utils::CreateShaderModule(device, R"(
[[block]] struct S { struct S {
transform : mat2x2<f32>; transform : mat2x2<f32>;
}; };
[[group(0), binding(0)]] var<uniform> uniforms : S; [[group(0), binding(0)]] var<uniform> uniforms : S;
@ -38,12 +38,12 @@ namespace {
})"); })");
fsModule = utils::CreateShaderModule(device, R"( fsModule = utils::CreateShaderModule(device, R"(
[[block]] struct Uniforms { struct Uniforms {
color : vec4<f32>; color : vec4<f32>;
}; };
[[group(1), binding(0)]] var<uniform> uniforms : Uniforms; [[group(1), binding(0)]] var<uniform> uniforms : Uniforms;
[[block]] struct Storage { struct Storage {
dummy : array<f32>; dummy : array<f32>;
}; };
[[group(1), binding(1)]] var<storage, read_write> ssbo : Storage; [[group(1), binding(1)]] var<storage, read_write> ssbo : Storage;

View File

@ -765,7 +765,7 @@ TEST_F(RenderPipelineValidationTest, TextureViewDimensionCompatibility) {
// cause crash. // cause crash.
TEST_F(RenderPipelineValidationTest, StorageBufferInVertexShaderNoLayout) { TEST_F(RenderPipelineValidationTest, StorageBufferInVertexShaderNoLayout) {
wgpu::ShaderModule vsModuleWithStorageBuffer = utils::CreateShaderModule(device, R"( wgpu::ShaderModule vsModuleWithStorageBuffer = utils::CreateShaderModule(device, R"(
[[block]] struct Dst { struct Dst {
data : array<u32, 100>; data : array<u32, 100>;
}; };
[[group(0), binding(0)]] var<storage, read_write> dst : Dst; [[group(0), binding(0)]] var<storage, read_write> dst : Dst;
@ -1124,7 +1124,7 @@ TEST_F(RenderPipelineValidationTest, UnwrittenFragmentOutputsMask0) {
// Test that fragment output validation is for the correct entryPoint // Test that fragment output validation is for the correct entryPoint
TEST_F(RenderPipelineValidationTest, BindingsFromCorrectEntryPoint) { TEST_F(RenderPipelineValidationTest, BindingsFromCorrectEntryPoint) {
wgpu::ShaderModule module = utils::CreateShaderModule(device, R"( wgpu::ShaderModule module = utils::CreateShaderModule(device, R"(
[[block]] struct Uniforms { struct Uniforms {
data : vec4<f32>; data : vec4<f32>;
}; };
[[group(0), binding(0)]] var<uniform> var0 : Uniforms; [[group(0), binding(0)]] var<uniform> var0 : Uniforms;

View File

@ -761,7 +761,7 @@ namespace {
})"); })");
wgpu::ShaderModule fsModule = utils::CreateShaderModule(device, R"( wgpu::ShaderModule fsModule = utils::CreateShaderModule(device, R"(
[[block]] struct RBuffer { struct RBuffer {
value : f32; value : f32;
}; };
[[group(0), binding(0)]] var<storage, read> rBuffer : RBuffer; [[group(0), binding(0)]] var<storage, read> rBuffer : RBuffer;

View File

@ -503,7 +503,7 @@ TEST_F(ShaderModuleValidationTest, OverridableConstantsNumericIDConflicts) {
[[override(1234)]] let c0: u32; [[override(1234)]] let c0: u32;
[[override(1234)]] let c1: u32; [[override(1234)]] let c1: u32;
[[block]] struct Buf { struct Buf {
data : array<u32, 2>; data : array<u32, 2>;
}; };

View File

@ -53,7 +53,7 @@ class D3D12DescriptorHeapTests : public DawnTest {
})"); })");
mSimpleFSModule = utils::CreateShaderModule(device, R"( mSimpleFSModule = utils::CreateShaderModule(device, R"(
[[block]] struct U { struct U {
color : vec4<f32>; color : vec4<f32>;
}; };
[[group(0), binding(0)]] var<uniform> colorBuffer : U; [[group(0), binding(0)]] var<uniform> colorBuffer : U;
@ -444,7 +444,7 @@ TEST_P(D3D12DescriptorHeapTests, EncodeManyUBO) {
pipelineDescriptor.vertex.module = mSimpleVSModule; pipelineDescriptor.vertex.module = mSimpleVSModule;
pipelineDescriptor.cFragment.module = utils::CreateShaderModule(device, R"( pipelineDescriptor.cFragment.module = utils::CreateShaderModule(device, R"(
[[block]] struct U { struct U {
heapSize : f32; heapSize : f32;
}; };
[[group(0), binding(0)]] var<uniform> buffer0 : U; [[group(0), binding(0)]] var<uniform> buffer0 : U;
@ -777,7 +777,7 @@ TEST_P(D3D12DescriptorHeapTests, EncodeManyUBOAndSamplers) {
utils::ComboRenderPipelineDescriptor pipelineDescriptor; utils::ComboRenderPipelineDescriptor pipelineDescriptor;
pipelineDescriptor.vertex.module = utils::CreateShaderModule(device, R"( pipelineDescriptor.vertex.module = utils::CreateShaderModule(device, R"(
[[block]] struct U { struct U {
transform : mat2x2<f32>; transform : mat2x2<f32>;
}; };
[[group(0), binding(0)]] var<uniform> buffer0 : U; [[group(0), binding(0)]] var<uniform> buffer0 : U;
@ -793,7 +793,7 @@ TEST_P(D3D12DescriptorHeapTests, EncodeManyUBOAndSamplers) {
return vec4<f32>(buffer0.transform * (pos[VertexIndex]), 0.0, 1.0); return vec4<f32>(buffer0.transform * (pos[VertexIndex]), 0.0, 1.0);
})"); })");
pipelineDescriptor.cFragment.module = utils::CreateShaderModule(device, R"( pipelineDescriptor.cFragment.module = utils::CreateShaderModule(device, R"(
[[block]] struct U { struct U {
color : vec4<f32>; color : vec4<f32>;
}; };
[[group(0), binding(1)]] var sampler0 : sampler; [[group(0), binding(1)]] var sampler0 : sampler;

View File

@ -353,7 +353,7 @@ TEST_P(D3D12DescriptorResidencyTests, SwitchedViewHeapResidency) {
})"); })");
renderPipelineDescriptor.cFragment.module = utils::CreateShaderModule(device, R"( renderPipelineDescriptor.cFragment.module = utils::CreateShaderModule(device, R"(
[[block]] struct U { struct U {
color : vec4<f32>; color : vec4<f32>;
}; };
[[group(0), binding(0)]] var<uniform> colorBuffer : U; [[group(0), binding(0)]] var<uniform> colorBuffer : U;

View File

@ -31,7 +31,7 @@ class InternalStorageBufferBindingTests : public DawnTest {
wgpu::ComputePipeline CreateComputePipelineWithInternalStorage() { wgpu::ComputePipeline CreateComputePipelineWithInternalStorage() {
wgpu::ShaderModule module = utils::CreateShaderModule(device, R"( wgpu::ShaderModule module = utils::CreateShaderModule(device, R"(
[[block]] struct Buf { struct Buf {
data : array<u32, 4>; data : array<u32, 4>;
}; };