Skip to content

Commit c792240

Browse files
Migrate to js-promise (#2)
1 parent ede4201 commit c792240

File tree

8 files changed

+193
-87
lines changed

8 files changed

+193
-87
lines changed

sandbox/Sandbox.purs

+4-4
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ import Web.HTML (window)
8686
import Web.HTML.HTMLCanvasElement (fromElement, height, width)
8787
import Web.HTML.HTMLDocument (toNonElementParentNode)
8888
import Web.HTML.Window (document, navigator, requestAnimationFrame)
89-
import Web.Promise as Web.Promise
89+
import Promise as Promise
9090

9191
averager :: forall a. EuclideanRing a => Effect (a -> Effect a)
9292
averager = do
@@ -105,7 +105,7 @@ hackyFloatConv = unsafeCoerce
105105
hackyIntConv :: Array Int -> Array UInt
106106
hackyIntConv = unsafeCoerce
107107

108-
convertPromise :: Web.Promise.Promise ~> Control.Promise.Promise
108+
convertPromise :: Promise.Promise ~> Control.Promise.Promise
109109
convertPromise = unsafeCoerce
110110

111111
-- a port of alaingalvan/webgpu-seed
@@ -517,7 +517,7 @@ fn main(@builtin(global_invocation_id) global_id : vec3<u32>) {
517517
@group(0) @binding(0) var<storage, read_write> resultMatrix : array<f32>;
518518
@group(1) @binding(0) var<storage, read> time : f32;
519519
fn xyt2trig(x: u32, y: u32, time: f32) -> f32 {
520-
const pi = 3.14159;
520+
const pi = 3.14159;
521521
var o = (x << 1) + y;
522522
return sin((time * pi) + (f32((o + 1) % 3) * (pi / 2.0)));
523523
}
@@ -1052,7 +1052,7 @@ fn main(@location(0) inColor: vec3<f32>) -> @location(0) vec4<f32> {
10521052
end passEncoder
10531053
--------
10541054
-- write to output buffer
1055-
-- we use this as a test
1055+
-- we use this as a test
10561056
copyBufferToBuffer commandEncoder perspectiveResultBuffer 0
10571057
buf
10581058
0

spago.dhall

+1-13
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,3 @@
1-
{-
2-
Welcome to a Spago project!
3-
You can edit this file as you like.
4-
5-
Need help? See the following resources:
6-
- Spago documentation: https://github.com/purescript/spago
7-
- Dhall language tour: https://docs.dhall-lang.org/tutorials/Language-Tour.html
8-
9-
When creating a new Spago project, you can use
10-
`spago init --no-comments` or `spago init -C`
11-
to generate this file without the comments in this block.
12-
-}
131
{ name = "webgpu"
142
, dependencies =
153
[ "arraybuffer-types"
@@ -18,6 +6,7 @@ to generate this file without the comments in this block.
186
, "foreign-object"
197
, "functions"
208
, "integers"
9+
, "js-promise"
2110
, "maybe"
2211
, "newtype"
2312
, "ordered-collections"
@@ -26,7 +15,6 @@ to generate this file without the comments in this block.
2615
, "unsafe-coerce"
2716
, "web-events"
2817
, "web-html"
29-
, "web-promise"
3018
]
3119
, packages = ./packages.dhall
3220
, sources = [ "src/**/*.purs" ]

src/Web/GPU/GPU.purs

+10-5
Original file line numberDiff line numberDiff line change
@@ -7,18 +7,22 @@ module Web.GPU.GPU
77
) where
88

99
import Data.Maybe (Maybe(..))
10-
import Effect.Uncurried(EffectFn1, runEffectFn1,EffectFn4, runEffectFn4)
10+
import Effect.Uncurried (EffectFn1, runEffectFn1, EffectFn4, runEffectFn4)
1111
import Effect (Effect)
1212
import Web.GPU.GPURequestAdapterOptions (GPURequestAdapterOptions)
1313
import Web.GPU.GPUTextureFormat (GPUTextureFormat)
14-
import Web.Promise (Promise)
14+
import Promise (Promise)
1515
import Web.GPU.GPUAdapter (GPUAdapter)
1616

1717
data GPU
1818

1919
-- requestAdapter
2020

21-
foreign import requestAdapterImpl :: EffectFn4 (GPUAdapter -> Maybe GPUAdapter) (Maybe GPUAdapter) GPU GPURequestAdapterOptions (Promise (Maybe GPUAdapter))
21+
foreign import requestAdapterImpl
22+
:: EffectFn4 (GPUAdapter -> Maybe GPUAdapter) (Maybe GPUAdapter) GPU
23+
GPURequestAdapterOptions
24+
(Promise (Maybe GPUAdapter))
25+
2226
requestAdapter
2327
:: GPU
2428
-> GPURequestAdapterOptions
@@ -27,6 +31,7 @@ requestAdapter a b = runEffectFn4 requestAdapterImpl Just Nothing a b
2731

2832
-- getPreferredCanvasFormat
2933

30-
foreign import getPreferredCanvasFormatImpl :: EffectFn1 GPU GPUTextureFormat
34+
foreign import getPreferredCanvasFormatImpl :: EffectFn1 GPU GPUTextureFormat
35+
3136
getPreferredCanvasFormat :: GPU -> Effect GPUTextureFormat
32-
getPreferredCanvasFormat a = runEffectFn1 getPreferredCanvasFormatImpl a
37+
getPreferredCanvasFormat a = runEffectFn1 getPreferredCanvasFormatImpl a

src/Web/GPU/GPUAdapter.purs

+23-9
Original file line numberDiff line numberDiff line change
@@ -14,43 +14,57 @@ module Web.GPU.GPUAdapter
1414
) where
1515

1616
import Data.Maybe (Maybe(..))
17-
import Effect.Uncurried(EffectFn1, runEffectFn1,EffectFn2, runEffectFn2,EffectFn3, runEffectFn3,EffectFn4, runEffectFn4)
17+
import Effect.Uncurried (EffectFn1, runEffectFn1, EffectFn2, runEffectFn2, EffectFn3, runEffectFn3, EffectFn4, runEffectFn4)
1818
import Data.Set as Set
1919
import Effect (Effect)
2020
import Web.GPU.GPUDeviceDescriptor (GPUDeviceDescriptor)
2121
import Web.GPU.GPUFeatureName (GPUFeatureName)
2222
import Web.GPU.GPUDevice (GPUDevice)
2323
import Web.GPU.GPUSupportedLimits (GPUSupportedLimits)
2424
import Web.GPU.UnmaskHint (UnmaskHint)
25-
import Web.Promise (Promise)
25+
import Promise (Promise)
2626

2727
data GPUAdapter
2828

2929
-- features
30-
foreign import featuresImpl :: EffectFn3 (GPUFeatureName -> Set.Set GPUFeatureName -> Set.Set GPUFeatureName) (Set.Set GPUFeatureName) GPUAdapter (Set.Set GPUFeatureName)
30+
foreign import featuresImpl
31+
:: EffectFn3
32+
(GPUFeatureName -> Set.Set GPUFeatureName -> Set.Set GPUFeatureName)
33+
(Set.Set GPUFeatureName)
34+
GPUAdapter
35+
(Set.Set GPUFeatureName)
36+
3137
features :: GPUAdapter -> Effect (Set.Set GPUFeatureName)
3238
features a = runEffectFn3 featuresImpl Set.insert Set.empty a
3339

34-
foreign import limitsImpl :: EffectFn1 GPUAdapter { | GPUSupportedLimits }
40+
foreign import limitsImpl :: EffectFn1 GPUAdapter { | GPUSupportedLimits }
41+
3542
limits :: GPUAdapter -> Effect { | GPUSupportedLimits }
3643
limits a = runEffectFn1 limitsImpl a
3744

38-
foreign import isFallbackAdapterImpl :: EffectFn1 GPUAdapter Boolean
45+
foreign import isFallbackAdapterImpl :: EffectFn1 GPUAdapter Boolean
46+
3947
isFallbackAdapter :: GPUAdapter -> Effect Boolean
4048
isFallbackAdapter a = runEffectFn1 isFallbackAdapterImpl a
4149

4250
-- requestDevice
4351

44-
foreign import requestDeviceImpl :: EffectFn4 (GPUDevice -> Maybe GPUDevice)( Maybe GPUDevice) GPUAdapter GPUDeviceDescriptor (Promise (Maybe GPUDevice))
52+
foreign import requestDeviceImpl
53+
:: EffectFn4 (GPUDevice -> Maybe GPUDevice) (Maybe GPUDevice) GPUAdapter
54+
GPUDeviceDescriptor
55+
(Promise (Maybe GPUDevice))
56+
4557
requestDevice
4658
:: GPUAdapter
4759
-> GPUDeviceDescriptor
4860
-> Effect (Promise (Maybe GPUDevice))
49-
requestDevice a b= runEffectFn4 requestDeviceImpl Just Nothing a b
61+
requestDevice a b = runEffectFn4 requestDeviceImpl Just Nothing a b
5062

5163
-- requestAdapterInfo
5264

53-
foreign import requestAdapterInfoImpl :: EffectFn2 GPUAdapter (Array UnmaskHint) (Promise GPUAdapterInfo)
65+
foreign import requestAdapterInfoImpl
66+
:: EffectFn2 GPUAdapter (Array UnmaskHint) (Promise GPUAdapterInfo)
67+
5468
type GPUAdapterInfo =
5569
{ vendor :: String
5670
, architecture :: String
@@ -60,4 +74,4 @@ type GPUAdapterInfo =
6074

6175
requestAdapterInfo
6276
:: GPUAdapter -> Array UnmaskHint -> Effect (Promise GPUAdapterInfo)
63-
requestAdapterInfo a b = runEffectFn2 requestAdapterInfoImpl a b
77+
requestAdapterInfo a b = runEffectFn2 requestAdapterInfoImpl a b

src/Web/GPU/GPUBuffer.purs

+44-18
Original file line numberDiff line numberDiff line change
@@ -29,70 +29,96 @@ module Web.GPU.GPUBuffer
2929
) where
3030

3131
import Prelude
32-
import Effect.Uncurried(EffectFn1, runEffectFn1,EffectFn2, runEffectFn2,EffectFn3, runEffectFn3,EffectFn4, runEffectFn4)
32+
import Effect.Uncurried (EffectFn1, runEffectFn1, EffectFn2, runEffectFn2, EffectFn3, runEffectFn3, EffectFn4, runEffectFn4)
3333

3434
import Data.ArrayBuffer.Types (ArrayBuffer)
3535
import Effect (Effect)
3636
import Web.GPU.GPUBufferMapState (GPUBufferMapState)
3737
import Web.GPU.GPUBufferUsage (GPUBufferUsage)
3838
import Web.GPU.GPUMapMode (GPUMapMode)
3939
import Web.GPU.Internal.Types (GPUSize64)
40-
import Web.Promise (Promise)
40+
import Promise (Promise)
4141

4242
data GPUBuffer
4343

44-
foreign import sizeImpl :: EffectFn1 GPUBuffer GPUSize64
44+
foreign import sizeImpl :: EffectFn1 GPUBuffer GPUSize64
45+
4546
size :: GPUBuffer -> Effect GPUSize64
4647
size a = runEffectFn1 sizeImpl a
4748

48-
foreign import usageImpl :: EffectFn1 GPUBuffer GPUBufferUsage
49+
foreign import usageImpl :: EffectFn1 GPUBuffer GPUBufferUsage
50+
4951
usage :: GPUBuffer -> Effect GPUBufferUsage
5052
usage a = runEffectFn1 usageImpl a
5153

52-
foreign import mapStateImpl :: EffectFn1 GPUBuffer GPUBufferMapState
54+
foreign import mapStateImpl :: EffectFn1 GPUBuffer GPUBufferMapState
55+
5356
mapState :: GPUBuffer -> Effect GPUBufferMapState
5457
mapState a = runEffectFn1 mapStateImpl a
5558

56-
foreign import mapAsyncImpl :: EffectFn2 GPUBuffer GPUMapMode (Promise Unit)
59+
foreign import mapAsyncImpl :: EffectFn2 GPUBuffer GPUMapMode (Promise Unit)
60+
5761
mapAsync :: GPUBuffer -> GPUMapMode -> Effect (Promise Unit)
5862
mapAsync a b = runEffectFn2 mapAsyncImpl a b
5963

60-
foreign import mapAsyncWithOffsetImpl :: EffectFn3 GPUBuffer GPUMapMode GPUSize64 (Promise Unit)
64+
foreign import mapAsyncWithOffsetImpl
65+
:: EffectFn3 GPUBuffer GPUMapMode GPUSize64 (Promise Unit)
66+
6167
mapAsyncWithOffset
6268
:: GPUBuffer -> GPUMapMode -> GPUSize64 -> Effect (Promise Unit)
6369
mapAsyncWithOffset a b c = runEffectFn3 mapAsyncWithOffsetImpl a b c
6470

65-
foreign import mapAsyncWithSizeImpl :: EffectFn3 GPUBuffer GPUMapMode GPUSize64 (Promise Unit)
71+
foreign import mapAsyncWithSizeImpl
72+
:: EffectFn3 GPUBuffer GPUMapMode GPUSize64 (Promise Unit)
73+
6674
mapAsyncWithSize
6775
:: GPUBuffer -> GPUMapMode -> GPUSize64 -> Effect (Promise Unit)
6876
mapAsyncWithSize a b c = runEffectFn3 mapAsyncWithSizeImpl a b c
6977

70-
foreign import mapAsyncWithOffsetAndSizeImpl :: EffectFn4 GPUBuffer GPUMapMode GPUSize64 GPUSize64 (Promise Unit)
78+
foreign import mapAsyncWithOffsetAndSizeImpl
79+
:: EffectFn4 GPUBuffer GPUMapMode GPUSize64 GPUSize64 (Promise Unit)
80+
7181
mapAsyncWithOffsetAndSize
7282
:: GPUBuffer -> GPUMapMode -> GPUSize64 -> GPUSize64 -> Effect (Promise Unit)
73-
mapAsyncWithOffsetAndSize a b c d = runEffectFn4 mapAsyncWithOffsetAndSizeImpl a b c d
83+
mapAsyncWithOffsetAndSize a b c d = runEffectFn4 mapAsyncWithOffsetAndSizeImpl a
84+
b
85+
c
86+
d
87+
88+
foreign import getMappedRangeImpl :: EffectFn1 GPUBuffer ArrayBuffer
7489

75-
foreign import getMappedRangeImpl :: EffectFn1 GPUBuffer ArrayBuffer
7690
getMappedRange :: GPUBuffer -> Effect ArrayBuffer
7791
getMappedRange a = runEffectFn1 getMappedRangeImpl a
7892

79-
foreign import getMappedRangeWithOffsetImpl :: EffectFn2 GPUBuffer GPUSize64 ArrayBuffer
93+
foreign import getMappedRangeWithOffsetImpl
94+
:: EffectFn2 GPUBuffer GPUSize64 ArrayBuffer
95+
8096
getMappedRangeWithOffset :: GPUBuffer -> GPUSize64 -> Effect ArrayBuffer
8197
getMappedRangeWithOffset a b = runEffectFn2 getMappedRangeWithOffsetImpl a b
8298

83-
foreign import getMappedRangeWithSizeImpl :: EffectFn2 GPUBuffer GPUSize64 ArrayBuffer
99+
foreign import getMappedRangeWithSizeImpl
100+
:: EffectFn2 GPUBuffer GPUSize64 ArrayBuffer
101+
84102
getMappedRangeWithSize :: GPUBuffer -> GPUSize64 -> Effect ArrayBuffer
85103
getMappedRangeWithSize a b = runEffectFn2 getMappedRangeWithSizeImpl a b
86104

87-
foreign import getMappedRangeWithOffsetAndSizeImpl :: EffectFn3 GPUBuffer GPUSize64 GPUSize64 ArrayBuffer
105+
foreign import getMappedRangeWithOffsetAndSizeImpl
106+
:: EffectFn3 GPUBuffer GPUSize64 GPUSize64 ArrayBuffer
107+
88108
getMappedRangeWithOffsetAndSize
89109
:: GPUBuffer -> GPUSize64 -> GPUSize64 -> Effect ArrayBuffer
90-
getMappedRangeWithOffsetAndSize a b c = runEffectFn3 getMappedRangeWithOffsetAndSizeImpl a b c
110+
getMappedRangeWithOffsetAndSize a b c = runEffectFn3
111+
getMappedRangeWithOffsetAndSizeImpl
112+
a
113+
b
114+
c
115+
116+
foreign import unmapImpl :: EffectFn1 GPUBuffer Unit
91117

92-
foreign import unmapImpl :: EffectFn1 GPUBuffer Unit
93118
unmap :: GPUBuffer -> Effect Unit
94119
unmap a = runEffectFn1 unmapImpl a
95120

96-
foreign import destroyImpl :: EffectFn1 GPUBuffer Unit
121+
foreign import destroyImpl :: EffectFn1 GPUBuffer Unit
122+
97123
destroy :: GPUBuffer -> Effect Unit
98-
destroy a = runEffectFn1 destroyImpl a
124+
destroy a = runEffectFn1 destroyImpl a

0 commit comments

Comments
 (0)