mirror of
https://github.com/encounter/dawn-cmake.git
synced 2025-09-09 20:29:14 +00:00
The global resource usage was used for two things: - Validating that the texture had the required usage, but this was removed in a previous commit in favor of checking the texture's usage at the encoding entrypoint. - Skipping laz-clearing of the texture if it was used as RenderAttachment. This was incorrect and would skip clearing of all of the texture's subresource as long as one of them was used as RenderAttachment. This commit make PassTextureUsage exactly a SubresourceStorage<TextureUsage> and fixes the logic for skipping the clearing or RenderAttachment. It also adds a regression test for the lazy clearing fix. Bug: dawn:635 Change-Id: I5d984febb3e5a5f9ae15b632cac68e294555c4e6 Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/38382 Commit-Queue: Corentin Wallez <cwallez@chromium.org> Reviewed-by: Stephen White <senorblanco@chromium.org> Auto-Submit: Corentin Wallez <cwallez@chromium.org>
59 lines
1.8 KiB
C++
59 lines
1.8 KiB
C++
// Copyright 2018 The Dawn Authors
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
#ifndef DAWNNATIVE_PASSRESOURCEUSAGE_H
|
|
#define DAWNNATIVE_PASSRESOURCEUSAGE_H
|
|
|
|
#include "dawn_native/SubresourceStorage.h"
|
|
#include "dawn_native/dawn_platform.h"
|
|
|
|
#include <set>
|
|
#include <vector>
|
|
|
|
namespace dawn_native {
|
|
|
|
class BufferBase;
|
|
class QuerySetBase;
|
|
class TextureBase;
|
|
|
|
enum class PassType { Render, Compute };
|
|
|
|
// The texture usage inside passes must be tracked per-subresource.
|
|
using PassTextureUsage = SubresourceStorage<wgpu::TextureUsage>;
|
|
|
|
// Which resources are used by pass and how they are used. The command buffer validation
|
|
// pre-computes this information so that backends with explicit barriers don't have to
|
|
// re-compute it.
|
|
struct PassResourceUsage {
|
|
PassType passType;
|
|
std::vector<BufferBase*> buffers;
|
|
std::vector<wgpu::BufferUsage> bufferUsages;
|
|
|
|
std::vector<TextureBase*> textures;
|
|
std::vector<PassTextureUsage> textureUsages;
|
|
};
|
|
|
|
using PerPassUsages = std::vector<PassResourceUsage>;
|
|
|
|
struct CommandBufferResourceUsage {
|
|
PerPassUsages perPass;
|
|
std::set<BufferBase*> topLevelBuffers;
|
|
std::set<TextureBase*> topLevelTextures;
|
|
std::set<QuerySetBase*> usedQuerySets;
|
|
};
|
|
|
|
} // namespace dawn_native
|
|
|
|
#endif // DAWNNATIVE_PASSRESOURCEUSAGE_H
|