@@ -117,29 +117,25 @@ int main(int argc, char **argv) {
117
117
GPUTensor devScreen = CreateTensor (ctx, {NROWS, NCOLS}, kf32, screen.data ());
118
118
uint32_t zeroTime = getCurrentTimeInMilliseconds ();
119
119
120
+ ShaderCode shader = CreateShader (kSDF , Shape{16 , 16 , 1 });
121
+ Kernel renderKernel =
122
+ CreateKernel (ctx, shader, {}, 0 , devScreen, {NCOLS, NROWS, 1 }, params);
120
123
while (true ) {
121
- params.time = getCurrentTimeInMilliseconds () - zeroTime;
122
- ShaderCode shader = CreateShader (kSDF , Shape{16 , 16 , 1 });
123
-
124
- // TODO(avh): Clean this up - too easy to miscalculate # of workgroups in x
125
- // and y directions since tensor dimensions (rows, cols) are reversed from
126
- // screen dimensions (cols, rows)
127
- Kernel render = CreateKernel (ctx, shader, {}, 0 , devScreen,
128
- static_cast <void *>(¶ms), sizeof (params),
129
- {NCOLS, NROWS, 1 });
130
- DispatchKernel (ctx, render);
131
- Wait (ctx, render.future );
124
+ DispatchKernel (ctx, renderKernel);
125
+ Wait (ctx, renderKernel.future );
132
126
ToCPU (ctx, devScreen, screen.data (), sizeof (screen));
133
-
134
- static const char intensity[] = " $@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\\ |()1{}[]?-_+~<>i!lI;:,\" ^`'. " ;
127
+ // Update the time field, write pparams to GPU, and create a new command buffer
128
+ params.time = getCurrentTimeInMilliseconds () - zeroTime;
129
+ wgpuQueueWriteBuffer (ctx.queue ,
130
+ renderKernel.buffers [renderKernel.numBuffers - 1 ], 0 ,
131
+ static_cast <void *>(¶ms), sizeof (params));
132
+ ResetCommandBuffer (ctx.device , shader.workgroupSize , {NCOLS, NROWS, 1 },
133
+ renderKernel);
134
+
135
+ static const char intensity[] = " $@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/"
136
+ " \\ |()1{}[]?-_+~<>i!lI;:,\" ^`'. " ;
135
137
// static const char intensity[] = "@%#8$X71x*+=-:^~'.` ";
136
138
137
- // clear the screen, move cursor to the top
138
- printf (" \033 [2J\033 [H" );
139
-
140
- // fprintf(stdout, "%s",
141
- // show<float, NROWS, NCOLS>(screen, "Raw values").c_str());
142
-
143
139
// normalize values
144
140
float min = 0.0 ;
145
141
float max = params.sphereRadius * 3 ;
@@ -148,14 +144,6 @@ int main(int argc, char **argv) {
148
144
screen[i] = (screen[i] - min) / (max - min);
149
145
}
150
146
151
- fprintf (stdout, " Workgroup size: %zu %zu %zu \n " , shader.workgroupSize [0 ],
152
- shader.workgroupSize [1 ], shader.workgroupSize [2 ]);
153
- fprintf (stdout, " Number of Threads: %zu %zu %d \n " , devScreen.shape [1 ],
154
- devScreen.shape [0 ], 1 );
155
-
156
- // fprintf(stdout, "%s", show<float, NROWS, NCOLS>(screen,
157
- // "Scaled").c_str());
158
-
159
147
// index into intensity array
160
148
std::array<char , screen.size ()> raster;
161
149
for (size_t i = 0 ; i < screen.size (); ++i) {
@@ -166,24 +154,33 @@ int main(int argc, char **argv) {
166
154
raster[i] = intensity[index];
167
155
}
168
156
169
- // draw the tui screen
170
- printf (" +" );
157
+ // Draw the raster
158
+ char buffer[(NROWS + 2 ) * (NCOLS + 2 )];
159
+ char *offset = buffer;
160
+ sprintf (offset, " +" );
171
161
for (size_t col = 0 ; col < NCOLS; ++col) {
172
- printf ( " -" );
162
+ sprintf (offset + col + 1 , " -" );
173
163
}
174
- printf (" +\n " );
164
+ sprintf (buffer + NCOLS + 1 , " +\n " );
165
+ offset += NCOLS + 3 ;
175
166
for (size_t row = 0 ; row < NROWS; ++row) {
176
- printf ( " |" );
167
+ sprintf (offset, " |" );
177
168
for (size_t col = 0 ; col < NCOLS; ++col) {
178
- printf ( " %c" , raster[row * NCOLS + col]);
169
+ sprintf (offset + col + 1 , " %c" , raster[row * NCOLS + col]);
179
170
}
180
- printf (" |\n " );
171
+ sprintf (offset + NCOLS + 1 , " |\n " );
172
+ offset += NCOLS + 3 ;
181
173
}
182
- printf ( " +" );
174
+ sprintf (offset, " +" );
183
175
for (size_t col = 0 ; col < NCOLS; ++col) {
184
- printf ( " -" );
176
+ sprintf (offset + col + 1 , " -" );
185
177
}
186
- printf (" +\n " );
178
+ sprintf (offset + NCOLS + 1 , " +\n " );
179
+ printf (" \033 [2J\033 [H" );
180
+ printf (" Workgroup size: %zu %zu %zu \n " , shader.workgroupSize [0 ],
181
+ shader.workgroupSize [1 ], shader.workgroupSize [2 ]);
182
+ printf (" Number of Threads: %zu %zu %d \n " , devScreen.shape [1 ],
183
+ devScreen.shape [0 ], 1 );
184
+ printf (" %s" , buffer);
187
185
}
188
-
189
186
}
0 commit comments