Skip to content

Commit 9cde409

Browse files
EngineFactoryWebGPU: set all feature states in GetGraphicsAdapterInfo
1 parent 34a2c85 commit 9cde409

File tree

2 files changed

+56
-42
lines changed

2 files changed

+56
-42
lines changed

Graphics/GraphicsEngineWebGPU/include/pch.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2023-2024 Diligent Graphics LLC
2+
* Copyright 2023-2025 Diligent Graphics LLC
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -53,6 +53,8 @@ constexpr WGPUSamplerBindingType WGPUSamplerBindingType_BindingNotUsed = WGP
5353
constexpr WGPUTextureSampleType WGPUTextureSampleType_BindingNotUsed = WGPUTextureSampleType_Undefined;
5454
constexpr WGPUStorageTextureAccess WGPUStorageTextureAccess_BindingNotUsed = WGPUStorageTextureAccess_Undefined;
5555

56+
constexpr WGPUFeatureName WGPUFeatureName_DualSourceBlending = static_cast<WGPUFeatureName>(0x00050008);
57+
5658
inline bool WGPUStringViewValid(WGPUStringView Str)
5759
{
5860
return Str != nullptr && Str[0] != '\0';

Graphics/GraphicsEngineWebGPU/src/EngineFactoryWebGPU.cpp

Lines changed: 53 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -379,53 +379,65 @@ GraphicsAdapterInfo GetGraphicsAdapterInfo(WGPUAdapter wgpuAdapter, WGPUDevice w
379379

380380
auto CheckWebGPUFeature = [wgpuAdapter, wgpuDevice](WGPUFeatureName Feature) {
381381
return ((wgpuAdapter != nullptr && wgpuAdapterHasFeature(wgpuAdapter, Feature)) ||
382-
(wgpuDevice != nullptr && wgpuDeviceHasFeature(wgpuDevice, Feature)));
382+
(wgpuDevice != nullptr && wgpuDeviceHasFeature(wgpuDevice, Feature))) ?
383+
DEVICE_FEATURE_STATE_ENABLED :
384+
DEVICE_FEATURE_STATE_DISABLED;
383385
};
384386

385387
// Enable features
386388
{
387-
//TODO
388389
DeviceFeatures& Features{AdapterInfo.Features};
389-
Features.SeparablePrograms = DEVICE_FEATURE_STATE_ENABLED;
390-
Features.ShaderResourceQueries = DEVICE_FEATURE_STATE_ENABLED;
391-
Features.ComputeShaders = DEVICE_FEATURE_STATE_ENABLED;
392-
Features.OcclusionQueries = DEVICE_FEATURE_STATE_ENABLED;
393-
Features.DepthBiasClamp = DEVICE_FEATURE_STATE_ENABLED;
394-
Features.IndependentBlend = DEVICE_FEATURE_STATE_ENABLED;
395-
Features.DualSourceBlend = DEVICE_FEATURE_STATE_ENABLED;
396-
Features.MultiViewport = DEVICE_FEATURE_STATE_ENABLED;
397-
Features.PixelUAVWritesAndAtomics = DEVICE_FEATURE_STATE_ENABLED;
398-
Features.TextureUAVExtendedFormats = DEVICE_FEATURE_STATE_ENABLED;
399-
Features.AsyncShaderCompilation = DEVICE_FEATURE_STATE_ENABLED;
400-
401-
Features.WireframeFill = DEVICE_FEATURE_STATE_DISABLED;
402-
Features.FormattedBuffers = DEVICE_FEATURE_STATE_DISABLED;
403-
Features.ShaderResourceStaticArrays = DEVICE_FEATURE_STATE_DISABLED;
404-
Features.ShaderResourceRuntimeArrays = DEVICE_FEATURE_STATE_DISABLED;
405-
406-
if (CheckWebGPUFeature(WGPUFeatureName_DepthClipControl))
407-
Features.DepthClamp = DEVICE_FEATURE_STATE_ENABLED;
408-
409-
if (CheckWebGPUFeature(WGPUFeatureName_TimestampQuery))
410-
Features.TimestampQueries = DEVICE_FEATURE_STATE_ENABLED;
411-
412-
if (CheckWebGPUFeature(WGPUFeatureName_TextureCompressionBC))
413-
Features.TextureCompressionBC = DEVICE_FEATURE_STATE_ENABLED;
414-
415-
if (CheckWebGPUFeature(WGPUFeatureName_TextureCompressionETC2))
416-
Features.TextureCompressionETC2 = DEVICE_FEATURE_STATE_ENABLED;
417-
418-
if (CheckWebGPUFeature(WGPUFeatureName_ShaderF16))
419-
Features.ShaderFloat16 = DEVICE_FEATURE_STATE_ENABLED;
420-
421-
// WGPUFeatureName_ChromiumExperimentalTimestampQueryInsidePasses = 0x000003EE,
422-
if (CheckWebGPUFeature(WGPUFeatureName_TimestampQuery) && CheckWebGPUFeature(static_cast<WGPUFeatureName>(0x000003EE)))
423-
{
424-
Features.TimestampQueries = DEVICE_FEATURE_STATE_ENABLED;
425-
Features.DurationQueries = DEVICE_FEATURE_STATE_ENABLED;
426-
}
390+
Features.SeparablePrograms = DEVICE_FEATURE_STATE_ENABLED;
391+
Features.ShaderResourceQueries = DEVICE_FEATURE_STATE_ENABLED;
392+
Features.WireframeFill = DEVICE_FEATURE_STATE_DISABLED;
393+
Features.MultithreadedResourceCreation = DEVICE_FEATURE_STATE_DISABLED;
394+
Features.ComputeShaders = DEVICE_FEATURE_STATE_ENABLED;
395+
Features.GeometryShaders = DEVICE_FEATURE_STATE_DISABLED;
396+
Features.Tessellation = DEVICE_FEATURE_STATE_DISABLED;
397+
Features.MeshShaders = DEVICE_FEATURE_STATE_DISABLED;
398+
Features.RayTracing = DEVICE_FEATURE_STATE_DISABLED;
399+
Features.BindlessResources = DEVICE_FEATURE_STATE_DISABLED;
400+
Features.OcclusionQueries = DEVICE_FEATURE_STATE_ENABLED;
401+
Features.BinaryOcclusionQueries = DEVICE_FEATURE_STATE_DISABLED;
402+
Features.PipelineStatisticsQueries = DEVICE_FEATURE_STATE_DISABLED;
403+
Features.DepthBiasClamp = DEVICE_FEATURE_STATE_ENABLED;
404+
Features.DepthClamp = CheckWebGPUFeature(WGPUFeatureName_DepthClipControl);
405+
Features.IndependentBlend = DEVICE_FEATURE_STATE_ENABLED;
406+
Features.DualSourceBlend = CheckWebGPUFeature(WGPUFeatureName_DualSourceBlending);
407+
Features.MultiViewport = DEVICE_FEATURE_STATE_DISABLED;
408+
Features.TextureCompressionBC = CheckWebGPUFeature(WGPUFeatureName_TextureCompressionBC);
409+
Features.TextureCompressionETC2 = CheckWebGPUFeature(WGPUFeatureName_TextureCompressionETC2);
410+
Features.VertexPipelineUAVWritesAndAtomics = DEVICE_FEATURE_STATE_ENABLED;
411+
Features.PixelUAVWritesAndAtomics = DEVICE_FEATURE_STATE_ENABLED;
412+
Features.TextureUAVExtendedFormats = DEVICE_FEATURE_STATE_ENABLED;
413+
Features.ShaderFloat16 = CheckWebGPUFeature(WGPUFeatureName_ShaderF16);
414+
Features.ResourceBuffer16BitAccess = DEVICE_FEATURE_STATE_DISABLED;
415+
Features.UniformBuffer16BitAccess = DEVICE_FEATURE_STATE_DISABLED;
416+
Features.ShaderInputOutput16 = DEVICE_FEATURE_STATE_DISABLED;
417+
Features.ShaderInt8 = DEVICE_FEATURE_STATE_DISABLED;
418+
Features.ResourceBuffer8BitAccess = DEVICE_FEATURE_STATE_DISABLED;
419+
Features.UniformBuffer8BitAccess = DEVICE_FEATURE_STATE_DISABLED;
420+
Features.ShaderResourceStaticArrays = DEVICE_FEATURE_STATE_DISABLED;
421+
Features.ShaderResourceRuntimeArrays = DEVICE_FEATURE_STATE_DISABLED;
422+
Features.WaveOp = DEVICE_FEATURE_STATE_DISABLED;
423+
Features.InstanceDataStepRate = DEVICE_FEATURE_STATE_DISABLED;
424+
Features.NativeFence = DEVICE_FEATURE_STATE_DISABLED;
425+
Features.TileShaders = DEVICE_FEATURE_STATE_DISABLED;
426+
Features.TransferQueueTimestampQueries = DEVICE_FEATURE_STATE_DISABLED;
427+
Features.VariableRateShading = DEVICE_FEATURE_STATE_DISABLED;
428+
Features.SparseResources = DEVICE_FEATURE_STATE_DISABLED;
429+
Features.SubpassFramebufferFetch = DEVICE_FEATURE_STATE_DISABLED;
430+
Features.TextureComponentSwizzle = DEVICE_FEATURE_STATE_DISABLED;
431+
Features.TextureSubresourceViews = DEVICE_FEATURE_STATE_ENABLED;
432+
Features.NativeMultiDraw = DEVICE_FEATURE_STATE_DISABLED;
433+
Features.AsyncShaderCompilation = DEVICE_FEATURE_STATE_ENABLED;
434+
Features.FormattedBuffers = DEVICE_FEATURE_STATE_DISABLED;
435+
436+
Features.TimestampQueries = CheckWebGPUFeature(WGPUFeatureName_TimestampQuery);
437+
Features.DurationQueries = Features.TimestampQueries ?
438+
CheckWebGPUFeature(WGPUFeatureName_ChromiumExperimentalTimestampQueryInsidePasses) :
439+
DEVICE_FEATURE_STATE_DISABLED;
427440
}
428-
429441
ASSERT_SIZEOF(DeviceFeatures, 47, "Did you add a new feature to DeviceFeatures? Please handle its status here.");
430442

431443
WGPUSupportedLimits wgpuSupportedLimits{};

0 commit comments

Comments
 (0)