mirror of
https://github.com/encounter/dawn-cmake.git
synced 2025-05-16 20:31:20 +00:00
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:
parent
9b6872dd00
commit
895bc934bb
@ -43,7 +43,7 @@ namespace dawn_native { namespace d3d12 {
|
|||||||
MaybeError QuerySet::Initialize() {
|
MaybeError QuerySet::Initialize() {
|
||||||
D3D12_QUERY_HEAP_DESC queryHeapDesc = {};
|
D3D12_QUERY_HEAP_DESC queryHeapDesc = {};
|
||||||
queryHeapDesc.Type = D3D12QueryHeapType(GetQueryType());
|
queryHeapDesc.Type = D3D12QueryHeapType(GetQueryType());
|
||||||
queryHeapDesc.Count = GetQueryCount();
|
queryHeapDesc.Count = std::max(GetQueryCount(), uint32_t(1u));
|
||||||
|
|
||||||
ID3D12Device* d3d12Device = ToBackend(GetDevice())->GetD3D12Device();
|
ID3D12Device* d3d12Device = ToBackend(GetDevice())->GetD3D12Device();
|
||||||
return CheckOutOfMemoryHRESULT(
|
return CheckOutOfMemoryHRESULT(
|
||||||
|
@ -42,7 +42,7 @@ namespace dawn_native { namespace metal {
|
|||||||
}
|
}
|
||||||
ASSERT(descriptor.counterSet != nullptr);
|
ASSERT(descriptor.counterSet != nullptr);
|
||||||
|
|
||||||
descriptor.sampleCount = count;
|
descriptor.sampleCount = static_cast<NSUInteger>(std::max(count, uint32_t(1u)));
|
||||||
descriptor.storageMode = MTLStorageModePrivate;
|
descriptor.storageMode = MTLStorageModePrivate;
|
||||||
if (device->IsToggleEnabled(Toggle::MetalUseSharedModeForCounterSampleBuffer)) {
|
if (device->IsToggleEnabled(Toggle::MetalUseSharedModeForCounterSampleBuffer)) {
|
||||||
descriptor.storageMode = MTLStorageModeShared;
|
descriptor.storageMode = MTLStorageModeShared;
|
||||||
@ -75,7 +75,8 @@ namespace dawn_native { namespace metal {
|
|||||||
switch (GetQueryType()) {
|
switch (GetQueryType()) {
|
||||||
case wgpu::QueryType::Occlusion: {
|
case wgpu::QueryType::Occlusion: {
|
||||||
// Create buffer for writing 64-bit results.
|
// 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()
|
mVisibilityBuffer = AcquireNSPRef([device->GetMTLDevice()
|
||||||
newBufferWithLength:bufferSize
|
newBufferWithLength:bufferSize
|
||||||
options:MTLResourceStorageModePrivate]);
|
options:MTLResourceStorageModePrivate]);
|
||||||
|
@ -77,7 +77,7 @@ namespace dawn_native { namespace vulkan {
|
|||||||
createInfo.pNext = NULL;
|
createInfo.pNext = NULL;
|
||||||
createInfo.flags = 0;
|
createInfo.flags = 0;
|
||||||
createInfo.queryType = VulkanQueryType(GetQueryType());
|
createInfo.queryType = VulkanQueryType(GetQueryType());
|
||||||
createInfo.queryCount = GetQueryCount();
|
createInfo.queryCount = std::max(GetQueryCount(), uint32_t(1u));
|
||||||
if (GetQueryType() == wgpu::QueryType::PipelineStatistics) {
|
if (GetQueryType() == wgpu::QueryType::PipelineStatistics) {
|
||||||
createInfo.pipelineStatistics =
|
createInfo.pipelineStatistics =
|
||||||
VulkanQueryPipelineStatisticFlags(GetPipelineStatistics());
|
VulkanQueryPipelineStatisticFlags(GetPipelineStatistics());
|
||||||
|
@ -215,6 +215,9 @@ class OcclusionQueryTests : public QueryTests {
|
|||||||
|
|
||||||
// Test creating query set with the type of Occlusion
|
// Test creating query set with the type of Occlusion
|
||||||
TEST_P(OcclusionQueryTests, QuerySetCreation) {
|
TEST_P(OcclusionQueryTests, QuerySetCreation) {
|
||||||
|
// Zero-sized query set is allowed.
|
||||||
|
CreateOcclusionQuerySet(0);
|
||||||
|
|
||||||
CreateOcclusionQuerySet(1);
|
CreateOcclusionQuerySet(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -461,19 +464,30 @@ class PipelineStatisticsQueryTests : public QueryTests {
|
|||||||
|
|
||||||
return requiredExtensions;
|
return requiredExtensions;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wgpu::QuerySet CreateQuerySetForPipelineStatistics(
|
||||||
|
uint32_t queryCount,
|
||||||
|
std::vector<wgpu::PipelineStatisticName> pipelineStatistics = {}) {
|
||||||
|
wgpu::QuerySetDescriptor descriptor;
|
||||||
|
descriptor.count = queryCount;
|
||||||
|
descriptor.type = wgpu::QueryType::PipelineStatistics;
|
||||||
|
|
||||||
|
if (pipelineStatistics.size() > 0) {
|
||||||
|
descriptor.pipelineStatistics = pipelineStatistics.data();
|
||||||
|
descriptor.pipelineStatisticsCount = pipelineStatistics.size();
|
||||||
|
}
|
||||||
|
return device.CreateQuerySet(&descriptor);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// Test creating query set with the type of PipelineStatistics
|
// Test creating query set with the type of PipelineStatistics
|
||||||
TEST_P(PipelineStatisticsQueryTests, QuerySetCreation) {
|
TEST_P(PipelineStatisticsQueryTests, QuerySetCreation) {
|
||||||
wgpu::QuerySetDescriptor descriptor;
|
// Zero-sized query set is allowed.
|
||||||
descriptor.count = 1;
|
CreateQuerySetForPipelineStatistics(0, {wgpu::PipelineStatisticName::ClipperInvocations,
|
||||||
descriptor.type = wgpu::QueryType::PipelineStatistics;
|
wgpu::PipelineStatisticName::VertexShaderInvocations});
|
||||||
wgpu::PipelineStatisticName pipelineStatistics[2] = {
|
|
||||||
wgpu::PipelineStatisticName::ClipperInvocations,
|
CreateQuerySetForPipelineStatistics(1, {wgpu::PipelineStatisticName::ClipperInvocations,
|
||||||
wgpu::PipelineStatisticName::VertexShaderInvocations};
|
wgpu::PipelineStatisticName::VertexShaderInvocations});
|
||||||
descriptor.pipelineStatistics = pipelineStatistics;
|
|
||||||
descriptor.pipelineStatisticsCount = 2;
|
|
||||||
device.CreateQuerySet(&descriptor);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
DAWN_INSTANTIATE_TEST(PipelineStatisticsQueryTests,
|
DAWN_INSTANTIATE_TEST(PipelineStatisticsQueryTests,
|
||||||
@ -529,6 +543,9 @@ class TimestampQueryTests : public QueryTests {
|
|||||||
|
|
||||||
// Test creating query set with the type of Timestamp
|
// Test creating query set with the type of Timestamp
|
||||||
TEST_P(TimestampQueryTests, QuerySetCreation) {
|
TEST_P(TimestampQueryTests, QuerySetCreation) {
|
||||||
|
// Zero-sized query set is allowed.
|
||||||
|
CreateQuerySetForTimestamp(0);
|
||||||
|
|
||||||
CreateQuerySetForTimestamp(1);
|
CreateQuerySetForTimestamp(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user