Skip to content

Commit

Permalink
Update gpuweb: Add "read-write" and "read-only" as new storage textur…
Browse files Browse the repository at this point in the history
…e access
  • Loading branch information
Jiawei-Shao committed Nov 15, 2023
1 parent 8804f74 commit 73e23a0
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 169 deletions.
5 changes: 4 additions & 1 deletion dist/index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -261,7 +261,10 @@ type GPUStencilOperation =
| "increment-wrap"
| "decrement-wrap";
type GPUStorageTextureAccess =
"write-only";

| "write-only"
| "read-only"
| "read-write";
type GPUStoreOp =

| "store"
Expand Down
197 changes: 30 additions & 167 deletions generated/index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,15 +22,6 @@ type GPUExtent3D =
| GPUExtent3DDict;
type GPUFlagsConstant =
number;
type GPUImageCopyExternalImageSource =

| ImageBitmap
| ImageData
| HTMLImageElement
| HTMLVideoElement
| VideoFrame
| HTMLCanvasElement
| OffscreenCanvas;
type GPUIndex32 =
number;
type GPUIntegerCoordinate =
Expand Down Expand Up @@ -207,7 +198,10 @@ type GPUStencilOperation =
| "increment-wrap"
| "decrement-wrap";
type GPUStorageTextureAccess =
"write-only";

| "write-only"
| "read-only"
| "read-write";
type GPUStoreOp =

| "store"
Expand Down Expand Up @@ -767,134 +761,6 @@ interface GPUFragmentState
targets: Array<GPUColorTargetState | null>;
}

interface GPUImageCopyBuffer
extends GPUImageDataLayout {
/**
* A buffer which either contains image data to be copied or will store the image data being
* copied, depending on the method it is being passed to.
*/
buffer: GPUBuffer;
}

interface GPUImageCopyExternalImage {
/**
* The source of the image copy. The copy source data is captured at the moment that
* {@link GPUQueue#copyExternalImageToTexture} is issued. Source size is defined by source
* type, given by this table:
*
* <table class=data>
* <thead>
* <tr>
* <th>Source type
* <th>Width
* <th>Height
* </thead>
* <tbody>
* <tr>
* <td>{@link ImageBitmap}
* <td>{@link ImageBitmap#width|ImageBitmap.width}
* <td>{@link ImageBitmap#height|ImageBitmap.height}
* <tr>
* <td>{@link HTMLVideoElement}
* <td>video/intrinsic width|intrinsic width of the frame
* <td>video/intrinsic height|intrinsic height of the frame
* <tr>
* <td>{@link VideoFrame}
* <td>{@link VideoFrame#codedWidth|VideoFrame.codedWidth}
* <td>{@link VideoFrame#codedHeight|VideoFrame.codedHeight}
* <tr>
* <td>{@link HTMLCanvasElement}
* <td>{@link HTMLCanvasElement#width|HTMLCanvasElement.width}
* <td>{@link HTMLCanvasElement#height|HTMLCanvasElement.height}
* <tr>
* <td>{@link OffscreenCanvas}
* <td>{@link OffscreenCanvas#width|OffscreenCanvas.width}
* <td>{@link OffscreenCanvas#height|OffscreenCanvas.height}
* </tbody>
* </table>
*/
source: GPUImageCopyExternalImageSource;
/**
* Defines the origin of the copy - the minimum (top-left) corner of the source sub-region to copy from.
* Together with `copySize`, defines the full copy sub-region.
*/
origin?: GPUOrigin2D;
/**
* Describes whether the source image is vertically flipped, or not.
* If this option is set to `true`, the copy is flipped vertically: the bottom row of the source
* region is copied into the first row of the destination region, and so on.
* The {@link GPUImageCopyExternalImage#origin} option is still relative to the top-left corner
* of the source image, increasing downward.
*/
flipY?: boolean;
}

