mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-04 17:50:11 +01:00
iris: don't unconditionally emit 3DSTATE_VF / 3DSTATE_VF_TOPOLOGY
this was just laziness on my part
This commit is contained in:
parent
4c27cb031c
commit
5a2257bb2f
3 changed files with 33 additions and 2 deletions
|
|
@ -106,6 +106,8 @@ struct blorp_params;
|
|||
#define IRIS_DIRTY_SO_DECL_LIST (1ull << 49)
|
||||
#define IRIS_DIRTY_STREAMOUT (1ull << 50)
|
||||
#define IRIS_DIRTY_VF_SGVS (1ull << 51)
|
||||
#define IRIS_DIRTY_VF (1ull << 52)
|
||||
#define IRIS_DIRTY_VF_TOPOLOGY (1ull << 53)
|
||||
|
||||
/**
|
||||
* Non-orthogonal state (NOS) dependency flags.
|
||||
|
|
@ -345,6 +347,11 @@ struct iris_context {
|
|||
struct pipe_stencil_ref stencil_ref;
|
||||
struct pipe_framebuffer_state framebuffer;
|
||||
|
||||
bool primitive_restart;
|
||||
unsigned cut_index;
|
||||
enum pipe_prim_type prim_mode:8;
|
||||
uint8_t vertices_per_patch;
|
||||
|
||||
/** Are depth writes enabled? (Depth buffer may or may not exist.) */
|
||||
bool depth_writes_enabled;
|
||||
|
||||
|
|
|
|||
|
|
@ -37,6 +37,29 @@
|
|||
#include "intel/compiler/brw_compiler.h"
|
||||
#include "iris_context.h"
|
||||
|
||||
/**
|
||||
* Record the current primitive mode and restart information, flagging
|
||||
* related packets as dirty if necessary.
|
||||
*/
|
||||
static void
|
||||
iris_update_draw_info(struct iris_context *ice,
|
||||
const struct pipe_draw_info *info)
|
||||
{
|
||||
if (ice->state.prim_mode != info->mode ||
|
||||
ice->state.vertices_per_patch != info->vertices_per_patch) {
|
||||
ice->state.prim_mode = info->mode;
|
||||
ice->state.vertices_per_patch = info->vertices_per_patch;
|
||||
ice->state.dirty |= IRIS_DIRTY_VF_TOPOLOGY;
|
||||
}
|
||||
|
||||
if (ice->state.primitive_restart != info->primitive_restart ||
|
||||
ice->state.cut_index != info->restart_index) {
|
||||
ice->state.dirty |= IRIS_DIRTY_VF;
|
||||
ice->state.primitive_restart = info->primitive_restart;
|
||||
ice->state.cut_index = info->restart_index;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* The pipe->draw_vbo() driver hook. Performs a draw on the GPU.
|
||||
*/
|
||||
|
|
@ -51,6 +74,7 @@ iris_draw_vbo(struct pipe_context *ctx, const struct pipe_draw_info *info)
|
|||
|
||||
iris_batch_maybe_flush(batch, 1500);
|
||||
|
||||
iris_update_draw_info(ice, info);
|
||||
iris_update_compiled_shaders(ice);
|
||||
|
||||
iris_predraw_resolve_inputs(ice, batch);
|
||||
|
|
|
|||
|
|
@ -3641,7 +3641,7 @@ iris_upload_dirty_render_state(struct iris_context *ice,
|
|||
iris_batch_emit(batch, cso->line_stipple, sizeof(cso->line_stipple));
|
||||
}
|
||||
|
||||
if (1) {
|
||||
if (dirty & IRIS_DIRTY_VF_TOPOLOGY) {
|
||||
iris_emit_cmd(batch, GENX(3DSTATE_VF_TOPOLOGY), topo) {
|
||||
topo.PrimitiveTopologyType =
|
||||
translate_prim_type(draw->mode, draw->vertices_per_patch);
|
||||
|
|
@ -3692,7 +3692,7 @@ iris_upload_dirty_render_state(struct iris_context *ice,
|
|||
}
|
||||
}
|
||||
|
||||
if (1) {
|
||||
if (dirty & IRIS_DIRTY_VF) {
|
||||
iris_emit_cmd(batch, GENX(3DSTATE_VF), vf) {
|
||||
if (draw->primitive_restart) {
|
||||
vf.IndexedDrawCutIndexEnable = true;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue