chromium/third_party/dawn/src/dawn/tests/unittests/validation/YCbCrInfoValidationTests.cpp

// 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