*/
#include "util/u_prim.h"
-#include "intel_winsys.h"
+#include "core/intel_winsys.h"
#include "ilo_render.h"
#include "ilo_blit.h"
switch (q->type) {
case PIPE_QUERY_OCCLUSION_COUNTER:
+ case PIPE_QUERY_OCCLUSION_PREDICATE:
case PIPE_QUERY_TIME_ELAPSED:
case PIPE_QUERY_PRIMITIVES_GENERATED:
case PIPE_QUERY_PRIMITIVES_EMITTED:
/* write the beginning value to the bo */
if (q->in_pairs)
- ilo_3d_pipeline_emit_query(ilo->pipeline, q, q->stride * q->used);
+ ilo_render_emit_query(ilo->render, q, q->stride * q->used);
}
static void
q->used++;
/* write the ending value to the bo */
- ilo_3d_pipeline_emit_query(ilo->pipeline, q, offset);
+ ilo_render_emit_query(ilo->render, q, offset);
}
bool
switch (q->type) {
case PIPE_QUERY_OCCLUSION_COUNTER:
+ case PIPE_QUERY_OCCLUSION_PREDICATE:
case PIPE_QUERY_TIME_ELAPSED:
case PIPE_QUERY_PRIMITIVES_GENERATED:
case PIPE_QUERY_PRIMITIVES_EMITTED:
break;
}
- q->cmd_len = ilo_3d_pipeline_estimate_size(ilo->pipeline,
- ILO_3D_PIPELINE_QUERY, q);
+ q->cmd_len = ilo_render_get_query_len(ilo->render, q->type);
/* double cmd_len and stride if in pairs */
q->cmd_len <<= q->in_pairs;
q->stride <<= q->in_pairs;
bo_size = (q->stride > 4096) ? q->stride : 4096;
- q->bo = intel_winsys_alloc_buffer(ilo->winsys, "query", bo_size, false);
+ q->bo = intel_winsys_alloc_bo(ilo->winsys, "query", bo_size, false);
if (!q->bo)
return false;
bool success = true;
int max_len, before_space;
- /* on GEN7+, we need SOL_RESET to reset the SO write offsets */
+ /* on Gen7 and Gen7.5, we need SOL_RESET to reset the SO write offsets */
if (ilo_dev_gen(ilo->dev) >= ILO_GEN(7) &&
+ ilo_dev_gen(ilo->dev) <= ILO_GEN(7.5) &&
(vec->dirty & ILO_DIRTY_SO) && vec->so.enabled &&
!vec->so.append_bitmask) {
ilo_cp_submit(ilo->cp, "SOL_RESET");
ilo_draw_set_owner(ilo);
/* make sure there is enough room first */
- max_len = ilo_3d_pipeline_estimate_size(ilo->pipeline,
- ILO_3D_PIPELINE_DRAW, vec);
- if (need_flush) {
- max_len += ilo_3d_pipeline_estimate_size(ilo->pipeline,
- ILO_3D_PIPELINE_FLUSH, NULL);
- }
+ max_len = ilo_render_get_draw_len(ilo->render, vec);
+ if (need_flush)
+ max_len += ilo_render_get_flush_len(ilo->render);
if (max_len > ilo_cp_space(ilo->cp)) {
ilo_cp_submit(ilo->cp, "out of space");
before_space = ilo_cp_space(ilo->cp);
if (need_flush)
- ilo_3d_pipeline_emit_flush(ilo->pipeline);
+ ilo_render_emit_flush(ilo->render);
while (true) {
struct ilo_builder_snapshot snapshot;
ilo_builder_batch_snapshot(&ilo->cp->builder, &snapshot);
- ilo_3d_pipeline_emit_draw(ilo->pipeline, vec);
+ ilo_render_emit_draw(ilo->render, vec);
if (!ilo_builder_validate(&ilo->cp->builder, 0, NULL)) {
ilo_builder_batch_restore(&ilo->cp->builder, &snapshot);
break;
}
- ilo->pipeline->invalidate_flags = 0x0;
-
/* sanity check size estimation */
assert(before_space - ilo_cp_space(ilo->cp) <= max_len);
ilo_draw_set_owner(ilo);
- max_len = ilo_3d_pipeline_estimate_size(ilo->pipeline,
- ILO_3D_PIPELINE_RECTLIST, ilo->blitter);
- max_len += ilo_3d_pipeline_estimate_size(ilo->pipeline,
- ILO_3D_PIPELINE_FLUSH, NULL) * 2;
+ max_len = ilo_render_get_rectlist_len(ilo->render, ilo->blitter);
+ max_len += ilo_render_get_flush_len(ilo->render) * 2;
if (max_len > ilo_cp_space(ilo->cp)) {
ilo_cp_submit(ilo->cp, "out of space");
* Skip checking blitter->op and do the flushes.
*/
if (need_flush)
- ilo_3d_pipeline_emit_flush(ilo->pipeline);
+ ilo_render_emit_flush(ilo->render);
while (true) {
struct ilo_builder_snapshot snapshot;
ilo_builder_batch_snapshot(&ilo->cp->builder, &snapshot);
- ilo_3d_pipeline_emit_rectlist(ilo->pipeline, ilo->blitter);
+ ilo_render_emit_rectlist(ilo->render, ilo->blitter);
if (!ilo_builder_validate(&ilo->cp->builder, 0, NULL)) {
ilo_builder_batch_restore(&ilo->cp->builder, &snapshot);
break;
}
- ilo_3d_pipeline_invalidate(ilo->pipeline, ILO_3D_PIPELINE_INVALIDATE_HW);
+ ilo_render_invalidate_hw(ilo->render);
- ilo_3d_pipeline_emit_flush(ilo->pipeline);
+ ilo_render_emit_flush(ilo->render);
/* sanity check size estimation */
assert(before_space - ilo_cp_space(ilo->cp) <= max_len);
const struct pipe_draw_info *info)
{
const struct ilo_ib_state *ib = &ilo->state_vector.ib;
+ const struct ilo_vma *vma;
union {
const void *ptr;
const uint8_t *u8;
} u;
/* we will draw with IB mapped */
- if (ib->buffer) {
- u.ptr = intel_bo_map(ilo_buffer(ib->buffer)->bo, false);
+ if (ib->state.buffer) {
+ vma = ilo_resource_get_vma(ib->state.buffer);
+ u.ptr = intel_bo_map(vma->bo, false);
if (u.ptr)
- u.u8 += ib->offset;
+ u.u8 += vma->bo_offset + ib->state.offset;
} else {
- u.ptr = ib->user_buffer;
+ vma = NULL;
+ u.ptr = ib->state.user_buffer;
}
if (!u.ptr)
(pipe)->draw_vbo(pipe, &subinfo); \
} while (0)
- switch (ib->index_size) {
+ switch (ib->state.index_size) {
case 1:
DRAW_VBO_WITH_SW_RESTART(&ilo->base, info, u.u8);
break;
#undef DRAW_VBO_WITH_SW_RESTART
- if (ib->buffer)
- intel_bo_unmap(ilo_buffer(ib->buffer)->bo);
+ if (vma)
+ intel_bo_unmap(vma->bo);
}
static bool
/* the restart index is fixed prior to GEN7.5 */
if (ilo_dev_gen(ilo->dev) < ILO_GEN(7.5)) {
const unsigned cut_index =
- (ilo->state_vector.ib.index_size == 1) ? 0xff :
- (ilo->state_vector.ib.index_size == 2) ? 0xffff :
- (ilo->state_vector.ib.index_size == 4) ? 0xffffffff : 0;
+ (ilo->state_vector.ib.state.index_size == 1) ? 0xff :
+ (ilo->state_vector.ib.state.index_size == 2) ? 0xffff :
+ (ilo->state_vector.ib.state.index_size == 4) ? 0xffffffff : 0;
if (info->restart_index < cut_index)
return true;
ilo_draw_vbo(struct pipe_context *pipe, const struct pipe_draw_info *info)
{
struct ilo_context *ilo = ilo_context(pipe);
+ int vs_scratch_size, gs_scratch_size, fs_scratch_size;
if (ilo_debug & ILO_DEBUG_DRAW) {
if (info->indexed) {
ilo_finalize_3d_states(ilo, info);
+ /* upload kernels */
ilo_shader_cache_upload(ilo->shader_cache, &ilo->cp->builder);
+ /* prepare scratch spaces */
+ ilo_shader_cache_get_max_scratch_sizes(ilo->shader_cache,
+ &vs_scratch_size, &gs_scratch_size, &fs_scratch_size);
+ ilo_render_prepare_scratch_spaces(ilo->render,
+ vs_scratch_size, gs_scratch_size, fs_scratch_size);
+
ilo_blit_resolve_framebuffer(ilo);
/* If draw_vbo ever fails, return immediately. */
ilo->state_vector.draw = NULL;
if (ilo_debug & ILO_DEBUG_NOCACHE)
- ilo_3d_pipeline_emit_flush(ilo->pipeline);
+ ilo_render_emit_flush(ilo->render);
}
static void
if (ilo->cp->ring != INTEL_RING_RENDER)
return;
- ilo_3d_pipeline_emit_flush(ilo->pipeline);
+ ilo_render_emit_flush(ilo->render);
/* don't know why */
if (ilo_dev_gen(ilo->dev) >= ILO_GEN(7))
{
struct ilo_context *ilo = ilo_context(pipe);
- ilo_3d_pipeline_get_sample_position(ilo->pipeline,
+ ilo_render_get_sample_position(ilo->render,
sample_count, sample_index,
&out_value[0], &out_value[1]);
}