if (scene->fb.zsbuf) {
unsigned layer;
- uint8_t *dst_layer = lp_rast_get_unswizzled_depth_tile_pointer(task, LP_TEX_USAGE_READ_WRITE);
+ uint8_t *dst_layer = lp_rast_get_depth_tile_pointer(task, LP_TEX_USAGE_READ_WRITE);
block_size = util_format_get_blocksize(scene->fb.zsbuf->format);
clear_value &= clear_mask;
/* color buffer */
for (i = 0; i < scene->fb.nr_cbufs; i++){
- stride[i] = scene->cbufs[i].stride;
- color[i] = lp_rast_get_unswizzled_color_block_pointer(task, i, tile_x + x,
- tile_y + y, inputs->layer);
+ if (scene->fb.cbufs[i]) {
+ stride[i] = scene->cbufs[i].stride;
+ color[i] = lp_rast_get_color_block_pointer(task, i, tile_x + x,
+ tile_y + y, inputs->layer);
+ }
+ else {
+ stride[i] = 0;
+ color[i] = NULL;
+ }
}
/* depth buffer */
if (scene->zsbuf.map) {
- depth = lp_rast_get_unswizzled_depth_block_pointer(task, tile_x + x,
- tile_y + y, inputs->layer);
+ depth = lp_rast_get_depth_block_pointer(task, tile_x + x,
+ tile_y + y, inputs->layer);
depth_stride = scene->zsbuf.stride;
}
for (i = 0; i < scene->fb.nr_cbufs; i++) {
if (scene->fb.cbufs[i]) {
stride[i] = scene->cbufs[i].stride;
- color[i] = lp_rast_get_unswizzled_color_block_pointer(task, i, x, y,
- inputs->layer);
+ color[i] = lp_rast_get_color_block_pointer(task, i, x, y,
+ inputs->layer);
}
else {
stride[i] = 0;
/* depth buffer */
if (scene->zsbuf.map) {
depth_stride = scene->zsbuf.stride;
- depth = lp_rast_get_unswizzled_depth_block_pointer(task, x, y, inputs->layer);
+ depth = lp_rast_get_depth_block_pointer(task, x, y, inputs->layer);
}
assert(lp_check_alignment(state->jit_context.u8_blend_color, 16));
pipe_semaphore_signal(&task->work_done);
}
+#ifdef _WIN32
+ pipe_semaphore_signal(&task->work_done);
+#endif
+
return 0;
}
pipe_semaphore_signal(&rast->tasks[i].work_ready);
}
- /* Wait for threads to terminate before cleaning up per-thread data */
+ /* Wait for threads to terminate before cleaning up per-thread data.
+ * We don't actually call pipe_thread_wait to avoid dead lock on Windows
+ * per https://bugs.freedesktop.org/show_bug.cgi?id=76252 */
for (i = 0; i < rast->num_threads; i++) {
+#ifdef _WIN32
+ pipe_semaphore_wait(&rast->tasks[i].work_done);
+#else
pipe_thread_wait(rast->threads[i]);
+#endif
}
/* Clean up per-thread data */