i965: Define state flag to signal that the URB size has been altered.
authorFrancisco Jerez <currojerez@riseup.net>
Thu, 3 Sep 2015 14:15:57 +0000 (17:15 +0300)
committerFrancisco Jerez <currojerez@riseup.net>
Wed, 9 Dec 2015 11:46:04 +0000 (13:46 +0200)
This will make sure that we recalculate the URB layout anytime the URB
size is modified by the L3 partitioning code.

Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
Reviewed-by: Kristian Høgsberg <krh@bitplanet.net>
src/mesa/drivers/dri/i965/brw_context.h
src/mesa/drivers/dri/i965/brw_state_upload.c
src/mesa/drivers/dri/i965/gen7_urb.c

index 2fee6a7797f28762ae3383c0faa3612dec34a881..99ac7ca135d0256c54a2193749264f685c41e76a 100644 (file)
@@ -218,6 +218,7 @@ enum brw_state_id {
    BRW_STATE_VS_ATTRIB_WORKAROUNDS,
    BRW_STATE_COMPUTE_PROGRAM,
    BRW_STATE_CS_WORK_GROUPS,
+   BRW_STATE_URB_SIZE,
    BRW_NUM_STATE_BITS
 };
 
@@ -303,6 +304,7 @@ enum brw_state_id {
 #define BRW_NEW_VS_ATTRIB_WORKAROUNDS   (1ull << BRW_STATE_VS_ATTRIB_WORKAROUNDS)
 #define BRW_NEW_COMPUTE_PROGRAM         (1ull << BRW_STATE_COMPUTE_PROGRAM)
 #define BRW_NEW_CS_WORK_GROUPS          (1ull << BRW_STATE_CS_WORK_GROUPS)
+#define BRW_NEW_URB_SIZE                (1ull << BRW_STATE_URB_SIZE)
 
 struct brw_state_flags {
    /** State update flags signalled by mesa internals */
index 0a842bb7dcd71bf349ce47fae4a6f93b2b955ea3..750eb75fcd35c3d11b3860804b2d767131ee8053 100644 (file)
@@ -628,6 +628,7 @@ static struct dirty_bit_map brw_bits[] = {
    DEFINE_BIT(BRW_NEW_VS_ATTRIB_WORKAROUNDS),
    DEFINE_BIT(BRW_NEW_COMPUTE_PROGRAM),
    DEFINE_BIT(BRW_NEW_CS_WORK_GROUPS),
+   DEFINE_BIT(BRW_NEW_URB_SIZE),
    {0, 0, 0}
 };
 
index 161de77e1565f295cedfe564f44ea6b72f25b521..99a9d3c6500b03372999d47dd7f87510073f27fa 100644 (file)
@@ -153,6 +153,7 @@ gen7_upload_urb(struct brw_context *brw)
     * skip the rest of the logic.
     */
    if (!(brw->ctx.NewDriverState & BRW_NEW_CONTEXT) &&
+       !(brw->ctx.NewDriverState & BRW_NEW_URB_SIZE) &&
        brw->urb.vsize == vs_size &&
        brw->urb.gs_present == gs_present &&
        brw->urb.gsize == gs_size) {
@@ -176,6 +177,7 @@ gen7_upload_urb(struct brw_context *brw)
    unsigned chunk_size_bytes = 8192;
 
    /* Determine the size of the URB in chunks.
+    * BRW_NEW_URB_SIZE
     */
    unsigned urb_chunks = brw->urb.size * 1024 / chunk_size_bytes;
 
@@ -314,6 +316,7 @@ const struct brw_tracked_state gen7_urb = {
    .dirty = {
       .mesa = 0,
       .brw = BRW_NEW_CONTEXT |
+             BRW_NEW_URB_SIZE |
              BRW_NEW_GEOMETRY_PROGRAM |
              BRW_NEW_GS_PROG_DATA |
              BRW_NEW_VS_PROG_DATA,