mirror of
https://github.com/encounter/dawn-cmake.git
synced 2025-12-21 18:59:21 +00:00
Modify External Texture Interface For BiPlanar Formats
Changes dawn.json entry for ExternalTexture to take a secondary plane and adds wgpu::PredefinedColorSpace. Includes validation tests. Bug: dawn:1082 Change-Id: I76475e4a1bce6f25c728ac0251ff582ef6369cd1 Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/76282 Reviewed-by: Austin Eng <enga@chromium.org> Commit-Queue: Brandon1 Jones <brandon1.jones@intel.com>
This commit is contained in:
committed by
Dawn LUCI CQ
parent
0999cb0371
commit
37b3df4337
@@ -58,7 +58,6 @@ class BindGroupValidationTest : public ValidationTest {
|
||||
mSampledTextureView = mSampledTexture.CreateView();
|
||||
|
||||
wgpu::ExternalTextureDescriptor externalTextureDesc;
|
||||
externalTextureDesc.format = kDefaultTextureFormat;
|
||||
externalTextureDesc.plane0 = mSampledTextureView;
|
||||
mExternalTexture = device.CreateExternalTexture(&externalTextureDesc);
|
||||
mExternalTextureBindingEntry.externalTexture = mExternalTexture;
|
||||
@@ -311,7 +310,6 @@ TEST_F(BindGroupValidationTest, ExternalTextureBindingType) {
|
||||
CreateTexture(wgpu::TextureUsage::TextureBinding, kDefaultTextureFormat, 1);
|
||||
wgpu::ExternalTextureDescriptor externalDesc;
|
||||
externalDesc.plane0 = texture.CreateView();
|
||||
externalDesc.format = kDefaultTextureFormat;
|
||||
wgpu::ExternalTexture externalTexture = device.CreateExternalTexture(&externalDesc);
|
||||
|
||||
// Create a bind group layout for a single external texture
|
||||
|
||||
@@ -20,7 +20,8 @@
|
||||
namespace {
|
||||
class ExternalTextureTest : public ValidationTest {
|
||||
public:
|
||||
wgpu::TextureDescriptor CreateDefaultTextureDescriptor() {
|
||||
wgpu::TextureDescriptor CreateTextureDescriptor(
|
||||
wgpu::TextureFormat format = kDefaultTextureFormat) {
|
||||
wgpu::TextureDescriptor descriptor;
|
||||
descriptor.size.width = kWidth;
|
||||
descriptor.size.height = kHeight;
|
||||
@@ -28,9 +29,8 @@ namespace {
|
||||
descriptor.mipLevelCount = kDefaultMipLevels;
|
||||
descriptor.sampleCount = kDefaultSampleCount;
|
||||
descriptor.dimension = wgpu::TextureDimension::e2D;
|
||||
descriptor.format = kDefaultTextureFormat;
|
||||
descriptor.usage =
|
||||
wgpu::TextureUsage::TextureBinding | wgpu::TextureUsage::RenderAttachment;
|
||||
descriptor.format = format;
|
||||
descriptor.usage = kDefaultUsage;
|
||||
return descriptor;
|
||||
}
|
||||
|
||||
@@ -46,9 +46,13 @@ namespace {
|
||||
static constexpr uint32_t kDefaultDepth = 1;
|
||||
static constexpr uint32_t kDefaultMipLevels = 1;
|
||||
static constexpr uint32_t kDefaultSampleCount = 1;
|
||||
static constexpr wgpu::TextureUsage kDefaultUsage =
|
||||
wgpu::TextureUsage::TextureBinding | wgpu::TextureUsage::RenderAttachment;
|
||||
|
||||
static constexpr wgpu::TextureFormat kDefaultTextureFormat =
|
||||
wgpu::TextureFormat::RGBA8Unorm;
|
||||
static constexpr wgpu::TextureFormat kBiplanarPlane0Format = wgpu::TextureFormat::R8Unorm;
|
||||
static constexpr wgpu::TextureFormat kBiplanarPlane1Format = wgpu::TextureFormat::RG8Unorm;
|
||||
|
||||
wgpu::Queue queue;
|
||||
};
|
||||
@@ -56,47 +60,32 @@ namespace {
|
||||
TEST_F(ExternalTextureTest, CreateExternalTextureValidation) {
|
||||
// Creating an external texture from a 2D, single-subresource texture should succeed.
|
||||
{
|
||||
wgpu::TextureDescriptor textureDescriptor = CreateDefaultTextureDescriptor();
|
||||
wgpu::TextureDescriptor textureDescriptor = CreateTextureDescriptor();
|
||||
wgpu::Texture texture = device.CreateTexture(&textureDescriptor);
|
||||
|
||||
wgpu::ExternalTextureDescriptor externalDesc;
|
||||
externalDesc.format = kDefaultTextureFormat;
|
||||
externalDesc.plane0 = texture.CreateView();
|
||||
device.CreateExternalTexture(&externalDesc);
|
||||
}
|
||||
|
||||
// Creating an external texture with a mismatched texture view format should fail.
|
||||
{
|
||||
wgpu::TextureDescriptor textureDescriptor = CreateDefaultTextureDescriptor();
|
||||
textureDescriptor.format = wgpu::TextureFormat::RGBA8Uint;
|
||||
wgpu::Texture texture = device.CreateTexture(&textureDescriptor);
|
||||
|
||||
wgpu::ExternalTextureDescriptor externalDesc;
|
||||
externalDesc.format = kDefaultTextureFormat;
|
||||
externalDesc.plane0 = texture.CreateView();
|
||||
ASSERT_DEVICE_ERROR(device.CreateExternalTexture(&externalDesc));
|
||||
}
|
||||
|
||||
// Creating an external texture from a non-2D texture should fail.
|
||||
{
|
||||
wgpu::TextureDescriptor textureDescriptor = CreateDefaultTextureDescriptor();
|
||||
wgpu::TextureDescriptor textureDescriptor = CreateTextureDescriptor();
|
||||
textureDescriptor.dimension = wgpu::TextureDimension::e3D;
|
||||
wgpu::Texture internalTexture = device.CreateTexture(&textureDescriptor);
|
||||
|
||||
wgpu::ExternalTextureDescriptor externalDesc;
|
||||
externalDesc.format = kDefaultTextureFormat;
|
||||
externalDesc.plane0 = internalTexture.CreateView();
|
||||
ASSERT_DEVICE_ERROR(device.CreateExternalTexture(&externalDesc));
|
||||
}
|
||||
|
||||
// Creating an external texture from a texture with mip count > 1 should fail.
|
||||
{
|
||||
wgpu::TextureDescriptor textureDescriptor = CreateDefaultTextureDescriptor();
|
||||
wgpu::TextureDescriptor textureDescriptor = CreateTextureDescriptor();
|
||||
textureDescriptor.mipLevelCount = 2;
|
||||
wgpu::Texture internalTexture = device.CreateTexture(&textureDescriptor);
|
||||
|
||||
wgpu::ExternalTextureDescriptor externalDesc;
|
||||
externalDesc.format = kDefaultTextureFormat;
|
||||
externalDesc.plane0 = internalTexture.CreateView();
|
||||
ASSERT_DEVICE_ERROR(device.CreateExternalTexture(&externalDesc));
|
||||
}
|
||||
@@ -104,43 +93,40 @@ namespace {
|
||||
// Creating an external texture from a texture without TextureUsage::TextureBinding should
|
||||
// fail.
|
||||
{
|
||||
wgpu::TextureDescriptor textureDescriptor = CreateDefaultTextureDescriptor();
|
||||
wgpu::TextureDescriptor textureDescriptor = CreateTextureDescriptor();
|
||||
textureDescriptor.mipLevelCount = 2;
|
||||
wgpu::Texture internalTexture = device.CreateTexture(&textureDescriptor);
|
||||
|
||||
wgpu::ExternalTextureDescriptor externalDesc;
|
||||
externalDesc.format = kDefaultTextureFormat;
|
||||
externalDesc.plane0 = internalTexture.CreateView();
|
||||
ASSERT_DEVICE_ERROR(device.CreateExternalTexture(&externalDesc));
|
||||
}
|
||||
|
||||
// Creating an external texture with an unsupported format should fail.
|
||||
{
|
||||
wgpu::TextureDescriptor textureDescriptor = CreateDefaultTextureDescriptor();
|
||||
wgpu::TextureDescriptor textureDescriptor = CreateTextureDescriptor();
|
||||
textureDescriptor.format = wgpu::TextureFormat::R8Uint;
|
||||
wgpu::Texture internalTexture = device.CreateTexture(&textureDescriptor);
|
||||
|
||||
wgpu::ExternalTextureDescriptor externalDesc;
|
||||
externalDesc.plane0 = internalTexture.CreateView();
|
||||
externalDesc.format = textureDescriptor.format;
|
||||
ASSERT_DEVICE_ERROR(device.CreateExternalTexture(&externalDesc));
|
||||
}
|
||||
|
||||
// Creating an external texture with an multisampled texture should fail.
|
||||
{
|
||||
wgpu::TextureDescriptor textureDescriptor = CreateDefaultTextureDescriptor();
|
||||
wgpu::TextureDescriptor textureDescriptor = CreateTextureDescriptor();
|
||||
textureDescriptor.sampleCount = 4;
|
||||
wgpu::Texture internalTexture = device.CreateTexture(&textureDescriptor);
|
||||
|
||||
wgpu::ExternalTextureDescriptor externalDesc;
|
||||
externalDesc.format = kDefaultTextureFormat;
|
||||
externalDesc.plane0 = internalTexture.CreateView();
|
||||
ASSERT_DEVICE_ERROR(device.CreateExternalTexture(&externalDesc));
|
||||
}
|
||||
|
||||
// Creating an external texture with an error texture view should fail.
|
||||
{
|
||||
wgpu::TextureDescriptor textureDescriptor = CreateDefaultTextureDescriptor();
|
||||
wgpu::TextureDescriptor textureDescriptor = CreateTextureDescriptor();
|
||||
wgpu::Texture internalTexture = device.CreateTexture(&textureDescriptor);
|
||||
|
||||
wgpu::TextureViewDescriptor errorViewDescriptor;
|
||||
@@ -152,9 +138,77 @@ namespace {
|
||||
internalTexture.CreateView(&errorViewDescriptor));
|
||||
|
||||
wgpu::ExternalTextureDescriptor externalDesc;
|
||||
externalDesc.format = kDefaultTextureFormat;
|
||||
externalDesc.plane0 = errorTextureView;
|
||||
externalDesc.format = kDefaultTextureFormat;
|
||||
ASSERT_DEVICE_ERROR(device.CreateExternalTexture(&externalDesc));
|
||||
}
|
||||
}
|
||||
|
||||
// Test that external texture creation works as expected in multiplane scenarios.
|
||||
TEST_F(ExternalTextureTest, CreateMultiplanarExternalTextureValidation) {
|
||||
// Creating an external texture from two 2D, single-subresource textures with a biplanar
|
||||
// format should succeed.
|
||||
{
|
||||
wgpu::TextureDescriptor plane0TextureDescriptor =
|
||||
CreateTextureDescriptor(kBiplanarPlane0Format);
|
||||
wgpu::TextureDescriptor plane1TextureDescriptor =
|
||||
CreateTextureDescriptor(kBiplanarPlane1Format);
|
||||
wgpu::Texture texture0 = device.CreateTexture(&plane0TextureDescriptor);
|
||||
wgpu::Texture texture1 = device.CreateTexture(&plane1TextureDescriptor);
|
||||
|
||||
wgpu::ExternalTextureDescriptor externalDesc;
|
||||
externalDesc.plane0 = texture0.CreateView();
|
||||
externalDesc.plane1 = texture1.CreateView();
|
||||
|
||||
device.CreateExternalTexture(&externalDesc);
|
||||
}
|
||||
|
||||
// Creating a multiplanar external texture with an unsupported format for plane0 should
|
||||
// result in an error.
|
||||
{
|
||||
wgpu::TextureDescriptor plane0TextureDescriptor =
|
||||
CreateTextureDescriptor(kDefaultTextureFormat);
|
||||
wgpu::TextureDescriptor plane1TextureDescriptor =
|
||||
CreateTextureDescriptor(kBiplanarPlane1Format);
|
||||
wgpu::Texture texture0 = device.CreateTexture(&plane0TextureDescriptor);
|
||||
wgpu::Texture texture1 = device.CreateTexture(&plane1TextureDescriptor);
|
||||
|
||||
wgpu::ExternalTextureDescriptor externalDesc;
|
||||
externalDesc.plane0 = texture0.CreateView();
|
||||
externalDesc.plane1 = texture1.CreateView();
|
||||
|
||||
ASSERT_DEVICE_ERROR(device.CreateExternalTexture(&externalDesc));
|
||||
}
|
||||
|
||||
// Creating a multiplanar external texture with an unsupported format for plane1 should
|
||||
// result in an error.
|
||||
{
|
||||
wgpu::TextureDescriptor plane0TextureDescriptor =
|
||||
CreateTextureDescriptor(kBiplanarPlane0Format);
|
||||
wgpu::TextureDescriptor plane1TextureDescriptor =
|
||||
CreateTextureDescriptor(kDefaultTextureFormat);
|
||||
wgpu::Texture texture0 = device.CreateTexture(&plane0TextureDescriptor);
|
||||
wgpu::Texture texture1 = device.CreateTexture(&plane1TextureDescriptor);
|
||||
|
||||
wgpu::ExternalTextureDescriptor externalDesc;
|
||||
externalDesc.plane0 = texture0.CreateView();
|
||||
externalDesc.plane1 = texture1.CreateView();
|
||||
|
||||
ASSERT_DEVICE_ERROR(device.CreateExternalTexture(&externalDesc));
|
||||
}
|
||||
|
||||
// Creating a multiplanar external texture with a non-sRGB color space should fail.
|
||||
{
|
||||
wgpu::TextureDescriptor plane0TextureDescriptor =
|
||||
CreateTextureDescriptor(kBiplanarPlane0Format);
|
||||
wgpu::TextureDescriptor plane1TextureDescriptor =
|
||||
CreateTextureDescriptor(kBiplanarPlane1Format);
|
||||
wgpu::Texture texture0 = device.CreateTexture(&plane0TextureDescriptor);
|
||||
wgpu::Texture texture1 = device.CreateTexture(&plane1TextureDescriptor);
|
||||
|
||||
wgpu::ExternalTextureDescriptor externalDesc;
|
||||
externalDesc.plane0 = texture0.CreateView();
|
||||
externalDesc.plane1 = texture1.CreateView();
|
||||
externalDesc.colorSpace = wgpu::PredefinedColorSpace::Undefined;
|
||||
ASSERT_DEVICE_ERROR(device.CreateExternalTexture(&externalDesc));
|
||||
}
|
||||
}
|
||||
@@ -162,11 +216,10 @@ namespace {
|
||||
// Test that submitting a render pass that contains a destroyed external texture results in
|
||||
// an error.
|
||||
TEST_F(ExternalTextureTest, SubmitDestroyedExternalTextureInRenderPass) {
|
||||
wgpu::TextureDescriptor textureDescriptor = CreateDefaultTextureDescriptor();
|
||||
wgpu::TextureDescriptor textureDescriptor = CreateTextureDescriptor();
|
||||
wgpu::Texture texture = device.CreateTexture(&textureDescriptor);
|
||||
|
||||
wgpu::ExternalTextureDescriptor externalDesc;
|
||||
externalDesc.format = kDefaultTextureFormat;
|
||||
externalDesc.plane0 = texture.CreateView();
|
||||
wgpu::ExternalTexture externalTexture = device.CreateExternalTexture(&externalDesc);
|
||||
|
||||
@@ -176,7 +229,7 @@ namespace {
|
||||
wgpu::BindGroup bindGroup = utils::MakeBindGroup(device, bgl, {{0, externalTexture}});
|
||||
|
||||
// Create another texture to use as a color attachment.
|
||||
wgpu::TextureDescriptor renderTextureDescriptor = CreateDefaultTextureDescriptor();
|
||||
wgpu::TextureDescriptor renderTextureDescriptor = CreateTextureDescriptor();
|
||||
wgpu::Texture renderTexture = device.CreateTexture(&renderTextureDescriptor);
|
||||
wgpu::TextureView renderView = renderTexture.CreateView();
|
||||
|
||||
@@ -214,11 +267,10 @@ namespace {
|
||||
// Test that submitting a render pass that contains a destroyed external texture plane
|
||||
// results in an error.
|
||||
TEST_F(ExternalTextureTest, SubmitDestroyedExternalTexturePlaneInRenderPass) {
|
||||
wgpu::TextureDescriptor textureDescriptor = CreateDefaultTextureDescriptor();
|
||||
wgpu::TextureDescriptor textureDescriptor = CreateTextureDescriptor();
|
||||
wgpu::Texture texture = device.CreateTexture(&textureDescriptor);
|
||||
|
||||
wgpu::ExternalTextureDescriptor externalDesc;
|
||||
externalDesc.format = kDefaultTextureFormat;
|
||||
externalDesc.plane0 = texture.CreateView();
|
||||
wgpu::ExternalTexture externalTexture = device.CreateExternalTexture(&externalDesc);
|
||||
|
||||
@@ -228,7 +280,7 @@ namespace {
|
||||
wgpu::BindGroup bindGroup = utils::MakeBindGroup(device, bgl, {{0, externalTexture}});
|
||||
|
||||
// Create another texture to use as a color attachment.
|
||||
wgpu::TextureDescriptor renderTextureDescriptor = CreateDefaultTextureDescriptor();
|
||||
wgpu::TextureDescriptor renderTextureDescriptor = CreateTextureDescriptor();
|
||||
wgpu::Texture renderTexture = device.CreateTexture(&renderTextureDescriptor);
|
||||
wgpu::TextureView renderView = renderTexture.CreateView();
|
||||
|
||||
@@ -266,11 +318,10 @@ namespace {
|
||||
// Test that submitting a compute pass that contains a destroyed external texture results in
|
||||
// an error.
|
||||
TEST_F(ExternalTextureTest, SubmitDestroyedExternalTextureInComputePass) {
|
||||
wgpu::TextureDescriptor textureDescriptor = CreateDefaultTextureDescriptor();
|
||||
wgpu::TextureDescriptor textureDescriptor = CreateTextureDescriptor();
|
||||
wgpu::Texture texture = device.CreateTexture(&textureDescriptor);
|
||||
|
||||
wgpu::ExternalTextureDescriptor externalDesc;
|
||||
externalDesc.format = kDefaultTextureFormat;
|
||||
externalDesc.plane0 = texture.CreateView();
|
||||
wgpu::ExternalTexture externalTexture = device.CreateExternalTexture(&externalDesc);
|
||||
|
||||
@@ -313,11 +364,10 @@ namespace {
|
||||
// Test that submitting a compute pass that contains a destroyed external texture plane
|
||||
// results in an error.
|
||||
TEST_F(ExternalTextureTest, SubmitDestroyedExternalTexturePlaneInComputePass) {
|
||||
wgpu::TextureDescriptor textureDescriptor = CreateDefaultTextureDescriptor();
|
||||
wgpu::TextureDescriptor textureDescriptor = CreateTextureDescriptor();
|
||||
wgpu::Texture texture = device.CreateTexture(&textureDescriptor);
|
||||
|
||||
wgpu::ExternalTextureDescriptor externalDesc;
|
||||
externalDesc.format = kDefaultTextureFormat;
|
||||
externalDesc.plane0 = texture.CreateView();
|
||||
wgpu::ExternalTexture externalTexture = device.CreateExternalTexture(&externalDesc);
|
||||
|
||||
|
||||
@@ -228,7 +228,6 @@ TEST_F(LabelTest, ExternalTexture) {
|
||||
wgpu::Texture texture = device.CreateTexture(&textureDescriptor);
|
||||
|
||||
wgpu::ExternalTextureDescriptor descriptor;
|
||||
descriptor.format = wgpu::TextureFormat::RGBA8Unorm;
|
||||
descriptor.plane0 = texture.CreateView();
|
||||
|
||||
// The label should be empty if one was not set.
|
||||
|
||||
Reference in New Issue
Block a user