anv: Emit 3DSTATE_PUSH_CONSTANT_ALLOC_* via a loop.
authorKenneth Graunke <kenneth@whitecape.org>
Mon, 22 Feb 2016 23:46:23 +0000 (15:46 -0800)
committerKenneth Graunke <kenneth@whitecape.org>
Wed, 24 Feb 2016 19:13:08 +0000 (11:13 -0800)
Now we're emitting HS and DS packets as well.

src/intel/vulkan/anv_pipeline.c
src/intel/vulkan/anv_private.h
src/intel/vulkan/genX_pipeline_util.h

index df78362ee70dbf8fcb1943def3574963b71533df..672640ac24ccd841be66512bba91bad93d43c608 100644 (file)
@@ -885,6 +885,12 @@ gen7_compute_urb_partition(struct anv_pipeline *pipeline)
    pipeline->urb.start[MESA_SHADER_TESS_EVAL] = push_constant_chunks;
    pipeline->urb.size[MESA_SHADER_TESS_EVAL] = 1;
    pipeline->urb.entries[MESA_SHADER_TESS_EVAL] = 0;
+
+   pipeline->urb.push_size[MESA_SHADER_VERTEX] = 4;
+   pipeline->urb.push_size[MESA_SHADER_TESS_CTRL] = 0;
+   pipeline->urb.push_size[MESA_SHADER_TESS_EVAL] = 0;
+   pipeline->urb.push_size[MESA_SHADER_GEOMETRY] = 4;
+   pipeline->urb.push_size[MESA_SHADER_FRAGMENT] = 4;
 }
 
 static void
index 3e3cbf09a68d3fc456384865e529e17a980568a9..041ad87f75dd9a83bea940a7139bd1828e44cad9 100644 (file)
@@ -1410,6 +1410,7 @@ struct anv_pipeline {
    uint32_t                                     scratch_start[MESA_SHADER_STAGES];
    uint32_t                                     total_scratch;
    struct {
+      uint8_t                                   push_size[MESA_SHADER_FRAGMENT + 1];
       uint32_t                                  start[MESA_SHADER_GEOMETRY + 1];
       uint32_t                                  size[MESA_SHADER_GEOMETRY + 1];
       uint32_t                                  entries[MESA_SHADER_GEOMETRY + 1];
index dea96a934b8867ce21ed49000a7d9f1c81863e39..cf4e03587415bb65b790c13375ff9c94e1b8d60d 100644 (file)
@@ -200,15 +200,14 @@ emit_urb_setup(struct anv_pipeline *pipeline)
                   .Address = { &device->workaround_bo, 0 });
 #endif
 
-   anv_batch_emit(&pipeline->batch, GENX(3DSTATE_PUSH_CONSTANT_ALLOC_VS),
-      .ConstantBufferOffset                     = 0,
-      .ConstantBufferSize                       = 4);
-   anv_batch_emit(&pipeline->batch, GENX(3DSTATE_PUSH_CONSTANT_ALLOC_GS),
-      .ConstantBufferOffset                     = 4,
-      .ConstantBufferSize                       = 4);
-   anv_batch_emit(&pipeline->batch, GENX(3DSTATE_PUSH_CONSTANT_ALLOC_PS),
-      .ConstantBufferOffset                     = 8,
-      .ConstantBufferSize                       = 4);
+   unsigned push_start = 0;
+   for (int i = MESA_SHADER_VERTEX; i <= MESA_SHADER_FRAGMENT; i++) {
+      anv_batch_emit(&pipeline->batch, GENX(3DSTATE_PUSH_CONSTANT_ALLOC_VS),
+         ._3DCommandSubOpcode                   = 18 + i,
+         .ConstantBufferOffset                  = push_start,
+         .ConstantBufferSize                    = pipeline->urb.push_size[i]);
+      push_start += pipeline->urb.push_size[i];
+   }
 
    for (int i = MESA_SHADER_VERTEX; i <= MESA_SHADER_GEOMETRY; i++) {
       anv_batch_emit(&pipeline->batch, GENX(3DSTATE_URB_VS),