interface GPUImageCopyTexture {
/**
* Texture to copy to/from.
*/
texture: GPUTexture;
/**
* Mip-map level of the {@link GPUImageCopyTexture#texture} to copy to/from.
*/
mipLevel?: GPUIntegerCoordinate;
/**
* Defines the origin of the copy - the minimum corner of the texture sub-region to copy to/from.
* Together with `copySize`, defines the full copy sub-region.
*/
origin?: GPUOrigin3D;
/**
* Defines which aspects of the {@link GPUImageCopyTexture#texture} to copy to/from.
*/
aspect?: GPUTextureAspect;
}

interface GPUImageCopyTextureTagged
extends GPUImageCopyTexture {
/**
* Describes the color space and encoding used to encode data into the destination texture.
* This [[#color-space-conversions|may result]] in values outside of the range [0, 1]
* being written to the target texture, if its format can represent them.
* Otherwise, the results are clamped to the target texture format's range.
* Note:
* If {@link GPUImageCopyTextureTagged#colorSpace} matches the source image,
* conversion may not be necessary. See [[#color-space-conversion-elision]].
*/
colorSpace?: PredefinedColorSpace;
/**
* Describes whether the data written into the texture should have its RGB channels
* premultiplied by the alpha channel, or not.
* If this option is set to `true` and the {@link GPUImageCopyExternalImage#source} is also
* premultiplied, the source RGB values must be preserved even if they exceed their
* corresponding alpha values.
* Note:
* If {@link GPUImageCopyTextureTagged#premultipliedAlpha} matches the source image,
* conversion may not be necessary. See [[#color-space-conversion-elision]].
*/
premultipliedAlpha?: boolean;
}

interface GPUImageDataLayout {
/**
* The offset, in bytes, from the beginning of the image data source (such as a
* {@link GPUImageCopyBuffer#buffer|GPUImageCopyBuffer.buffer}) to the start of the image data
* within that source.
*/
offset?: GPUSize64;
/**
* The stride, in bytes, between the beginning of each block row and the subsequent block row.
* Required if there are multiple block rows (i.e. the copy height or depth is more than one block).
*/
bytesPerRow?: GPUSize32;
/**
* Number of block rows per single image of the texture.
* {@link GPUImageDataLayout#rowsPerImage} &times;
* {@link GPUImageDataLayout#bytesPerRow} is the stride, in bytes, between the beginning of each image of data and the subsequent image.
* Required if there are multiple images (i.e. the copy depth is more than one).
*/
rowsPerImage?: GPUSize32;
}

interface GPUMultisampleState {
/**
* Number of samples per pixel. This {@link GPURenderPipeline} will be compatible only
Expand Down Expand Up @@ -1104,6 +970,11 @@ interface GPURenderPassColorAttachment {
* color attachment.
*/
view: GPUTextureView;
/**
* Indicates the depth slice index of {@link GPUTextureViewDimension#"3d"} {@link GPURenderPassColorAttachment#view}
* that will be output to for this color attachment.
*/
depthSlice?: GPUIntegerCoordinate;
/**
* A {@link GPUTextureView} describing the texture subresource that will receive the resolved
* output for this color attachment if {@link GPURenderPassColorAttachment#view} is
Expand Down Expand Up @@ -1341,6 +1212,7 @@ interface GPUSamplerDescriptor
}

interface GPUShaderModuleCompilationHint {
entryPoint: string;
/**
* A {@link GPUPipelineLayout} that the {@link GPUShaderModule} may be used with in a future
* {@link GPUDevice#createComputePipeline()} or {@link GPUDevice#createRenderPipeline} call.
Expand Down Expand Up @@ -1368,23 +1240,29 @@ interface GPUShaderModuleDescriptor
*/
sourceMap?: any;
/**
* If defined maps an entry point name from the shader to a {@link GPUShaderModuleCompilationHint}.
* No validation is performed with any of these {@link GPUShaderModuleCompilationHint}.
* Implementations should use any information present in the {@link GPUShaderModuleCompilationHint}
* A list of {@link GPUShaderModuleCompilationHint}s.
* Any hint provided by an application **should** contain information about one entry point of
* a pipeline that will eventually be created from the entry point.
* Implementations **should** use any information present in the {@link GPUShaderModuleCompilationHint}
* to perform as much compilation as is possible within {@link GPUDevice#createShaderModule}.
* Entry point names follow the rules defined in WGSL identifier comparison.
* Note: Supplying information in {@link GPUShaderModuleDescriptor#hints} does not have any
* observable effect, other than performance. Because a single shader module can hold
* Aside from type-checking, these hints are not validated in any way.
* <div class=note heading>
* Supplying information in {@link GPUShaderModuleDescriptor#compilationHints} does not have any
* observable effect, other than performance. It may be detrimental to performance to
* provide hints for pipelines that never end up being created.
* Because a single shader module can hold
* multiple entry points, and multiple pipelines can be created from a single shader
* module, it can be more performant for an implementation to do as much compilation as
* possible once in {@link GPUDevice#createShaderModule} rather than multiple times in
* the multiple calls to {@link GPUDevice#createComputePipeline} /
* the multiple calls to {@link GPUDevice#createComputePipeline} or
* {@link GPUDevice#createRenderPipeline}.
* </div>
* Note:
* Hints are not validated in an observable way, but user agents **may** surface identifiable
* errors (like unknown entry point names or incompatible pipeline layouts) to developers,
* for example in the browser developer console.
*/
hints?: Record<
string,
GPUShaderModuleCompilationHint
>;
compilationHints?: Array<GPUShaderModuleCompilationHint>;
}

