mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-01 01:38:06 +02:00
i965: Just read the existing tally on EndTransformFeedback if paused.
If the transform feedback object is paused when ending, then there are no new snapshots to add to the tally. In fact, we haven't written a starting snapshot, so we'd best not try and compute (end - start). Just load the existing tally so we can convert it to the number of vertices written and store it to the final result location. This is the Haswell+ equivalent of the previous commit. Signed-off-by: Kenneth Graunke <kenneth@whitecape.org> Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
This commit is contained in:
parent
915f7c25fa
commit
9c0d16adc1
1 changed files with 22 additions and 20 deletions
|
|
@ -95,27 +95,29 @@ tally_prims_written(struct brw_context *brw,
|
|||
I915_GEM_DOMAIN_INSTRUCTION,
|
||||
I915_GEM_DOMAIN_INSTRUCTION,
|
||||
TALLY_OFFSET + i * sizeof(uint32_t));
|
||||
/* GPR1 = Start Snapshot */
|
||||
brw_load_register_mem64(brw, HSW_CS_GPR(1), obj->prim_count_bo,
|
||||
I915_GEM_DOMAIN_INSTRUCTION,
|
||||
I915_GEM_DOMAIN_INSTRUCTION,
|
||||
START_OFFSET + i * sizeof(uint64_t));
|
||||
/* GPR2 = Ending Snapshot */
|
||||
brw_load_register_reg64(brw, GEN7_SO_NUM_PRIMS_WRITTEN(i), HSW_CS_GPR(2));
|
||||
if (!obj->base.Paused) {
|
||||
/* GPR1 = Start Snapshot */
|
||||
brw_load_register_mem64(brw, HSW_CS_GPR(1), obj->prim_count_bo,
|
||||
I915_GEM_DOMAIN_INSTRUCTION,
|
||||
I915_GEM_DOMAIN_INSTRUCTION,
|
||||
START_OFFSET + i * sizeof(uint64_t));
|
||||
/* GPR2 = Ending Snapshot */
|
||||
brw_load_register_reg64(brw, GEN7_SO_NUM_PRIMS_WRITTEN(i), HSW_CS_GPR(2));
|
||||
|
||||
BEGIN_BATCH(9);
|
||||
OUT_BATCH(HSW_MI_MATH | (9 - 2));
|
||||
/* GPR1 = GPR2 (End) - GPR1 (Start) */
|
||||
OUT_BATCH(MI_MATH_ALU2(LOAD, SRCA, R2));
|
||||
OUT_BATCH(MI_MATH_ALU2(LOAD, SRCB, R1));
|
||||
OUT_BATCH(MI_MATH_ALU0(SUB));
|
||||
OUT_BATCH(MI_MATH_ALU2(STORE, R1, ACCU));
|
||||
/* GPR0 = GPR0 (Tally) + GPR1 (Diff) */
|
||||
OUT_BATCH(MI_MATH_ALU2(LOAD, SRCA, R0));
|
||||
OUT_BATCH(MI_MATH_ALU2(LOAD, SRCB, R1));
|
||||
OUT_BATCH(MI_MATH_ALU0(ADD));
|
||||
OUT_BATCH(MI_MATH_ALU2(STORE, R0, ACCU));
|
||||
ADVANCE_BATCH();
|
||||
BEGIN_BATCH(9);
|
||||
OUT_BATCH(HSW_MI_MATH | (9 - 2));
|
||||
/* GPR1 = GPR2 (End) - GPR1 (Start) */
|
||||
OUT_BATCH(MI_MATH_ALU2(LOAD, SRCA, R2));
|
||||
OUT_BATCH(MI_MATH_ALU2(LOAD, SRCB, R1));
|
||||
OUT_BATCH(MI_MATH_ALU0(SUB));
|
||||
OUT_BATCH(MI_MATH_ALU2(STORE, R1, ACCU));
|
||||
/* GPR0 = GPR0 (Tally) + GPR1 (Diff) */
|
||||
OUT_BATCH(MI_MATH_ALU2(LOAD, SRCA, R0));
|
||||
OUT_BATCH(MI_MATH_ALU2(LOAD, SRCB, R1));
|
||||
OUT_BATCH(MI_MATH_ALU0(ADD));
|
||||
OUT_BATCH(MI_MATH_ALU2(STORE, R0, ACCU));
|
||||
ADVANCE_BATCH();
|
||||
}
|
||||
|
||||
if (!finalize) {
|
||||
/* Write back the new tally */
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue