mirror of
https://github.com/encounter/dawn-cmake.git
synced 2025-07-09 22:56:06 +00:00
We do query resetting for each query commands outside render pass, whether they're rewritten or not, so no longer need to track their availability on command encoder. The availability on query set is enough for resolving sparse queries. But we still need to track query availability on render pass for query rewrite checking and query resetting per render pass. Because reset command must be called outside render pass, we need to reset them together before the beginning render pass based that. Add availability tracking on pass resource usage tracker (we only need it on render pass ) to facilitate use it in Vulkan backend. Bug: dawn:434 Change-Id: Ie1b413ff54f62f3b84fe612e4abe45872c387e81 Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/45440 Reviewed-by: Corentin Wallez <cwallez@chromium.org> Commit-Queue: Hao Li <hao.x.li@intel.com>
62 lines
2.0 KiB
C++
62 lines
2.0 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;
|
|
|
|
std::vector<QuerySetBase*> querySets;
|
|
std::vector<std::vector<bool>> queryAvailabilities;
|
|
};
|
|
|
|
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
|