anv: Emit 3DSTATE_URB_* via a loop.
[mesa.git] / src / intel / vulkan / anv_pipeline.c
index a7feefb540e8c0fb879a829d6975182463f62b6c..df78362ee70dbf8fcb1943def3574963b71533df 100644 (file)
@@ -193,6 +193,11 @@ void anv_DestroyPipeline(
    ANV_FROM_HANDLE(anv_device, device, _device);
    ANV_FROM_HANDLE(anv_pipeline, pipeline, _pipeline);
 
+   for (unsigned s = 0; s < MESA_SHADER_STAGES; s++) {
+      free(pipeline->bindings[s].surface_to_descriptor);
+      free(pipeline->bindings[s].sampler_to_descriptor);
+   }
+
    anv_reloc_list_finish(&pipeline->batch_relocs,
                          pAllocator ? pAllocator : &device->alloc);
    if (pipeline->blend_state.map)
@@ -336,9 +341,8 @@ anv_pipeline_compile(struct anv_pipeline *pipeline,
    if (pipeline->layout && pipeline->layout->stage[stage].has_dynamic_offsets)
       prog_data->nr_params += MAX_DYNAMIC_BUFFERS * 2;
 
-   if (pipeline->bindings[stage].image_count > 0)
-      prog_data->nr_params += pipeline->bindings[stage].image_count *
-                              BRW_IMAGE_PARAM_SIZE;
+   if (nir->info.num_images > 0)
+      prog_data->nr_params += nir->info.num_images * BRW_IMAGE_PARAM_SIZE;
 
    if (prog_data->nr_params > 0) {
       /* XXX: I think we're leaking this */
@@ -866,13 +870,21 @@ gen7_compute_urb_partition(struct anv_pipeline *pipeline)
     * - VS
     * - GS
     */
-   pipeline->urb.vs_start = push_constant_chunks;
-   pipeline->urb.vs_size = vs_size;
-   pipeline->urb.nr_vs_entries = nr_vs_entries;
+   pipeline->urb.start[MESA_SHADER_VERTEX] = push_constant_chunks;
+   pipeline->urb.size[MESA_SHADER_VERTEX] = vs_size;
+   pipeline->urb.entries[MESA_SHADER_VERTEX] = nr_vs_entries;
+
+   pipeline->urb.start[MESA_SHADER_GEOMETRY] = push_constant_chunks + vs_chunks;
+   pipeline->urb.size[MESA_SHADER_GEOMETRY] = gs_size;
+   pipeline->urb.entries[MESA_SHADER_GEOMETRY] = nr_gs_entries;
+
+   pipeline->urb.start[MESA_SHADER_TESS_CTRL] = push_constant_chunks;
+   pipeline->urb.size[MESA_SHADER_TESS_CTRL] = 1;
+   pipeline->urb.entries[MESA_SHADER_TESS_CTRL] = 0;
 
-   pipeline->urb.gs_start = push_constant_chunks + vs_chunks;
-   pipeline->urb.gs_size = gs_size;
-   pipeline->urb.nr_gs_entries = nr_gs_entries;
+   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;
 }
 
 static void