#include "iris_resource.h"
#include "iris_context.h"
+#include "intel/common/gen_l3_config.h"
#include "blorp/blorp_genX_exec.h"
#include "util/u_upload_mgr.h"
unsigned vs_entry_size,
UNUSED unsigned sf_entry_size)
{
- // XXX: URB...
-#if 0
- if (ice->urb.vsize >= vs_entry_size)
- return;
-
- gen7_upload_urb(ice, vs_entry_size, false, false);
-#endif
+ struct iris_context *ice = blorp_batch->blorp->driver_ctx;
+ struct iris_batch *batch = blorp_batch->driver_batch;
+ const struct gen_device_info *devinfo = &batch->screen->devinfo;
+
+ // XXX: Track last URB config and avoid re-emitting it if it's good enough
+ const unsigned push_size_kB = 32;
+ unsigned entries[4];
+ unsigned start[4];
+ unsigned size[4] = { vs_entry_size, 1, 1, 1 };
+
+ gen_get_urb_config(devinfo, 1024 * push_size_kB,
+ 1024 * ice->shaders.urb_size,
+ false, false, size, entries, start);
+
+ for (int i = MESA_SHADER_VERTEX; i <= MESA_SHADER_GEOMETRY; i++) {
+ blorp_emit(blorp_batch, GENX(3DSTATE_URB_VS), urb) {
+ urb._3DCommandSubOpcode += i;
+ urb.VSURBStartingAddress = start[i];
+ urb.VSURBEntryAllocationSize = size[i] - 1;
+ urb.VSNumberofURBEntries = entries[i];
+ }
+ }
}
static void