mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-06 02:58:05 +02:00
Revert "i965: Implement GL_PRIMITIVES_GENERATED with non-zero streams."
This reverts commit 3178d2474a.
This caused GPU hangs on Ivybridge for some users and huge (80%)
performance regressions across the board on multiple platforms.
We need to find a better solution. I've made several attempts, but none
of them have worked yet. In the meantime, we should revert this.
Reverting it breaks GL_PRIMITIVES_GENERATED for non-zero streams, but
that's okay, since we don't expose GL_ARB_gpu_shader5 yet.
Fixes Piglit's EXT_transform_feedback/generatemipmap prims_generated
test case on Haswell.
This commit is contained in:
parent
1661f7559b
commit
99f8ea295f
2 changed files with 7 additions and 26 deletions
|
|
@ -84,16 +84,11 @@ brw_store_register_mem64(struct brw_context *brw,
|
|||
|
||||
static void
|
||||
write_primitives_generated(struct brw_context *brw,
|
||||
drm_intel_bo *query_bo, int stream, int idx)
|
||||
drm_intel_bo *query_bo, int idx)
|
||||
{
|
||||
intel_batchbuffer_emit_mi_flush(brw);
|
||||
|
||||
if (brw->gen >= 7) {
|
||||
brw_store_register_mem64(brw, query_bo,
|
||||
GEN7_SO_PRIM_STORAGE_NEEDED(stream), idx);
|
||||
} else {
|
||||
brw_store_register_mem64(brw, query_bo, CL_INVOCATION_COUNT, idx);
|
||||
}
|
||||
brw_store_register_mem64(brw, query_bo, CL_INVOCATION_COUNT, idx);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
@ -244,7 +239,7 @@ gen6_begin_query(struct gl_context *ctx, struct gl_query_object *q)
|
|||
break;
|
||||
|
||||
case GL_PRIMITIVES_GENERATED:
|
||||
write_primitives_generated(brw, query->bo, query->Base.Stream, 0);
|
||||
write_primitives_generated(brw, query->bo, 0);
|
||||
break;
|
||||
|
||||
case GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN:
|
||||
|
|
@ -282,7 +277,7 @@ gen6_end_query(struct gl_context *ctx, struct gl_query_object *q)
|
|||
break;
|
||||
|
||||
case GL_PRIMITIVES_GENERATED:
|
||||
write_primitives_generated(brw, query->bo, query->Base.Stream, 1);
|
||||
write_primitives_generated(brw, query->bo, 1);
|
||||
break;
|
||||
|
||||
case GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN:
|
||||
|
|
|
|||
|
|
@ -223,28 +223,14 @@ upload_3dstate_streamout(struct brw_context *brw, bool active,
|
|||
uint32_t dw1 = 0, dw2 = 0;
|
||||
int i;
|
||||
|
||||
/*
|
||||
* From ARB_transform_feedback3:
|
||||
*
|
||||
* "When a generated primitive query for a vertex stream is active, the
|
||||
* primitives-generated count is incremented every time a primitive
|
||||
* emitted to that stream reaches the Discarding Rasterization stage
|
||||
* (see Section 3.x) right before rasterization. This counter is
|
||||
* incremented whether or not transform feedback is active."
|
||||
*
|
||||
* Since we can only keep track of generated primitives for each stream
|
||||
* in the SOL stage we need to make sure it is always active even if
|
||||
* transform beedback is not. This way we can track primitives generated
|
||||
* in each stream via SO_PRIMITIVE_STORAGE_NEEDED.
|
||||
*/
|
||||
dw1 |= SO_FUNCTION_ENABLE;
|
||||
dw1 |= SO_STATISTICS_ENABLE;
|
||||
|
||||
if (active) {
|
||||
int urb_entry_read_offset = 0;
|
||||
int urb_entry_read_length = (vue_map->num_slots + 1) / 2 -
|
||||
urb_entry_read_offset;
|
||||
|
||||
dw1 |= SO_FUNCTION_ENABLE;
|
||||
dw1 |= SO_STATISTICS_ENABLE;
|
||||
|
||||
/* _NEW_LIGHT */
|
||||
if (ctx->Light.ProvokingVertex != GL_FIRST_VERTEX_CONVENTION)
|
||||
dw1 |= SO_REORDER_TRAILING;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue