45
45
#include "util/u_prim.h"
48
prim_is_points_or_lines(enum pipe_prim_type mode)
48
prim_is_points_or_lines(enum mesa_prim mode)
50
50
/* We don't need to worry about adjacency - it can only be used with
51
51
* geometry shaders, and we don't care about this info when GS is on.
53
return mode == PIPE_PRIM_POINTS ||
54
mode == PIPE_PRIM_LINES ||
55
mode == PIPE_PRIM_LINE_LOOP ||
56
mode == PIPE_PRIM_LINE_STRIP;
53
return mode == MESA_PRIM_POINTS ||
54
mode == MESA_PRIM_LINES ||
55
mode == MESA_PRIM_LINE_LOOP ||
56
mode == MESA_PRIM_LINE_STRIP;
91
91
switch (draw->mode) {
92
case PIPE_PRIM_POINTS:
94
case PIPE_PRIM_LINE_STRIP:
95
case PIPE_PRIM_TRIANGLES:
96
case PIPE_PRIM_TRIANGLE_STRIP:
97
case PIPE_PRIM_LINES_ADJACENCY:
98
case PIPE_PRIM_LINE_STRIP_ADJACENCY:
99
case PIPE_PRIM_TRIANGLES_ADJACENCY:
100
case PIPE_PRIM_TRIANGLE_STRIP_ADJACENCY:
92
case MESA_PRIM_POINTS:
94
case MESA_PRIM_LINE_STRIP:
95
case MESA_PRIM_TRIANGLES:
96
case MESA_PRIM_TRIANGLE_STRIP:
97
case MESA_PRIM_LINES_ADJACENCY:
98
case MESA_PRIM_LINE_STRIP_ADJACENCY:
99
case MESA_PRIM_TRIANGLES_ADJACENCY:
100
case MESA_PRIM_TRIANGLE_STRIP_ADJACENCY:
118
118
const struct pipe_draw_start_count_bias *draw)
120
120
struct crocus_screen *screen = (struct crocus_screen *)ice->ctx.screen;
121
enum pipe_prim_type mode = info->mode;
121
enum mesa_prim mode = info->mode;
123
123
if (screen->devinfo.ver < 6) {
124
124
/* Slight optimization to avoid the GS program when not needed:
126
126
struct pipe_rasterizer_state *rs_state = crocus_get_rast_state(ice);
127
if (mode == PIPE_PRIM_QUAD_STRIP && !rs_state->flatshade &&
127
if (mode == MESA_PRIM_QUAD_STRIP && !rs_state->flatshade &&
128
128
rs_state->fill_front == PIPE_POLYGON_MODE_FILL &&
129
129
rs_state->fill_back == PIPE_POLYGON_MODE_FILL)
130
mode = PIPE_PRIM_TRIANGLE_STRIP;
131
if (mode == PIPE_PRIM_QUADS &&
130
mode = MESA_PRIM_TRIANGLE_STRIP;
131
if (mode == MESA_PRIM_QUADS &&
132
132
draw->count == 4 &&
133
133
!rs_state->flatshade &&
134
134
rs_state->fill_front == PIPE_POLYGON_MODE_FILL &&
135
135
rs_state->fill_back == PIPE_POLYGON_MODE_FILL)
136
mode = PIPE_PRIM_TRIANGLE_FAN;
136
mode = MESA_PRIM_TRIANGLE_FAN;
139
139
if (ice->state.prim_mode != mode) {
140
140
ice->state.prim_mode = mode;
142
enum pipe_prim_type reduced = u_reduced_prim(mode);
142
enum mesa_prim reduced = u_reduced_prim(mode);
143
143
if (ice->state.reduced_prim_mode != reduced) {
144
144
if (screen->devinfo.ver < 6)
145
145
ice->state.dirty |= CROCUS_DIRTY_GEN4_CLIP_PROG | CROCUS_DIRTY_GEN4_SF_PROG;
396
396
* trifans/tristrips.
398
398
if (screen->devinfo.ver < 6) {
399
if (info->mode == PIPE_PRIM_QUADS || info->mode == PIPE_PRIM_QUAD_STRIP) {
399
if (info->mode == MESA_PRIM_QUADS || info->mode == MESA_PRIM_QUAD_STRIP) {
400
400
bool trim = u_trim_pipe_prim(info->mode, (unsigned *)&draws[0].count);