Conversation
| required GPULoadOp depthLoadOp; | ||
| required GPUStoreOp depthStoreOp; | ||
| required float clearDepth; | ||
| float clearDepth = 1.0; |
There was a problem hiding this comment.
Dzmitry was going to have an alternative proposal for this (so clearDepth is not specified when it's not used). Can we defer this one?
|
lgtm. My only comment is that it's unintuitive that the defaults would be different for the different storeOps (even though it makes more sense for this one to have a default than for the others). But since this one has a default and the others don't, it's probably fine. |
|
Somewhat conflicts with #276 Also, I agree with @kainino0x that it would be nicer to have color/depth consistent w.r.t store op defaults. |
2480b7e to
61163f8
Compare
|
Rebased over #365. |
beaufortfrancois
left a comment
There was a problem hiding this comment.
I think required should not be required.
|
|
||
| required GPULoadOp loadOp; | ||
| required GPUStoreOp storeOp; | ||
| required GPUStoreOp storeOp = "store"; |
There was a problem hiding this comment.
| required GPUStoreOp storeOp = "store"; | |
| GPUStoreOp storeOp = "store"; |
| required GPULoadOp depthLoadOp; | ||
| required GPUStoreOp depthStoreOp; | ||
| required float clearDepth; | ||
| required float clearDepth = 1.0; |
There was a problem hiding this comment.
| required float clearDepth = 1.0; | |
| float clearDepth = 1.0; |
There was a problem hiding this comment.
After #283, I think this line becomes obsolete.
There was a problem hiding this comment.
If all that's left is GPUStoreOp storeOp = "store";, we should merge. What do you think @kainino0x @kvark ?
There was a problem hiding this comment.
Let me upload a new PR for just that change since this one is stale.
|
IIRC the consensus was to have the clear value being optional, with default being nil instead of a concrete value. Defaulting to 1.0 for the depth is controversial. |
* Add a component type for GPUBGLBinding compatiblity (#384) In shaders there are several texture types for each dimensionality depending on their component type. It can be either float, uint or sint, with maybe in the future depth/stencil if WebGPU allows reading such textures. The component type of a GPUTextureView's format must match the component type of its binding in the shader module. This is for several reasons: - Vulkan requires the following: "The Sampled Type of an OpTypeImage declaration must match the numeric format of the corresponding resource in type and signedness, as shown in the SPIR-V Sampled Type column of the Interpretation of Numeric Format table, or the values obtained by reading or sampling from this image are undefined." - It is also required in OpenGL for the texture units to be complete, a uint or sint texture unit used with a non-nearest sampler is incomplete and returns black texels. Similar constraints must exist in other APIs. To encode this compatibility constraint, a new member is added to GPUBindGroupLayoutBinding that is a new enum GPUTextureComponentType that give the component type of the texture. * Make GPUBGLBinding.textureDimension default to 2d. This is the most common case and avoids having an optional dictionary member with no default value (but that still requires a value for texture bindings). * Add a component type for GPUBGLBinding compatiblity (#384) In shaders there are several texture types for each dimensionality depending on their component type. It can be either float, uint or sint, with maybe in the future depth/stencil if WebGPU allows reading such textures. The component type of a GPUTextureView's format must match the component type of its binding in the shader module. This is for several reasons: - Vulkan requires the following: "The Sampled Type of an OpTypeImage declaration must match the numeric format of the corresponding resource in type and signedness, as shown in the SPIR-V Sampled Type column of the Interpretation of Numeric Format table, or the values obtained by reading or sampling from this image are undefined." - It is also required in OpenGL for the texture units to be complete, a uint or sint texture unit used with a non-nearest sampler is incomplete and returns black texels. Similar constraints must exist in other APIs. To encode this compatibility constraint, a new member is added to GPUBindGroupLayoutBinding that is a new enum GPUTextureComponentType that give the component type of the texture. * Make GPUBGLBinding.textureDimension default to 2d. This is the most common case and avoids having an optional dictionary member with no default value (but that still requires a value for texture bindings). * unifinished createBindGroupLayout algorithm * draft of BindGroupLayout details * draft of BindGroupLayout details * polish before PR * fix typo * replace u32/i32/u64 with normal int types or specific typedefs (#423) * Do not require vertexInput in GPURenderPipelineDescriptor (#378) * Add a default for GPURenderPassColorAttachmentDescriptor.storeOp (#376) Supersedes #268. * Initial spec for GPUDevice.createBuffer (#419) * Start writing spec for device/adapter, introduce internal objects (#422) * Move validation rules out of algorithm body and better describe GPUBindGroupLayout internal slots * Include limits for dynamic offset buffers * Rename 'dynamic' boolean to 'hasDynamicOffsets' * Fix indentation for ci bot * More indentation errors * Fix var typos * Fix method definition * Fix enum references * Missing </dfn> tag * Missing </dfn> tag * Remove bad [= =] * Fix old constant name * Half-formed new validation rule structure for createBindGroupLayout * An interface -> the interface * Remove old 'layout binding' reference * fix device lost validation reference * Fix 'dynamic' typo
The
storeOpmake sense to be"store"for two reasons:depthStoreOporstencilStoreOp. When authors hook up multisampling, they can also explicitly disable storing, if they desire.Similarly for
clearDepth. The default is what most authors want, which is a normal-acting depth buffer. If developers want to do something more complicated, they can modify theclearDepththemselves.Preview | Diff