Implement zero-sized QuerySet

- Add zero-sized implementation in each backend.
- Test creating zero-sized query set for each type.

Bug: dawn:954
Change-Id: Ib2b8a7d890dae6ee40f5a05aac570a4600dedab8
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/56260
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Jiawei Shao <jiawei.shao@intel.com>
Commit-Queue: Hao Li <hao.x.li@intel.com>
This commit is contained in:
Li Hao
2021-06-29 08:04:00 +00:00
committed by Dawn LUCI CQ
parent 9b6872dd00
commit 895bc934bb
4 changed files with 31 additions and 13 deletions

View File

@@ -43,7 +43,7 @@ namespace dawn_native { namespace d3d12 {
MaybeError QuerySet::Initialize() {
D3D12_QUERY_HEAP_DESC queryHeapDesc = {};
queryHeapDesc.Type = D3D12QueryHeapType(GetQueryType());
queryHeapDesc.Count = GetQueryCount();
queryHeapDesc.Count = std::max(GetQueryCount(), uint32_t(1u));
ID3D12Device* d3d12Device = ToBackend(GetDevice())->GetD3D12Device();
return CheckOutOfMemoryHRESULT(

View File

@@ -42,7 +42,7 @@ namespace dawn_native { namespace metal {
}
ASSERT(descriptor.counterSet != nullptr);
descriptor.sampleCount = count;
descriptor.sampleCount = static_cast<NSUInteger>(std::max(count, uint32_t(1u)));
descriptor.storageMode = MTLStorageModePrivate;
if (device->IsToggleEnabled(Toggle::MetalUseSharedModeForCounterSampleBuffer)) {
descriptor.storageMode = MTLStorageModeShared;
@@ -75,7 +75,8 @@ namespace dawn_native { namespace metal {
switch (GetQueryType()) {
case wgpu::QueryType::Occlusion: {
// Create buffer for writing 64-bit results.
NSUInteger bufferSize = static_cast<NSUInteger>(GetQueryCount() * sizeof(uint64_t));
NSUInteger bufferSize = static_cast<NSUInteger>(
std::max(GetQueryCount() * sizeof(uint64_t), size_t(4u)));
mVisibilityBuffer = AcquireNSPRef([device->GetMTLDevice()
newBufferWithLength:bufferSize
options:MTLResourceStorageModePrivate]);

View File

@@ -77,7 +77,7 @@ namespace dawn_native { namespace vulkan {
createInfo.pNext = NULL;
createInfo.flags = 0;
createInfo.queryType = VulkanQueryType(GetQueryType());
createInfo.queryCount = GetQueryCount();
createInfo.queryCount = std::max(GetQueryCount(), uint32_t(1u));
if (GetQueryType() == wgpu::QueryType::PipelineStatistics) {
createInfo.pipelineStatistics =
VulkanQueryPipelineStatisticFlags(GetPipelineStatistics());