X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fmesa%2Fdrivers%2Fdri%2Fi965%2Fgen8_gs_state.c;h=d766ca7bebf6269aa649e2e7683e0e6cdd1929a2;hb=958fc04dc51a2561c8598f42df59e3d9139e56a7;hp=efe490ca206fe26955df2e63dcc46e866e8f523a;hpb=9404494b9be5d44e6b858c482021b3edcaf87b7a;p=mesa.git diff --git a/src/mesa/drivers/dri/i965/gen8_gs_state.c b/src/mesa/drivers/dri/i965/gen8_gs_state.c index efe490ca206..d766ca7bebf 100644 --- a/src/mesa/drivers/dri/i965/gen8_gs_state.c +++ b/src/mesa/drivers/dri/i965/gen8_gs_state.c @@ -34,7 +34,7 @@ gen8_upload_gs_state(struct brw_context *brw) /* BRW_NEW_GEOMETRY_PROGRAM */ bool active = brw->geometry_program; /* BRW_NEW_GS_PROG_DATA */ - const struct brw_vec4_prog_data *prog_data = &brw->gs.prog_data->base; + const struct brw_vue_prog_data *prog_data = &brw->gs.prog_data->base; if (active) { int urb_entry_write_offset = 1; @@ -48,8 +48,7 @@ gen8_upload_gs_state(struct brw_context *brw) OUT_BATCH(_3DSTATE_GS << 16 | (10 - 2)); OUT_BATCH(stage_state->prog_offset); OUT_BATCH(0); - OUT_BATCH(GEN6_GS_VECTOR_MASK_ENABLE | - brw->geometry_program->VerticesIn | + OUT_BATCH(brw->geometry_program->VerticesIn | ((ALIGN(stage_state->sampler_count, 4)/4) << GEN6_GS_SAMPLER_COUNT_SHIFT) | ((prog_data->base.binding_table.size_bytes / 4) << @@ -59,10 +58,6 @@ gen8_upload_gs_state(struct brw_context *brw) OUT_RELOC64(stage_state->scratch_bo, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER, ffs(brw->gs.prog_data->base.base.total_scratch) - 11); - WARN_ONCE(true, - "May need to implement a temporary workaround: GS Number of " - "URB Entries must be less than or equal to the GS Maximum " - "Number of Threads.\n"); } else { OUT_BATCH(0); OUT_BATCH(0); @@ -81,7 +76,10 @@ gen8_upload_gs_state(struct brw_context *brw) uint32_t dw7 = (brw->gs.prog_data->control_data_header_size_hwords << GEN7_GS_CONTROL_DATA_HEADER_SIZE_SHIFT) | - brw->gs.prog_data->dispatch_mode | + SET_FIELD(prog_data->dispatch_mode, + GEN7_GS_DISPATCH_MODE) | + ((brw->gs.prog_data->invocations - 1) << + GEN7_GS_INSTANCE_CONTROL_SHIFT) | GEN6_GS_STATISTICS_ENABLE | (brw->gs.prog_data->include_primitive_id ? GEN7_GS_INCLUDE_PRIMITIVE_ID : 0) | @@ -90,6 +88,12 @@ gen8_upload_gs_state(struct brw_context *brw) uint32_t dw8 = brw->gs.prog_data->control_data_format << HSW_GS_CONTROL_DATA_FORMAT_SHIFT; + if (brw->gs.prog_data->static_vertex_count != -1) { + dw8 |= GEN8_GS_STATIC_OUTPUT | + SET_FIELD(brw->gs.prog_data->static_vertex_count, + GEN8_GS_STATIC_VERTEX_COUNT); + } + if (brw->gen < 9) dw7 |= (brw->max_gs_threads / 2 - 1) << HSW_GS_MAX_THREADS_SHIFT; else