// Copyright 2024 The Dawn & Tint Authors // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, this // list of conditions and the following disclaimer. // // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // // 3. Neither the name of the copyright holder nor the names of its // contributors may be used to endorse or promote products derived from // this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE // DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE // FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, // OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include <vulkan/vulkan.h> #include <vector> #include "dawn/tests/unittests/validation/ValidationTest.h" #include "dawn/utils/WGPUHelpers.h" namespace dawn { namespace { constexpr uint32_t kWidth = …; constexpr uint32_t kHeight = …; constexpr uint32_t kDefaultMipLevels = …; constexpr uint32_t kDefaultLayerCount = …; constexpr uint32_t kDefaultSampleCount = …; constexpr wgpu::TextureFormat kDefaultTextureFormat = …; wgpu::Texture Create2DTexture(wgpu::Device& device, wgpu::TextureFormat format = kDefaultTextureFormat) { … } wgpu::TextureViewDescriptor CreateDefaultViewDescriptor(wgpu::TextureViewDimension dimension) { … } class YCbCrInfoWithoutFeatureValidationTest : public ValidationTest { … }; // Tests that creating a sampler with a valid ycbcr vulkan descriptor raises an error // if the required feature is not enabled. TEST_F(YCbCrInfoWithoutFeatureValidationTest, YCbCrSamplerNotSupported) { … } // Tests that creating a texture with External format raises an error if the required feature is not // enabled. TEST_F(YCbCrInfoWithoutFeatureValidationTest, ExternalTextureNotSupported) { … } // Tests that creating a texture view with a valid ycbcr vulkan descriptor raises an error // if the required feature is not enabled. TEST_F(YCbCrInfoWithoutFeatureValidationTest, YCbCrTextureViewNotSupported) { … } class YCbCrInfoWithFeatureValidationTest : public YCbCrInfoWithoutFeatureValidationTest { … }; // Tests that creating a sampler with a valid ycbcr vulkan descriptor succeeds if the // required feature is enabled. TEST_F(YCbCrInfoWithFeatureValidationTest, YCbCrSamplerSupported) { … } // Tests that creating a bind group layout with a valid static sampler succeeds if the // required feature is enabled. TEST_F(YCbCrInfoWithFeatureValidationTest, CreateBindGroupWithYCbCrSamplerSupported) { … } // Verifies that creation of a correctly-specified bind group for a layout that // has a sampler and a static sampler succeeds. TEST_F(YCbCrInfoWithFeatureValidationTest, CreateBindGroupWithSamplerAndStaticSamplerSupported) { … } // Verifies that creation of a bind group with the correct number of entries for a layout that has a // sampler and a static sampler raises an error if the entry is specified at the // index of the static sampler rather than that of the sampler. TEST_F(YCbCrInfoWithFeatureValidationTest, BindGroupCreationForSamplerBindingTypeCausesError) { … } // Tests that creating a texture view with a valid ycbcr vulkan descriptor succeeds if the // required feature is enabled. TEST_F(YCbCrInfoWithFeatureValidationTest, YCbCrTextureViewSupported) { … } // TODO(crbug.com/dawn/2476): Add test validating binding fails if sampler or texture view is not // YCbCr // TODO(crbug.com/dawn/2476): Add test validating binding passes if sampler and texture view is // YCbCr // TODO(crbug.com/dawn/2476): Add test validating binding fails if texture view ycbcr info is // different from that on sampler // TODO(crbug.com/dawn/2476): Add test validating binding passes if texture view ycbcr info is same // as that on sampler // TODO(crbug.com/dawn/2476): Add validation that mipLevel, arrayLayers are always 1 along with 2D // view dimension (see // https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkImageCreateInfo.html) with // YCbCr and tests for it. } // anonymous namespace } // namespace dawn