anv: Embed isl_surf into anv_surface
[mesa.git] / src / vulkan / anv_pass.c
index c30602399066e44b29a5014919207c99f260deaa..6742274c72abd8c45109955b9839beffe4d59edb 100644 (file)
@@ -26,6 +26,7 @@
 VkResult anv_CreateRenderPass(
     VkDevice                                    _device,
     const VkRenderPassCreateInfo*               pCreateInfo,
+    const VkAllocationCallbacks*                pAllocator,
     VkRenderPass*                               pRenderPass)
 {
    ANV_FROM_HANDLE(anv_device, device, _device);
@@ -40,8 +41,8 @@ VkResult anv_CreateRenderPass(
    attachments_offset = size;
    size += pCreateInfo->attachmentCount * sizeof(pass->attachments[0]);
 
-   pass = anv_device_alloc(device, size, 8,
-                           VK_SYSTEM_ALLOC_TYPE_API_OBJECT);
+   pass = anv_alloc2(&device->alloc, pAllocator, size, 8,
+                     VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
    if (pass == NULL)
       return vk_error(VK_ERROR_OUT_OF_HOST_MEMORY);
 
@@ -62,48 +63,34 @@ VkResult anv_CreateRenderPass(
       att->stencil_load_op = pCreateInfo->pAttachments[i].stencilLoadOp;
       // att->store_op = pCreateInfo->pAttachments[i].storeOp;
       // att->stencil_store_op = pCreateInfo->pAttachments[i].stencilStoreOp;
-
-      if (anv_format_is_color(att->format)) {
-         if (att->load_op == VK_ATTACHMENT_LOAD_OP_CLEAR) {
-            ++pass->num_color_clear_attachments;
-         }
-      } else {
-         if (att->format->depth_format &&
-             att->load_op == VK_ATTACHMENT_LOAD_OP_CLEAR) {
-            pass->has_depth_clear_attachment = true;
-         }
-
-         if (att->format->has_stencil &&
-             att->stencil_load_op == VK_ATTACHMENT_LOAD_OP_CLEAR) {
-            pass->has_stencil_clear_attachment = true;
-         }
-      }
    }
 
    for (uint32_t i = 0; i < pCreateInfo->subpassCount; i++) {
       const VkSubpassDescription *desc = &pCreateInfo->pSubpasses[i];
       struct anv_subpass *subpass = &pass->subpasses[i];
 
-      subpass->input_count = desc->inputCount;
-      subpass->color_count = desc->colorCount;
+      subpass->input_count = desc->inputAttachmentCount;
+      subpass->color_count = desc->colorAttachmentCount;
 
-      if (desc->inputCount > 0) {
+      if (desc->inputAttachmentCount > 0) {
          subpass->input_attachments =
-            anv_device_alloc(device, desc->inputCount * sizeof(uint32_t),
-                             8, VK_SYSTEM_ALLOC_TYPE_API_OBJECT);
+            anv_alloc2(&device->alloc, pAllocator,
+                       desc->inputAttachmentCount * sizeof(uint32_t), 8,
+                       VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
 
-         for (uint32_t j = 0; j < desc->inputCount; j++) {
+         for (uint32_t j = 0; j < desc->inputAttachmentCount; j++) {
             subpass->input_attachments[j]
                = desc->pInputAttachments[j].attachment;
          }
       }
 
-      if (desc->colorCount > 0) {
+      if (desc->colorAttachmentCount > 0) {
          subpass->color_attachments =
-            anv_device_alloc(device, desc->colorCount * sizeof(uint32_t),
-                             8, VK_SYSTEM_ALLOC_TYPE_API_OBJECT);
+            anv_alloc2(&device->alloc, pAllocator,
+                       desc->colorAttachmentCount * sizeof(uint32_t), 8,
+                       VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
 
-         for (uint32_t j = 0; j < desc->colorCount; j++) {
+         for (uint32_t j = 0; j < desc->colorAttachmentCount; j++) {
             subpass->color_attachments[j]
                = desc->pColorAttachments[j].attachment;
          }
@@ -111,16 +98,22 @@ VkResult anv_CreateRenderPass(
 
       if (desc->pResolveAttachments) {
          subpass->resolve_attachments =
-            anv_device_alloc(device, desc->colorCount * sizeof(uint32_t),
-                             8, VK_SYSTEM_ALLOC_TYPE_API_OBJECT);
+            anv_alloc2(&device->alloc, pAllocator,
+                       desc->colorAttachmentCount * sizeof(uint32_t), 8,
+                       VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
 
-         for (uint32_t j = 0; j < desc->colorCount; j++) {
+         for (uint32_t j = 0; j < desc->colorAttachmentCount; j++) {
             subpass->resolve_attachments[j]
                = desc->pResolveAttachments[j].attachment;
          }
       }
 
-      subpass->depth_stencil_attachment = desc->depthStencilAttachment.attachment;
+      if (desc->pDepthStencilAttachment) {
+         subpass->depth_stencil_attachment =
+            desc->pDepthStencilAttachment->attachment;
+      } else {
+         subpass->depth_stencil_attachment = VK_ATTACHMENT_UNUSED;
+      }
    }
 
    *pRenderPass = anv_render_pass_to_handle(pass);
@@ -130,7 +123,8 @@ VkResult anv_CreateRenderPass(
 
 void anv_DestroyRenderPass(
     VkDevice                                    _device,
-    VkRenderPass                                _pass)
+    VkRenderPass                                _pass,
+    const VkAllocationCallbacks*                pAllocator)
 {
    ANV_FROM_HANDLE(anv_device, device, _device);
    ANV_FROM_HANDLE(anv_render_pass, pass, _pass);
@@ -141,20 +135,18 @@ void anv_DestroyRenderPass(
        */
       struct anv_subpass *subpass = &pass->subpasses[i];
 
-      anv_device_free(device, subpass->input_attachments);
-      anv_device_free(device, subpass->color_attachments);
-      anv_device_free(device, subpass->resolve_attachments);
+      anv_free2(&device->alloc, pAllocator, subpass->input_attachments);
+      anv_free2(&device->alloc, pAllocator, subpass->color_attachments);
+      anv_free2(&device->alloc, pAllocator, subpass->resolve_attachments);
    }
 
-   anv_device_free(device, pass);
+   anv_free2(&device->alloc, pAllocator, pass);
 }
 
-VkResult anv_GetRenderAreaGranularity(
+void anv_GetRenderAreaGranularity(
     VkDevice                                    device,
     VkRenderPass                                renderPass,
     VkExtent2D*                                 pGranularity)
 {
    *pGranularity = (VkExtent2D) { 1, 1 };
-
-   return VK_SUCCESS;
 }