draw->guard_band_xy = (!draw->driver.bypass_clip_xy &&
draw->driver.guard_band_xy);
draw->clip_z = (!draw->driver.bypass_clip_z &&
- draw->rasterizer && draw->rasterizer->depth_clip) &&
+ draw->rasterizer && draw->rasterizer->depth_clip_near) &&
!window_space;
draw->clip_user = draw->rasterizer &&
draw->rasterizer->clip_plane_enable != 0 &&
}
}
+void
+draw_set_mapped_shader_buffer(struct draw_context *draw,
+ enum pipe_shader_type shader_type,
+ unsigned slot,
+ const void *buffer,
+ unsigned size )
+{
+ debug_assert(shader_type == PIPE_SHADER_VERTEX ||
+ shader_type == PIPE_SHADER_GEOMETRY);
+ debug_assert(slot < PIPE_MAX_SHADER_BUFFERS);
+
+ draw_do_flush(draw, DRAW_FLUSH_PARAMETER_CHANGE);
+
+ switch (shader_type) {
+ case PIPE_SHADER_VERTEX:
+ draw->pt.user.vs_ssbos[slot] = buffer;
+ draw->pt.user.vs_ssbos_size[slot] = size;
+ break;
+ case PIPE_SHADER_GEOMETRY:
+ draw->pt.user.gs_ssbos[slot] = buffer;
+ draw->pt.user.gs_ssbos_size[slot] = size;
+ break;
+ default:
+ assert(0 && "invalid shader type in draw_set_mapped_shader_buffer");
+ }
+}
/**
* Tells the draw module to draw points with triangles if their size
{
int i;
+ draw_do_flush( draw, DRAW_FLUSH_STATE_CHANGE );
+
for (i = 0; i < num_targets; i++)
draw->so.targets[i] = targets[i];
for (i = num_targets; i < PIPE_MAX_SO_BUFFERS; i++)
#endif
}
+void
+draw_set_images(struct draw_context *draw,
+ enum pipe_shader_type shader_stage,
+ struct pipe_image_view *views,
+ unsigned num)
+{
+ unsigned i;
+
+ debug_assert(shader_stage < PIPE_SHADER_TYPES);
+ debug_assert(num <= PIPE_MAX_SHADER_IMAGES);
+
+ draw_do_flush( draw, DRAW_FLUSH_STATE_CHANGE );
+
+ for (i = 0; i < num; ++i)
+ draw->images[shader_stage][i] = &views[i];
+ for (i = num; i < draw->num_sampler_views[shader_stage]; ++i)
+ draw->images[shader_stage][i] = NULL;
+
+ draw->num_images[shader_stage] = num;
+}
+
void
draw_set_mapped_texture(struct draw_context *draw,
enum pipe_shader_type shader_stage,
#endif
}
+void
+draw_set_mapped_image(struct draw_context *draw,
+ enum pipe_shader_type shader_stage,
+ unsigned idx,
+ uint32_t width, uint32_t height, uint32_t depth,
+ const void *base_ptr,
+ uint32_t row_stride,
+ uint32_t img_stride)
+{
+#ifdef HAVE_LLVM
+ if (draw->llvm)
+ draw_llvm_set_mapped_image(draw,
+ shader_stage,
+ idx,
+ width, height, depth,
+ base_ptr,
+ row_stride, img_stride);
+#endif
+}
+
/**
* XXX: Results for PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS because there are two
* different ways of setting textures, and drivers typically only support one.