diff options
Diffstat (limited to 'src/gallium/drivers/crocus/crocus_draw.c')
-rw-r--r-- | src/gallium/drivers/crocus/crocus_draw.c | 57 |
1 files changed, 29 insertions, 28 deletions
diff --git a/src/gallium/drivers/crocus/crocus_draw.c b/src/gallium/drivers/crocus/crocus_draw.c index 68e3a1c40eb..7787d47c7bb 100644 --- a/src/gallium/drivers/crocus/crocus_draw.c +++ b/src/gallium/drivers/crocus/crocus_draw.c @@ -36,23 +36,24 @@ #include "util/u_inlines.h" #include "util/u_transfer.h" #include "util/u_upload_mgr.h" -#include "intel/compiler/brw_compiler.h" -#include "intel/compiler/brw_eu_defines.h" +#include "intel/compiler/elk/elk_compiler.h" +#include "intel/compiler/elk/elk_eu_defines.h" +#include "compiler/shader_info.h" #include "crocus_context.h" #include "crocus_defines.h" #include "util/u_prim_restart.h" #include "util/u_prim.h" static bool -prim_is_points_or_lines(enum pipe_prim_type mode) +prim_is_points_or_lines(enum mesa_prim mode) { /* We don't need to worry about adjacency - it can only be used with * geometry shaders, and we don't care about this info when GS is on. */ - return mode == PIPE_PRIM_POINTS || - mode == PIPE_PRIM_LINES || - mode == PIPE_PRIM_LINE_LOOP || - mode == PIPE_PRIM_LINE_STRIP; + return mode == MESA_PRIM_POINTS || + mode == MESA_PRIM_LINES || + mode == MESA_PRIM_LINE_LOOP || + mode == MESA_PRIM_LINE_STRIP; } static bool @@ -88,15 +89,15 @@ can_cut_index_handle_prim(struct crocus_context *ice, return false; switch (draw->mode) { - case PIPE_PRIM_POINTS: - case PIPE_PRIM_LINES: - case PIPE_PRIM_LINE_STRIP: - case PIPE_PRIM_TRIANGLES: - case PIPE_PRIM_TRIANGLE_STRIP: - case PIPE_PRIM_LINES_ADJACENCY: - case PIPE_PRIM_LINE_STRIP_ADJACENCY: - case PIPE_PRIM_TRIANGLES_ADJACENCY: - case PIPE_PRIM_TRIANGLE_STRIP_ADJACENCY: + case MESA_PRIM_POINTS: + case MESA_PRIM_LINES: + case MESA_PRIM_LINE_STRIP: + case MESA_PRIM_TRIANGLES: + case MESA_PRIM_TRIANGLE_STRIP: + case MESA_PRIM_LINES_ADJACENCY: + case MESA_PRIM_LINE_STRIP_ADJACENCY: + case MESA_PRIM_TRIANGLES_ADJACENCY: + case MESA_PRIM_TRIANGLE_STRIP_ADJACENCY: return true; default: break; @@ -117,28 +118,28 @@ crocus_update_draw_info(struct crocus_context *ice, const struct pipe_draw_start_count_bias *draw) { struct crocus_screen *screen = (struct crocus_screen *)ice->ctx.screen; - enum pipe_prim_type mode = info->mode; + enum mesa_prim mode = info->mode; if (screen->devinfo.ver < 6) { /* Slight optimization to avoid the GS program when not needed: */ struct pipe_rasterizer_state *rs_state = crocus_get_rast_state(ice); - if (mode == PIPE_PRIM_QUAD_STRIP && !rs_state->flatshade && + if (mode == MESA_PRIM_QUAD_STRIP && !rs_state->flatshade && rs_state->fill_front == PIPE_POLYGON_MODE_FILL && rs_state->fill_back == PIPE_POLYGON_MODE_FILL) - mode = PIPE_PRIM_TRIANGLE_STRIP; - if (mode == PIPE_PRIM_QUADS && + mode = MESA_PRIM_TRIANGLE_STRIP; + if (mode == MESA_PRIM_QUADS && draw->count == 4 && !rs_state->flatshade && rs_state->fill_front == PIPE_POLYGON_MODE_FILL && rs_state->fill_back == PIPE_POLYGON_MODE_FILL) - mode = PIPE_PRIM_TRIANGLE_FAN; + mode = MESA_PRIM_TRIANGLE_FAN; } if (ice->state.prim_mode != mode) { ice->state.prim_mode = mode; - enum pipe_prim_type reduced = u_reduced_prim(mode); + enum mesa_prim reduced = u_reduced_prim(mode); if (ice->state.reduced_prim_mode != reduced) { if (screen->devinfo.ver < 6) ice->state.dirty |= CROCUS_DIRTY_GEN4_CLIP_PROG | CROCUS_DIRTY_GEN4_SF_PROG; @@ -164,7 +165,7 @@ crocus_update_draw_info(struct crocus_context *ice, } } - if (info->mode == PIPE_PRIM_PATCHES && + if (info->mode == MESA_PRIM_PATCHES && ice->state.vertices_per_patch != ice->state.patch_vertices) { ice->state.vertices_per_patch = ice->state.patch_vertices; @@ -395,7 +396,7 @@ crocus_draw_vbo(struct pipe_context *ctx, * trifans/tristrips. */ if (screen->devinfo.ver < 6) { - if (info->mode == PIPE_PRIM_QUADS || info->mode == PIPE_PRIM_QUAD_STRIP) { + if (info->mode == MESA_PRIM_QUADS || info->mode == MESA_PRIM_QUAD_STRIP) { bool trim = u_trim_pipe_prim(info->mode, (unsigned *)&draws[0].count); if (!trim) return; @@ -405,8 +406,8 @@ crocus_draw_vbo(struct pipe_context *ctx, /* We can't safely re-emit 3DSTATE_SO_BUFFERS because it may zero the * write offsets, changing the behavior. */ - if (unlikely(INTEL_DEBUG & DEBUG_REEMIT)) { - ice->state.dirty |= CROCUS_ALL_DIRTY_FOR_RENDER & ~CROCUS_DIRTY_GEN7_SO_BUFFERS; + if (INTEL_DEBUG(DEBUG_REEMIT)) { + ice->state.dirty |= CROCUS_ALL_DIRTY_FOR_RENDER & ~(CROCUS_DIRTY_GEN7_SO_BUFFERS | CROCUS_DIRTY_GEN6_SVBI); ice->state.stage_dirty |= CROCUS_ALL_STAGE_DIRTY_FOR_RENDER; } @@ -420,7 +421,7 @@ crocus_draw_vbo(struct pipe_context *ctx, return; if (ice->state.dirty & CROCUS_DIRTY_RENDER_RESOLVES_AND_FLUSHES) { - bool draw_aux_buffer_disabled[BRW_MAX_DRAW_BUFFERS] = { }; + bool draw_aux_buffer_disabled[ELK_MAX_DRAW_BUFFERS] = { }; for (gl_shader_stage stage = 0; stage < MESA_SHADER_COMPUTE; stage++) { if (ice->shaders.prog[stage]) crocus_predraw_resolve_inputs(ice, batch, draw_aux_buffer_disabled, @@ -484,7 +485,7 @@ crocus_launch_grid(struct pipe_context *ctx, const struct pipe_grid_info *grid) if (!crocus_check_conditional_render(ice)) return; - if (unlikely(INTEL_DEBUG & DEBUG_REEMIT)) { + if (INTEL_DEBUG(DEBUG_REEMIT)) { ice->state.dirty |= CROCUS_ALL_DIRTY_FOR_COMPUTE; ice->state.stage_dirty |= CROCUS_ALL_STAGE_DIRTY_FOR_COMPUTE; } |