Skip to content

Commit 040cee2

Browse files
author
Mike Solomon
committed
Adds render pass encoder
1 parent 88c17bd commit 040cee2

9 files changed

Lines changed: 1107 additions & 20 deletions

src/Web/GPU/GPUCommandEncoder.purs

Lines changed: 51 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,7 @@ module Web.GPU.GPUCommandEncoder
1515
, pushDebugGroup
1616
, resolveQuerySet
1717
, writeTimestamp
18-
)
19-
where
18+
) where
2019

2120
import Prelude
2221

@@ -54,7 +53,14 @@ foreign import copyBufferToBufferImpl
5453
-> GPUSize64
5554
-> Effect Unit
5655

57-
copyBufferToBuffer :: GPUCommandEncoder -> GPUBuffer -> Int -> GPUBuffer -> Int -> Int -> Effect Unit
56+
copyBufferToBuffer
57+
:: GPUCommandEncoder
58+
-> GPUBuffer
59+
-> Int
60+
-> GPUBuffer
61+
-> Int
62+
-> Int
63+
-> Effect Unit
5864
copyBufferToBuffer = copyBufferToBufferImpl
5965

6066
foreign import copyBufferToTextureImpl
@@ -64,27 +70,42 @@ foreign import copyBufferToTextureImpl
6470
-> GPUExtent3D
6571
-> Effect Unit
6672

67-
copyBufferToTexture GPUCommandEncoder GPUImageCopyBuffer GPUImageCopyTexture GPUExtent3D Effect Unit
73+
copyBufferToTexture
74+
GPUCommandEncoder
75+
GPUImageCopyBuffer
76+
GPUImageCopyTexture
77+
GPUExtent3D
78+
Effect Unit
6879
copyBufferToTexture = copyBufferToTextureImpl
6980

7081
foreign import copyTextureToBufferImpl
7182
:: GPUCommandEncoder
72-
-> GPUImageCopyTexture
73-
-> GPUImageCopyBuffer
83+
-> GPUImageCopyTexture
84+
-> GPUImageCopyBuffer
7485
-> GPUExtent3D
7586
-> Effect Unit
7687

77-
copyTextureToBuffer :: GPUCommandEncoder -> GPUImageCopyTexture -> GPUImageCopyBuffer -> GPUExtent3D -> Effect Unit
88+
copyTextureToBuffer
89+
:: GPUCommandEncoder
90+
-> GPUImageCopyTexture
91+
-> GPUImageCopyBuffer
92+
-> GPUExtent3D
93+
-> Effect Unit
7894
copyTextureToBuffer = copyTextureToBufferImpl
7995

8096
foreign import copyTextureToTextureImpl
8197
:: GPUCommandEncoder
82-
-> GPUImageCopyTexture
83-
-> GPUImageCopyTexture
98+
-> GPUImageCopyTexture
99+
-> GPUImageCopyTexture
84100
-> GPUExtent3D
85101
-> Effect Unit
86102

87-
copyTextureToTexture :: GPUCommandEncoder -> GPUImageCopyTexture -> GPUImageCopyTexture -> GPUExtent3D -> Effect Unit
103+
copyTextureToTexture
104+
:: GPUCommandEncoder
105+
-> GPUImageCopyTexture
106+
-> GPUImageCopyTexture
107+
-> GPUExtent3D
108+
-> Effect Unit
88109
copyTextureToTexture = copyTextureToTextureImpl
89110

90111
foreign import clearBufferImpl
@@ -120,15 +141,16 @@ foreign import clearBufferWithOffsetAndSizeImpl
120141
-> GPUSize64
121142
-> Effect Unit
122143

123-
clearBufferWithOffsetAndSize :: GPUCommandEncoder -> GPUBuffer -> Int -> Int -> Effect Unit
144+
clearBufferWithOffsetAndSize
145+
:: GPUCommandEncoder -> GPUBuffer -> Int -> Int -> Effect Unit
124146
clearBufferWithOffsetAndSize = clearBufferWithOffsetAndSizeImpl
125147

126148
foreign import writeTimestampImpl
127149
:: GPUCommandEncoder -> GPUQuerySet -> GPUSize32 -> Effect Unit
150+
128151
writeTimestamp :: GPUCommandEncoder -> GPUQuerySet -> Int -> Effect Unit
129152
writeTimestamp = writeTimestampImpl
130153

131-
132154
foreign import resolveQuerySetImpl
133155
:: GPUCommandEncoder
134156
-> GPUQuerySet
@@ -137,19 +159,34 @@ foreign import resolveQuerySetImpl
137159
-> GPUBuffer
138160
-> GPUSize64
139161
-> Effect Unit
140-
resolveQuerySet :: GPUCommandEncoder -> GPUQuerySet -> Int -> Int -> GPUBuffer -> Int -> Effect Unit
162+
163+
resolveQuerySet
164+
:: GPUCommandEncoder
165+
-> GPUQuerySet
166+
-> Int
167+
-> Int
168+
-> GPUBuffer
169+
-> Int
170+
-> Effect Unit
141171
resolveQuerySet = resolveQuerySetImpl
142172

