unittests: Add a position return value for vertex shaders

Fixes new validation errors added with:
https://dawn-review.googlesource.com/c/tint/+/48560

Change-Id: Icb9a3bc46574c365a812685d01aab336a11792c1
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/48681
Auto-Submit: Ben Clayton <bclayton@google.com>
Reviewed-by: Ryan Harrison <rharrison@chromium.org>
Reviewed-by: Austin Eng <enga@chromium.org>
Commit-Queue: Austin Eng <enga@chromium.org>
This commit is contained in:
Ben Clayton 2021-04-21 20:26:31 +00:00 committed by Commit Bot service account
parent b395605ab3
commit 6dd1d37da8
7 changed files with 51 additions and 24 deletions

View File

@ -1084,7 +1084,8 @@ class SetBindGroupValidationTest : public ValidationTest {
wgpu::RenderPipeline CreateRenderPipeline() {
wgpu::ShaderModule vsModule = utils::CreateShaderModule(device, R"(
[[stage(vertex)]] fn main() {
[[stage(vertex)]] fn main() -> [[builtin(position)]] vec4<f32> {
return vec4<f32>();
})");
wgpu::ShaderModule fsModule = utils::CreateShaderModule(device, R"(
@ -1487,7 +1488,8 @@ class SetBindGroupPersistenceValidationTest : public ValidationTest {
ValidationTest::SetUp();
mVsModule = utils::CreateShaderModule(device, R"(
[[stage(vertex)]] fn main() {
[[stage(vertex)]] fn main() -> [[builtin(position)]] vec4<f32> {
return vec4<f32>();
})");
}
@ -1689,7 +1691,8 @@ class BindGroupLayoutCompatibilityTest : public ValidationTest {
const char* fsShader,
std::vector<wgpu::BindGroupLayout> bindGroupLayout) {
wgpu::ShaderModule vsModule = utils::CreateShaderModule(device, R"(
[[stage(vertex)]] fn main() {
[[stage(vertex)]] fn main() -> [[builtin(position)]] vec4<f32> {
return vec4<f32>();
})");
wgpu::ShaderModule fsModule = utils::CreateShaderModule(device, fsShader);
@ -2061,7 +2064,8 @@ class ComparisonSamplerBindingTest : public ValidationTest {
wgpu::RenderPipeline CreateFragmentPipeline(wgpu::BindGroupLayout* bindGroupLayout,
const char* fragmentSource) {
wgpu::ShaderModule vsModule = utils::CreateShaderModule(device, R"(
[[stage(vertex)]] fn main() {
[[stage(vertex)]] fn main() -> [[builtin(position)]] vec4<f32> {
return vec4<f32>();
})");
wgpu::ShaderModule fsModule = utils::CreateShaderModule(device, fragmentSource);

View File

@ -21,7 +21,8 @@ class GetBindGroupLayoutTests : public ValidationTest {
protected:
wgpu::RenderPipeline RenderPipelineFromFragmentShader(const char* shader) {
wgpu::ShaderModule vsModule = utils::CreateShaderModule(device, R"(
[[stage(vertex)]] fn main() {
[[stage(vertex)]] fn main() -> [[builtin(position)]] vec4<f32> {
return vec4<f32>();
})");
wgpu::ShaderModule fsModule = utils::CreateShaderModule(device, shader);
@ -50,9 +51,10 @@ TEST_F(GetBindGroupLayoutTests, SameObject) {
[[group(0), binding(0)]] var<uniform> uniform0 : S;
[[group(1), binding(0)]] var<uniform> uniform1 : S;
[[stage(vertex)]] fn main() {
[[stage(vertex)]] fn main() -> [[builtin(position)]] vec4<f32> {
var pos : vec4<f32> = uniform0.pos;
pos = uniform1.pos;
return vec4<f32>();
})");
wgpu::ShaderModule fsModule = utils::CreateShaderModule(device, R"(
@ -473,9 +475,10 @@ TEST_F(GetBindGroupLayoutTests, DuplicateBinding) {
[[group(0), binding(0)]] var<uniform> uniform0 : S;
[[group(1), binding(0)]] var<uniform> uniform1 : S;
[[stage(vertex)]] fn main() {
[[stage(vertex)]] fn main() -> [[builtin(position)]] vec4<f32> {
var pos : vec4<f32> = uniform0.pos;
pos = uniform1.pos;
return vec4<f32>();
})");
wgpu::ShaderModule fsModule = utils::CreateShaderModule(device, R"(
@ -509,8 +512,9 @@ TEST_F(GetBindGroupLayoutTests, MinBufferSize) {
};
[[group(0), binding(0)]] var<uniform> uniforms : S;
[[stage(vertex)]] fn main() {
[[stage(vertex)]] fn main() -> [[builtin(position)]] vec4<f32> {
var pos : f32 = uniforms.pos;
return vec4<f32>();
})");
wgpu::ShaderModule vsModule64 = utils::CreateShaderModule(device, R"(
@ -519,8 +523,9 @@ TEST_F(GetBindGroupLayoutTests, MinBufferSize) {
};
[[group(0), binding(0)]] var<uniform> uniforms : S;
[[stage(vertex)]] fn main() {
[[stage(vertex)]] fn main() -> [[builtin(position)]] vec4<f32> {
var pos : mat4x4<f32> = uniforms.pos;
return vec4<f32>();
})");
wgpu::ShaderModule fsModule4 = utils::CreateShaderModule(device, R"(
@ -594,13 +599,15 @@ TEST_F(GetBindGroupLayoutTests, StageAggregation) {
DAWN_SKIP_TEST_IF(UsesWire());
wgpu::ShaderModule vsModuleNoSampler = utils::CreateShaderModule(device, R"(
[[stage(vertex)]] fn main() {
[[stage(vertex)]] fn main() -> [[builtin(position)]] vec4<f32> {
return vec4<f32>();
})");
wgpu::ShaderModule vsModuleSampler = utils::CreateShaderModule(device, R"(
[[group(0), binding(0)]] var mySampler: sampler;
[[stage(vertex)]] fn main() {
[[stage(vertex)]] fn main() -> [[builtin(position)]] vec4<f32> {
let s : sampler = mySampler;
return vec4<f32>();
})");
wgpu::ShaderModule fsModuleNoSampler = utils::CreateShaderModule(device, R"(
@ -664,8 +671,9 @@ TEST_F(GetBindGroupLayoutTests, ConflictingBindingType) {
};
[[group(0), binding(0)]] var<uniform> ubo : S;
[[stage(vertex)]] fn main() {
[[stage(vertex)]] fn main() -> [[builtin(position)]] vec4<f32> {
var pos : vec4<f32> = ubo.pos;
return vec4<f32>();
})");
wgpu::ShaderModule fsModule = utils::CreateShaderModule(device, R"(
@ -691,8 +699,9 @@ TEST_F(GetBindGroupLayoutTests, ConflictingBindingTextureMultisampling) {
wgpu::ShaderModule vsModule = utils::CreateShaderModule(device, R"(
[[group(0), binding(0)]] var myTexture : texture_2d<f32>;
[[stage(vertex)]] fn main() {
[[stage(vertex)]] fn main() -> [[builtin(position)]] vec4<f32> {
textureDimensions(myTexture);
return vec4<f32>();
})");
wgpu::ShaderModule fsModule = utils::CreateShaderModule(device, R"(
@ -715,8 +724,9 @@ TEST_F(GetBindGroupLayoutTests, ConflictingBindingViewDimension) {
wgpu::ShaderModule vsModule = utils::CreateShaderModule(device, R"(
[[group(0), binding(0)]] var myTexture : texture_2d<f32>;
[[stage(vertex)]] fn main() {
[[stage(vertex)]] fn main() -> [[builtin(position)]] vec4<f32> {
textureDimensions(myTexture);
return vec4<f32>();
})");
wgpu::ShaderModule fsModule = utils::CreateShaderModule(device, R"(
@ -739,8 +749,9 @@ TEST_F(GetBindGroupLayoutTests, ConflictingBindingTextureComponentType) {
wgpu::ShaderModule vsModule = utils::CreateShaderModule(device, R"(
[[group(0), binding(0)]] var myTexture : texture_2d<f32>;
[[stage(vertex)]] fn main() {
[[stage(vertex)]] fn main() -> [[builtin(position)]] vec4<f32> {
textureDimensions(myTexture);
return vec4<f32>();
})");
wgpu::ShaderModule fsModule = utils::CreateShaderModule(device, R"(
@ -833,8 +844,9 @@ TEST_F(GetBindGroupLayoutTests, Reflection) {
};
[[group(0), binding(0)]] var<uniform> uniforms : S;
[[stage(vertex)]] fn main() {
[[stage(vertex)]] fn main() -> [[builtin(position)]] vec4<f32> {
var pos : vec4<f32> = uniforms.pos;
return vec4<f32>();
})");
wgpu::ShaderModule fsModule = utils::CreateShaderModule(device, R"(

View File

@ -123,8 +123,10 @@ namespace {
// Creates a vertex shader with given bindings
std::string CreateVertexShaderWithBindings(const std::vector<BindingDescriptor>& bindings) {
return kStructs + GenerateBindingString(bindings) + "[[stage(vertex)]] fn main() {\n" +
GenerateReferenceString(bindings, wgpu::ShaderStage::Vertex) + "}";
return kStructs + GenerateBindingString(bindings) +
"[[stage(vertex)]] fn main() -> [[builtin(position)]] vec4<f32> {\n" +
GenerateReferenceString(bindings, wgpu::ShaderStage::Vertex) +
"\n return vec4<f32>(); " + "}";
}
// Creates a fragment shader with given bindings

View File

@ -33,7 +33,8 @@ namespace {
};
[[group(0), binding(0)]] var<uniform> uniforms : S;
[[stage(vertex)]] fn main([[location(0)]] pos : vec2<f32>) {
[[stage(vertex)]] fn main([[location(0)]] pos : vec2<f32>) -> [[builtin(position)]] vec4<f32> {
return vec4<f32>();
})");
fsModule = utils::CreateShaderModule(device, R"(

View File

@ -486,8 +486,9 @@ TEST_F(RenderPipelineValidationTest, StorageBufferInVertexShaderNoLayout) {
data : array<u32, 100>;
};
[[group(0), binding(0)]] var<storage> dst : [[access(read_write)]] Dst;
[[stage(vertex)]] fn main([[builtin(vertex_index)]] VertexIndex : u32) {
[[stage(vertex)]] fn main([[builtin(vertex_index)]] VertexIndex : u32) -> [[builtin(position)]] vec4<f32> {
dst.data[VertexIndex] = 0x1234u;
return vec4<f32>();
})");
utils::ComboRenderPipelineDescriptor2 descriptor;

View File

@ -47,7 +47,8 @@ namespace {
// pipeline. But those bind groups in caller can be used for validation for other purposes.
wgpu::RenderPipeline CreateNoOpRenderPipeline() {
wgpu::ShaderModule vsModule = utils::CreateShaderModule(device, R"(
[[stage(vertex)]] fn main() {
[[stage(vertex)]] fn main() -> [[builtin(position)]] vec4<f32> {
return vec4<f32>();
})");
wgpu::ShaderModule fsModule = utils::CreateShaderModule(device, R"(
@ -772,7 +773,8 @@ namespace {
// Create a passthrough render pipeline with a readonly buffer
wgpu::ShaderModule vsModule = utils::CreateShaderModule(device, R"(
[[stage(vertex)]] fn main() {
[[stage(vertex)]] fn main() -> [[builtin(position)]] vec4<f32> {
return vec4<f32>();
})");
wgpu::ShaderModule fsModule = utils::CreateShaderModule(device, R"(
@ -1550,7 +1552,8 @@ namespace {
{
// Create a passthrough render pipeline with a readonly storage texture
wgpu::ShaderModule vsModule = utils::CreateShaderModule(device, R"(
[[stage(vertex)]] fn main() {
[[stage(vertex)]] fn main() -> [[builtin(position)]] vec4<f32> {
return vec4<f32>();
})");
wgpu::ShaderModule fsModule = utils::CreateShaderModule(device, R"(

View File

@ -65,7 +65,11 @@ TEST_F(UnsafeAPIValidationTest, DrawIndexedIndirectDisallowed) {
bundleDesc.cColorFormats[0] = renderPass.attachmentFormat;
utils::ComboRenderPipelineDescriptor2 desc;
desc.vertex.module = utils::CreateShaderModule(device, "[[stage(vertex)]] fn main() {}");
desc.vertex.module = utils::CreateShaderModule(
device,
R"([[stage(vertex)]] fn main() -> [[builtin(position)]] vec4<f32> {
return vec4<f32>();
})");
desc.cFragment.module = utils::CreateShaderModule(device, "[[stage(fragment)]] fn main() {}");
wgpu::RenderPipeline pipeline = device.CreateRenderPipeline2(&desc);