iris: Plumb deref block size through to 3DSTATE_SF

Cc: "20.0" mesa-stable@lists.freedesktop.org
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3454>
This commit is contained in:
Jason Ekstrand 2020-01-17 14:41:50 -06:00
parent e6b39850f0
commit 2ccdf881ab
2 changed files with 10 additions and 6 deletions

View file

@ -28,6 +28,7 @@
#include "util/u_debug.h"
#include "intel/blorp/blorp.h"
#include "intel/dev/gen_debug.h"
#include "intel/common/gen_l3_config.h"
#include "intel/compiler/brw_compiler.h"
#include "iris_batch.h"
#include "iris_binder.h"
@ -731,6 +732,8 @@ struct iris_context {
*/
enum isl_aux_usage draw_aux_usage[BRW_MAX_DRAW_BUFFERS];
enum gen_urb_deref_block_size urb_deref_block_size;
/** Bitfield of whether color blending is enabled for RT[i] */
uint8_t blend_enables;

View file

@ -1694,10 +1694,6 @@ iris_create_rasterizer_state(struct pipe_context *ctx,
sf.PointWidthSource = state->point_size_per_vertex ? Vertex : State;
sf.PointWidth = state->point_size;
#if GEN_GEN >= 12
sf.DerefBlockSize = PerPolyDerefMode;
#endif
if (state->flatshade_first) {
sf.TriangleFanProvokingVertexSelect = 1;
} else {
@ -5386,7 +5382,8 @@ iris_upload_dirty_render_state(struct iris_context *ice,
batch->screen->l3_config_3d,
ice->shaders.prog[MESA_SHADER_TESS_EVAL] != NULL,
ice->shaders.prog[MESA_SHADER_GEOMETRY] != NULL,
size, entries, start, NULL);
size, entries, start,
&ice->state.urb_deref_block_size);
for (int i = MESA_SHADER_VERTEX; i <= MESA_SHADER_GEOMETRY; i++) {
iris_emit_cmd(batch, GENX(3DSTATE_URB_VS), urb) {
@ -5768,13 +5765,17 @@ iris_upload_dirty_render_state(struct iris_context *ice,
ARRAY_SIZE(cso_rast->clip));
}
if (dirty & IRIS_DIRTY_RASTER) {
if (dirty & (IRIS_DIRTY_RASTER | IRIS_DIRTY_URB)) {
struct iris_rasterizer_state *cso = ice->state.cso_rast;
iris_batch_emit(batch, cso->raster, sizeof(cso->raster));
uint32_t dynamic_sf[GENX(3DSTATE_SF_length)];
iris_pack_command(GENX(3DSTATE_SF), &dynamic_sf, sf) {
sf.ViewportTransformEnable = !ice->state.window_space_position;
#if GEN_GEN >= 12
sf.DerefBlockSize = ice->state.urb_deref_block_size;
#endif
}
iris_emit_merge(batch, cso->sf, dynamic_sf,
ARRAY_SIZE(dynamic_sf));