interface GPUStencilFaceState {
Expand Down Expand Up @@ -1413,9 +1291,6 @@ interface GPUStencilFaceState {
interface GPUStorageTextureBindingLayout {
/**
* The access mode for this binding, indicating readability and writability.
* Note:
* There is currently only one access mode, {@link GPUStorageTextureAccess#"write-only"},
* but this will expand in the future.
*/
access?: GPUStorageTextureAccess;
/**
Expand Down Expand Up @@ -1476,8 +1351,7 @@ interface GPUTextureDescriptor
* Specifies what view {@link GPUTextureViewDescriptor#format} values will be allowed when calling
* {@link GPUTexture#createView} on this texture (in addition to the texture's actual
* {@link GPUTextureDescriptor#format}).
* <div class=note>
* Note:
* <div class=note heading>
* Adding a format to this list may have a significant performance impact, so it is best
* to avoid adding formats unnecessarily.
* The actual performance impact is highly dependent on the target system; developers must
Expand Down Expand Up @@ -2051,17 +1925,6 @@ interface GPUCommandEncoder
offset?: GPUSize64,
size?: GPUSize64
): undefined;
/**
* Writes a timestamp value into a querySet when all previous commands have completed executing.
* Note: Timestamp query values are written in nanoseconds, but how the value is determined is
* implementation-defined and may not increase monotonically. See [[#timestamp]] for details.
* @param querySet - The query set that will store the timestamp values.
* @param queryIndex - The index of the query in the query set.
*/
writeTimestamp(
querySet: GPUQuerySet,
queryIndex: GPUSize32
): undefined;
/**
* Resolves query results from a {@link GPUQuerySet} out into a range of a {@link GPUBuffer}.
* querySet:
Expand Down Expand Up @@ -2116,7 +1979,7 @@ interface GPUCompilationMessage {
* Note: The {@link GPUCompilationMessage#message} should follow the best practices for language
* and direction information. This includes making use of any future standards which may
* emerge regarding the reporting of string language and direction metadata.
* <p class="note editorial">Editorial:
* <p class="note editorial"><span class=marker>Editorial note:</span>
* At the time of this writing, no language/direction recommendation is available that provides
* compatibility and consistency with legacy APIs, but when there is, adopt it formally.
*/
Expand Down Expand Up @@ -2436,7 +2299,7 @@ interface GPUError {
* Note: The {@link GPUError#message} should follow the best practices for language and
* direction information. This includes making use of any future standards which may emerge
* regarding the reporting of string language and direction metadata.
* <p class="note editorial">Editorial:
* <p class="note editorial"><span class=marker>Editorial note:</span>
* At the time of this writing, no language/direction recommendation is available that provides
* compatibility and consistency with legacy APIs, but when there is, adopt it formally.
*/
Expand Down
2 changes: 1 addition & 1 deletion gpuweb

0 comments on commit 73e23a0

Please sign in to comment.