From 9b9b4f0f081cbd4ba6a18e31af8adb5bd12c885c Mon Sep 17 00:00:00 2001 From: Jiawei Shao Date: Wed, 15 Jan 2025 10:36:50 +0800 Subject: [PATCH 1/3] Allow `index < limits.maxBindGroups` in `getBindGroupLayout()` This patch relaxes the check on the parameter `index` in `getBindGroupLayout()` by allowing `index < limits.maxBindGroups` instead of only limiting `index` must be less than the array size of the bind group layouts used in the creation of the pipeline. --- spec/index.bs | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/spec/index.bs b/spec/index.bs index c286e5c7b4..d49eb0451c 100644 --- a/spec/index.bs +++ b/spec/index.bs @@ -6590,9 +6590,11 @@ pipeline, and have the following members: [=Device timeline=] |initialization steps|: 1. Let |limits| be |this|.{{GPUObjectBase/[[device]]}}.{{device/[[limits]]}}. - 1. Let |bindGroupLayouts| be a copy of |descriptor|.{{GPUPipelineLayoutDescriptor/bindGroupLayouts}}. - 1. For each |i| in the [=list/get the indices|indices=] of |bindGroupLayouts|: - 1. If |bindGroupLayouts|[|i|] is not `null` and + 1. Let |bindGroupLayouts| be a [=list=] of `null` {{GPUBindGroupLayout}}s with [=list/size=] + equal to |limits|.{{supported limits/maxBindGroups}}. + 1. For each |i| in the [=list/get the indices|indices=] of |descriptor|.{{GPUPipelineLayoutDescriptor/bindGroupLayouts}}: + 1. Set |bindGroupLayouts|[|i|] to ||descriptor|.{{GPUPipelineLayoutDescriptor/bindGroupLayouts}}|[|i|]. + 1. If |bindGroupLayouts|[|i|] is `undefined` or |bindGroupLayouts|[|i|] is not `null` and |bindGroupLayouts|[|i|].{{GPUBindGroupLayout/[[descriptor]]}}.{{GPUBindGroupLayoutDescriptor/entries}} is [=list/empty=], set |bindGroupLayouts|[|i|] to `null`. 1. Let |allEntries| be the result of concatenating @@ -7230,8 +7232,7 @@ interface mixin GPUPipelineBase {
- |this| must be [$valid$]. - - |index| < the [=list/size=] of - |this|.{{GPUPipelineBase/[[layout]]}}.{{GPUPipelineLayout/[[bindGroupLayouts]]}} + - |index| < |limits|.{{supported limits/maxBindGroups}}.
1. Initialize |layout| so it is a copy of From f8a2c1c207e023805afd266d3f3d5782a0fa26a3 Mon Sep 17 00:00:00 2001 From: Jiawei Shao Date: Wed, 15 Jan 2025 11:23:44 +0800 Subject: [PATCH 2/3] Fix build error --- spec/index.bs | 1 + 1 file changed, 1 insertion(+) diff --git a/spec/index.bs b/spec/index.bs index d49eb0451c..714e7a0005 100644 --- a/spec/index.bs +++ b/spec/index.bs @@ -7227,6 +7227,7 @@ interface mixin GPUPipelineBase {
[=Device timeline=] |initialization steps|: + 1. Let |limits| be |this|.{{GPUObjectBase/[[device]]}}.{{device/[[limits]]}}. 1. If any of the following conditions are unsatisfied [$generate a validation error$], [$invalidate$] |layout| and return. From ae11dcd7a1de0856c110e00564c267ba730e4ae8 Mon Sep 17 00:00:00 2001 From: Jiawei Shao Date: Mon, 20 Jan 2025 14:51:56 +0800 Subject: [PATCH 3/3] Address reviewer's comments --- spec/index.bs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/spec/index.bs b/spec/index.bs index 0620bb4027..fba1283975 100644 --- a/spec/index.bs +++ b/spec/index.bs @@ -6622,11 +6622,11 @@ pipeline, and have the following members: 1. Let |limits| be |this|.{{GPUObjectBase/[[device]]}}.{{device/[[limits]]}}. 1. Let |bindGroupLayouts| be a [=list=] of `null` {{GPUBindGroupLayout}}s with [=list/size=] equal to |limits|.{{supported limits/maxBindGroups}}. - 1. For each |i| in the [=list/get the indices|indices=] of |descriptor|.{{GPUPipelineLayoutDescriptor/bindGroupLayouts}}: - 1. Set |bindGroupLayouts|[|i|] to ||descriptor|.{{GPUPipelineLayoutDescriptor/bindGroupLayouts}}|[|i|]. - 1. If |bindGroupLayouts|[|i|] is `undefined` or |bindGroupLayouts|[|i|] is not `null` and - |bindGroupLayouts|[|i|].{{GPUBindGroupLayout/[[descriptor]]}}.{{GPUBindGroupLayoutDescriptor/entries}} - is [=list/empty=], set |bindGroupLayouts|[|i|] to `null`. + 1. [=list/For each=] |bindGroupLayout| at index |i| in |descriptor|.{{GPUPipelineLayoutDescriptor/bindGroupLayouts}}: + 1. If |bindGroupLayout| is not `null` and + |bindGroupLayout|.{{GPUBindGroupLayout/[[descriptor]]}}.{{GPUBindGroupLayoutDescriptor/entries}} + is not [=list/empty=]: + 1. Set |bindGroupLayouts|[|i|] to |bindGroupLayout|. 1. Let |allEntries| be the result of concatenating |bgl|.{{GPUBindGroupLayout/[[descriptor]]}}.{{GPUBindGroupLayoutDescriptor/entries}} for all non-`null` |bgl| in |bindGroupLayouts|.