[Intel-gfx] [Mesa-dev] [PATCH] i965: Revert absolute mode for constant buffer pointers.

Jason Ekstrand jason at jlekstrand.net
Wed Oct 25 17:53:08 UTC 2017


On Wed, Oct 25, 2017 at 10:31 AM, Kenneth Graunke <kenneth at whitecape.org>
wrote:

> On Wednesday, October 25, 2017 7:33:41 AM PDT Jason Ekstrand wrote:
> > On October 25, 2017 06:05:16 Joonas Lahtinen wrote:
> [snip]
> > > There indeed seems to be quite a lot of missing registers from the i915
> > > driver where the context is initialized. (Psst. You can read that as:
> > > "all the 33 non-privileged registers we could quickly list, are
> > > missing").
> >
> > We probably don't need *all* of them initialized.  For instance, the
> > initial values of the ALU registers or the indirect draw parameter
> > registers will probably never matter.  However, if you want to just
> > initialized them all, that's fine.
>
> I agree - I think we can cut down the list substantially, if you like.
> Here's my breakdown of Skylake's non-privileged register list:
>
> Cache_Mode_0               0x7000
> Cache_Mode_1               0x7004
> GT_MODE                    0x7008
> L3_Config                  0x7034
> TD_CTL                     0xE400
> TD_CTL2                    0xE404
> L3SQCREG4                  0xB118
> NOPID                      0x2094
> INSTPM                     0x20C0
>
>    Should be initialized by the kernel.  Several of these can severely
>    break unsuspecting userspace, and we'd like to be able to rely on a
>    default value.
>
> IA_VERTICES_COUNT          0x2310
> IA_PRIMITIVES_COUNT        0x2318
> VS_INVOCATION_COUNT        0x2320
> HS_INVOCATION_COUNT        0x2300
> DS_INVOCATION_COUNT        0x2308
> GS_INVOCATION_COUNT        0x2328
> GS_PRIMITIVES_COUNT        0x2330
> SO_NUM_PRIMS_WRITTEN0      0x5200
> SO_NUM_PRIMS_WRITTEN1      0x5208
> SO_NUM_PRIMS_WRITTEN2      0x5210
> SO_NUM_PRIMS_WRITTEN3      0x5218
> SO_PRIM_STORAGE_NEEDED0    0x5240
> SO_PRIM_STORAGE_NEEDED1    0x5248
> SO_PRIM_STORAGE_NEEDED2    0x5250
> SO_PRIM_STORAGE_NEEDED3    0x5258
> CL_INVOCATION_COUNT        0x2338
> CL_PRIMITIVES_COUNT        0x2340
> PS_INVOCATION_COUNT_0      0x22C8
> PS_DEPTH_COUNT_0           0x22D8
> PS_INVOCATION_COUNT_1      0x22F0
> PS_DEPTH_COUNT_1           0x22F8
> PS_INVOCATION_COUNT_2      0x2448
> PS_DEPTH_COUNT_2           0x2450
> GPGPU_THREADS_DISPATCHED   0x2290
>
>    The kernel can skip these if you like.  Statistics registers just count
>    things, and userspace always calculates (end counter - start counter)
>    deltas, so the initial value doesn't really matter.
>
> SO_WRITE_OFFSET0           0x5280
> SO_WRITE_OFFSET1           0x5284
> SO_WRITE_OFFSET2           0x5288
> SO_WRITE_OFFSET3           0x528C
> GPUGPU_DISPATCHDIMX        0x2500
> GPUGPU_DISPATCHDIMY        0x2504
> GPUGPU_DISPATCHDIMZ        0x2508
> MI_PREDICATE_SRC0          0x2400
> MI_PREDICATE_SRC0          0x2404
> MI_PREDICATE_SRC1          0x2408
> MI_PREDICATE_SRC1          0x240C
> MI_PREDICATE_DATA          0x2410
> MI_PREDICATE_DATA          0x2414
> MI_PREDICATE_RESULT        0x2418
> MI_PREDICATE_RESULT_1      0x241C
> MI_PREDICATE_RESULT_2      0x23BC
> 3DPRIM_END_OFFSET          0x2420
> 3DPRIM_START_VERTEX        0x2430
> 3DPRIM_VERTEX_COUNT        0x2434
> 3DPRIM_INSTANCE_COUNT      0x2438
> 3DPRIM_START_INSTANCE      0x243C
> 3DPRIM_BASE_VERTEX         0x2440
>
>    The kernel can skip these if you like, IMO.  These registers are only
>    used when enabling an optional feature - stream out (SO_WRITE_*),
>    indirect compute dispatch (GPGPU_*), predicated draws (MI_PREDICATE_*),
>    indirect draws (3DPRIM_*).  Userspace has to explicitly opt in to each
>    of these features by enabling a flag, so there isn't a cross-context
>    contamination problem.  If userspace opts in to these features, it can
>    be responsible for programming the registers correctly.
>
> CS_GPR (1-16)              0x2600
>
>    The kernel can skip these if you like.  They're temporary storage when
>    using the MI_MATH instruction.  Example usage: load values into CS_GPR1
>    and CS_GPR2, add them, store the result in CS_GPR3.  Store to memory.
>
>    Nobody should be doing math on register values without setting them.
>    That's clearly a userspace bug.
>
> BB_OFFSET                  0x2158
>

This is used for indirect BATCH_BUFFER_START which is a thing on SKL+ I
believe (I didn't look at the docs).


> OA_CTX_CONTROL             0x2360
> OACTXID                    0x2364
> OA CONTROL                 0x2B00
> PERF_CNT_1_DW0             0x91b8
> PERF_CNT_1_DW1             0x91bc
> PERF_CNT_2_DW0             0x91c0
> PERF_CNT_2_DW1             0x91c4
>
>    I don't know about these.
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/intel-gfx/attachments/20171025/b6bef908/attachment-0001.html>


More information about the Intel-gfx mailing list