143173
foreign import finishImpl :: GPUCommandEncoder -> Effect GPUCommandBuffer
174+
144175
finish :: GPUCommandEncoder -> Effect GPUCommandBuffer
145176
finish = finishImpl
146177

147178
foreign import pushDebugGroupImpl :: GPUCommandEncoder -> String -> Effect Unit
179+
148180
pushDebugGroup :: GPUCommandEncoder -> String -> Effect Unit
149181
pushDebugGroup = pushDebugGroupImpl
182+
150183
foreign import popDebugGroupImpl :: GPUCommandEncoder -> Effect Unit
184+
151185
popDebugGroup :: GPUCommandEncoder -> Effect Unit
152186
popDebugGroup = popDebugGroupImpl
153-
foreign import insertDebugMarkerImpl :: GPUCommandEncoder -> String -> Effect Unit
187+
188+
foreign import insertDebugMarkerImpl
189+
:: GPUCommandEncoder -> String -> Effect Unit
190+
154191
insertDebugMarker :: GPUCommandEncoder -> String -> Effect Unit
155192
insertDebugMarker = insertDebugMarkerImpl
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
export const setPipelineImpl = (computePassEncoder) => (pipeline) => () =>
2+
computePassEncoder.setPipeline(pipeline);
3+
export const dispatchWorkgroupsImpl = (computePassEncoder) => (size) => () =>
4+
computePassEncoder.dispatchWorkgroups(size);
5+
export const dispatchWorkgroupsXImpl = (computePassEncoder) => (size) => () =>
6+
computePassEncoder.dispatchWorkgroups(size);
7+
export const dispatchWorkgroupsXYImpl =
8+
(computePassEncoder) => (x) => (y) => () =>
9+
computePassEncoder.dispatchWorkgroups(x, y);
10+
export const dispatchWorkgroupsXYZImpl =
11+
(computePassEncoder) => (x) => (y) => (z) => () =>
12+
computePassEncoder.dispatchWorkgroups(x, y, z);
13+
export const dispatchWorkgroupsIndirectImpl =
14+
(computePassEncoder) => (indirectBuffer) => (indirectOffset) => () =>
15+
computePassEncoder.dispatchWorkgroupsIndirect(
16+
indirectBuffer,
17+
indirectOffset
18+
);
19+
export const endImpl = (computePassEncoder) => () => computePassEncoder.end();
20+
export const setBindGroupImpl =
21+
(computePassEncoder) => (index) => (bindGroup) => () =>
22+
computePassEncoder.setBindGroup(index, bindGroup);
23+
export const setBindGroupWithDynamicOffsetsImpl =
24+
(computePassEncoder) => (index) => (bindGroup) => (dynamicOffsets) => () =>
25+
computePassEncoder.setBindGroup(index, bindGroup, dynamicOffsets);
26+
export const setBindGroupWithDyanmicOffsetBoundsImpl =
27+
(computePassEncoder) =>
28+
(index) =>
29+
(bindGroup) =>
30+
(data) =>
31+
(dynamicOffsetsDataStart) =>
32+
(dynamicOffsetsDataLength) =>
33+
() =>
34+
computePassEncoder.setBindGroup(
35+
index,
36+
bindGroup,
37+
data,
38+
dynamicOffsetsDataStart,
39+
dynamicOffsetsDataLength
40+
);
41+
export const pushDebugGroupImpl = (computePassEncoder) => (groupLabel) => () =>
42+
computePassEncoder.pushDebugGroup(groupLabel);
43+
export const popDebugGroupImpl = (computePassEncoder) => () =>
44+
computePassEncoder.popDebugGroup();
45+
export const insertDebugMarkerImpl =
46+
(computePassEncoder) => (markerLabel) => () =>
47+
computePassEncoder.insertDebugMarker(markerLabel);
Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
module Web.GPU.GPUComputePassEncoder
2+
( dispatchWorkgroups
3+
, dispatchWorkgroupsIndirect
4+
, dispatchWorkgroupsX
5+
, dispatchWorkgroupsXY
6+
, dispatchWorkgroupsXYZ
7+
, end
8+
, insertDebugMarker
9+
, popDebugGroup
10+
, pushDebugGroup
11+
, setBindGroup
12+
, setBindGroupWithDyanmicOffsetBounds
13+
, setBindGroupWithDynamicOffsets
14+
, setPipeline
15+
) where
16+
17+
import Prelude
18+
19+
import Data.ArrayBuffer.Types (Uint32Array)
20+
import Effect (Effect)
21+
import Web.GPU.Internal.Types (GPUBindGroup, GPUBuffer, GPUComputePassEncoder, GPUComputePipeline, GPUIndex32, GPUSize32, GPUSize64, GPUBufferDynamicOffset)
22+
23+
foreign import setPipelineImpl
24+
:: GPUComputePassEncoder -> GPUComputePipeline -> Effect Unit
25+
26+
setPipeline GPUComputePassEncoder GPUComputePipeline Effect Unit
27+
setPipeline = setPipelineImpl
28+
29+
foreign import dispatchWorkgroupsImpl
30+
:: GPUComputePassEncoder -> GPUSize32 -> Effect Unit
31+
32+
dispatchWorkgroups GPUComputePassEncoder Int Effect Unit
33+
dispatchWorkgroups = dispatchWorkgroupsImpl
34+
35+
foreign import dispatchWorkgroupsXImpl
36+
:: GPUComputePassEncoder -> GPUSize32 -> Effect Unit
37+
38+
dispatchWorkgroupsX GPUComputePassEncoder Int Effect Unit
39+
dispatchWorkgroupsX = dispatchWorkgroupsXImpl
40+
41+
foreign import dispatchWorkgroupsXYImpl
42+
:: GPUComputePassEncoder -> GPUSize32 -> GPUSize32 -> Effect Unit
43+
44+
dispatchWorkgroupsXY :: GPUComputePassEncoder -> Int -> Int -> Effect Unit
45+
dispatchWorkgroupsXY = dispatchWorkgroupsXYImpl
46+
47+
foreign import dispatchWorkgroupsXYZImpl
48+
:: GPUComputePassEncoder -> GPUSize32 -> GPUSize32 -> GPUSize32 -> Effect Unit
49+
50+
dispatchWorkgroupsXYZ
51+
:: GPUComputePassEncoder -> Int -> Int -> Int -> Effect Unit
52+
dispatchWorkgroupsXYZ = dispatchWorkgroupsXYZImpl
53+
54+
foreign import dispatchWorkgroupsIndirectImpl
55+
:: GPUComputePassEncoder -> GPUBuffer -> GPUSize64 -> Effect Unit
56+
57+
dispatchWorkgroupsIndirect
58+
:: GPUComputePassEncoder -> GPUBuffer -> Int -> Effect Unit
59+
dispatchWorkgroupsIndirect = dispatchWorkgroupsIndirectImpl
60+
61+
foreign import endImpl :: GPUComputePassEncoder -> Effect Unit
62+
63+
end :: GPUComputePassEncoder -> Effect Unit
64+
end = endImpl
65+
66+
foreign import setBindGroupImpl
67+
:: GPUComputePassEncoder -> GPUIndex32 -> GPUBindGroup -> Effect Unit
68+
69+
setBindGroup :: GPUComputePassEncoder -> Int -> GPUBindGroup -> Effect Unit
70+
setBindGroup = setBindGroupImpl
71+
72+
foreign import setBindGroupWithDynamicOffsetsImpl
73+
:: GPUComputePassEncoder
74+
-> GPUIndex32
75+
-> GPUBindGroup
76+
-> Array GPUBufferDynamicOffset
77+
-> Effect Unit
78+
79+
setBindGroupWithDynamicOffsets
80+
:: GPUComputePassEncoder -> Int -> GPUBindGroup -> Array Int -> Effect Unit
81+
setBindGroupWithDynamicOffsets = setBindGroupWithDynamicOffsetsImpl
82+
83+
foreign import setBindGroupWithDyanmicOffsetBoundsImpl
84+
:: GPUComputePassEncoder
85+
-> GPUIndex32
86+
-> GPUBindGroup
87+
-> Uint32Array
88+
-> GPUSize64
89+
-> GPUSize32
90+
-> Effect Unit
91+
92+
setBindGroupWithDyanmicOffsetBounds
93+
:: GPUComputePassEncoder
94+
-> Int
95+
-> GPUBindGroup
96+
-> Uint32Array
97+
-> Int
98+
-> Int
99+
-> Effect Unit
100+
setBindGroupWithDyanmicOffsetBounds = setBindGroupWithDyanmicOffsetBoundsImpl
101+
102+
foreign import pushDebugGroupImpl
103+
:: GPUComputePassEncoder -> String -> Effect Unit
104+
105+
pushDebugGroup :: GPUComputePassEncoder -> String -> Effect Unit
106+
pushDebugGroup = pushDebugGroupImpl
107+
108+
foreign import popDebugGroupImpl :: GPUComputePassEncoder -> Effect Unit
109+
110+
popDebugGroup :: GPUComputePassEncoder -> Effect Unit
111+
popDebugGroup = popDebugGroupImpl
112+
113+
foreign import insertDebugMarkerImpl
114+
:: GPUComputePassEncoder -> String -> Effect Unit
115+
116+
insertDebugMarker :: GPUComputePassEncoder -> String -> Effect Unit
117+
insertDebugMarker = insertDebugMarkerImpl

src/Web/GPU/GPURenderPassDescriptor.purs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
module Web.GPU.GPURenderPassDescriptor where
22

3-
4-
53
import Web.GPU.GPURenderPassColorAttachment (GPURenderPassColorAttachment)
64
import Web.GPU.GPURenderPassDepthStencilAttachment (GPURenderPassDepthStencilAttachment)
75
import Web.GPU.GPURenderPassTimestampWrite (GPURenderPassTimestampWrite)

0 commit comments

Comments
 (0)