mirror of
https://github.com/encounter/dawn-cmake.git
synced 2025-12-17 17:05:31 +00:00
Raise maxStorageTexturesPerShaderStage to 8
The higher tier for this limit is available on all D3D12, all Metal, and most Vulkan devices. Bug: dawn:685 Change-Id: Ic2a39ad7908ea178e7aac48b7bb54b262d7039cf Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/121543 Kokoro: Kokoro <noreply+kokoro@google.com> Reviewed-by: Shrek Shao <shrekshao@google.com> Reviewed-by: Corentin Wallez <cwallez@chromium.org> Commit-Queue: Austin Eng <enga@chromium.org>
This commit is contained in:
@@ -112,80 +112,85 @@ MaybeError ValidateBindingCounts(const CombinedLimits& limits, const BindingCoun
|
||||
limits.v1.maxDynamicStorageBuffersPerPipelineLayout);
|
||||
|
||||
for (SingleShaderStage stage : IterateStages(kAllStages)) {
|
||||
DAWN_INVALID_IF(
|
||||
bindingCounts.perStage[stage].sampledTextureCount > kMaxSampledTexturesPerShaderStage,
|
||||
"The number of sampled textures (%u) in the %s stage exceeds the maximum "
|
||||
"per-stage limit (%u).",
|
||||
bindingCounts.perStage[stage].sampledTextureCount, stage,
|
||||
kMaxSampledTexturesPerShaderStage);
|
||||
DAWN_INVALID_IF(bindingCounts.perStage[stage].sampledTextureCount >
|
||||
limits.v1.maxSampledTexturesPerShaderStage,
|
||||
"The number of sampled textures (%u) in the %s stage exceeds the maximum "
|
||||
"per-stage limit (%u).",
|
||||
bindingCounts.perStage[stage].sampledTextureCount, stage,
|
||||
limits.v1.maxSampledTexturesPerShaderStage);
|
||||
|
||||
// The per-stage number of external textures is bound by the maximum sampled textures
|
||||
// per stage.
|
||||
DAWN_INVALID_IF(bindingCounts.perStage[stage].externalTextureCount >
|
||||
kMaxSampledTexturesPerShaderStage / kSampledTexturesPerExternalTexture,
|
||||
"The number of external textures (%u) in the %s stage exceeds the maximum "
|
||||
"per-stage limit (%u).",
|
||||
bindingCounts.perStage[stage].externalTextureCount, stage,
|
||||
kMaxSampledTexturesPerShaderStage / kSampledTexturesPerExternalTexture);
|
||||
DAWN_INVALID_IF(
|
||||
bindingCounts.perStage[stage].externalTextureCount >
|
||||
limits.v1.maxSampledTexturesPerShaderStage / kSampledTexturesPerExternalTexture,
|
||||
"The number of external textures (%u) in the %s stage exceeds the maximum "
|
||||
"per-stage limit (%u).",
|
||||
bindingCounts.perStage[stage].externalTextureCount, stage,
|
||||
limits.v1.maxSampledTexturesPerShaderStage / kSampledTexturesPerExternalTexture);
|
||||
|
||||
DAWN_INVALID_IF(
|
||||
bindingCounts.perStage[stage].sampledTextureCount +
|
||||
(bindingCounts.perStage[stage].externalTextureCount *
|
||||
kSampledTexturesPerExternalTexture) >
|
||||
kMaxSampledTexturesPerShaderStage,
|
||||
limits.v1.maxSampledTexturesPerShaderStage,
|
||||
"The combination of sampled textures (%u) and external textures (%u) in the %s "
|
||||
"stage exceeds the maximum per-stage limit (%u).",
|
||||
bindingCounts.perStage[stage].sampledTextureCount,
|
||||
bindingCounts.perStage[stage].externalTextureCount, stage,
|
||||
kMaxSampledTexturesPerShaderStage);
|
||||
limits.v1.maxSampledTexturesPerShaderStage);
|
||||
|
||||
DAWN_INVALID_IF(
|
||||
bindingCounts.perStage[stage].samplerCount > kMaxSamplersPerShaderStage,
|
||||
bindingCounts.perStage[stage].samplerCount > limits.v1.maxSamplersPerShaderStage,
|
||||
"The number of samplers (%u) in the %s stage exceeds the maximum per-stage limit "
|
||||
"(%u).",
|
||||
bindingCounts.perStage[stage].samplerCount, stage, kMaxSamplersPerShaderStage);
|
||||
bindingCounts.perStage[stage].samplerCount, stage, limits.v1.maxSamplersPerShaderStage);
|
||||
|
||||
DAWN_INVALID_IF(
|
||||
bindingCounts.perStage[stage].samplerCount +
|
||||
(bindingCounts.perStage[stage].externalTextureCount *
|
||||
kSamplersPerExternalTexture) >
|
||||
kMaxSamplersPerShaderStage,
|
||||
limits.v1.maxSamplersPerShaderStage,
|
||||
"The combination of samplers (%u) and external textures (%u) in the %s stage "
|
||||
"exceeds the maximum per-stage limit (%u).",
|
||||
bindingCounts.perStage[stage].samplerCount,
|
||||
bindingCounts.perStage[stage].externalTextureCount, stage, kMaxSamplersPerShaderStage);
|
||||
bindingCounts.perStage[stage].externalTextureCount, stage,
|
||||
limits.v1.maxSamplersPerShaderStage);
|
||||
|
||||
DAWN_INVALID_IF(
|
||||
bindingCounts.perStage[stage].storageBufferCount > kMaxStorageBuffersPerShaderStage,
|
||||
bindingCounts.perStage[stage].storageBufferCount >
|
||||
limits.v1.maxStorageBuffersPerShaderStage,
|
||||
"The number of storage buffers (%u) in the %s stage exceeds the maximum per-stage "
|
||||
"limit (%u).",
|
||||
bindingCounts.perStage[stage].storageBufferCount, stage,
|
||||
kMaxStorageBuffersPerShaderStage);
|
||||
limits.v1.maxStorageBuffersPerShaderStage);
|
||||
|
||||
DAWN_INVALID_IF(
|
||||
bindingCounts.perStage[stage].storageTextureCount > kMaxStorageTexturesPerShaderStage,
|
||||
bindingCounts.perStage[stage].storageTextureCount >
|
||||
limits.v1.maxStorageTexturesPerShaderStage,
|
||||
"The number of storage textures (%u) in the %s stage exceeds the maximum per-stage "
|
||||
"limit (%u).",
|
||||
bindingCounts.perStage[stage].storageTextureCount, stage,
|
||||
kMaxStorageTexturesPerShaderStage);
|
||||
limits.v1.maxStorageTexturesPerShaderStage);
|
||||
|
||||
DAWN_INVALID_IF(
|
||||
bindingCounts.perStage[stage].uniformBufferCount > kMaxUniformBuffersPerShaderStage,
|
||||
bindingCounts.perStage[stage].uniformBufferCount >
|
||||
limits.v1.maxUniformBuffersPerShaderStage,
|
||||
"The number of uniform buffers (%u) in the %s stage exceeds the maximum per-stage "
|
||||
"limit (%u).",
|
||||
bindingCounts.perStage[stage].uniformBufferCount, stage,
|
||||
kMaxUniformBuffersPerShaderStage);
|
||||
limits.v1.maxUniformBuffersPerShaderStage);
|
||||
|
||||
DAWN_INVALID_IF(
|
||||
bindingCounts.perStage[stage].uniformBufferCount +
|
||||
(bindingCounts.perStage[stage].externalTextureCount *
|
||||
kUniformsPerExternalTexture) >
|
||||
kMaxUniformBuffersPerShaderStage,
|
||||
limits.v1.maxUniformBuffersPerShaderStage,
|
||||
"The combination of uniform buffers (%u) and external textures (%u) in the %s "
|
||||
"stage exceeds the maximum per-stage limit (%u).",
|
||||
bindingCounts.perStage[stage].uniformBufferCount,
|
||||
bindingCounts.perStage[stage].externalTextureCount, stage,
|
||||
kMaxUniformBuffersPerShaderStage);
|
||||
limits.v1.maxUniformBuffersPerShaderStage);
|
||||
}
|
||||
|
||||
return {};
|
||||
|
||||
@@ -38,6 +38,11 @@
|
||||
#define LIMITS_RESOURCE_BINDINGS(X) \
|
||||
X(Maximum, maxDynamicUniformBuffersPerPipelineLayout, 8, 10) \
|
||||
X(Maximum, maxDynamicStorageBuffersPerPipelineLayout, 4, 8) \
|
||||
X(Maximum, maxSampledTexturesPerShaderStage, 16, 16) \
|
||||
X(Maximum, maxSamplersPerShaderStage, 16, 16) \
|
||||
X(Maximum, maxStorageBuffersPerShaderStage, 8, 8) \
|
||||
X(Maximum, maxStorageTexturesPerShaderStage, 4, 8) \
|
||||
X(Maximum, maxUniformBuffersPerShaderStage, 12, 12)
|
||||
|
||||
// TODO(crbug.com/dawn/685):
|
||||
// These limits don't have tiers yet. Define two tiers with the same values since the macros
|
||||
@@ -49,11 +54,6 @@
|
||||
X(Maximum, maxTextureArrayLayers, 256, 256) \
|
||||
X(Maximum, maxBindGroups, 4, 4) \
|
||||
X(Maximum, maxBindingsPerBindGroup, 640, 640) \
|
||||
X(Maximum, maxSampledTexturesPerShaderStage, 16, 16) \
|
||||
X(Maximum, maxSamplersPerShaderStage, 16, 16) \
|
||||
X(Maximum, maxStorageBuffersPerShaderStage, 8, 8) \
|
||||
X(Maximum, maxStorageTexturesPerShaderStage, 4, 4) \
|
||||
X(Maximum, maxUniformBuffersPerShaderStage, 12, 12) \
|
||||
X(Maximum, maxUniformBufferBindingSize, 65536, 65536) \
|
||||
X(Alignment, minUniformBufferOffsetAlignment, 256, 256) \
|
||||
X(Alignment, minStorageBufferOffsetAlignment, 256, 256) \
|
||||
|
||||
Reference in New Issue
Block a user