radv: Disable depth & stencil tests when the depthbuffer doesn't support it.
authorBas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Wed, 28 Jun 2017 22:38:29 +0000 (00:38 +0200)
committerBas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Wed, 5 Jul 2017 18:23:00 +0000 (20:23 +0200)
Signed-off-by: Bas Nieuwenhuizen <basni@google.com>
Acked-by: Dave Airlie <airlied@redhat.com>
src/amd/vulkan/radv_meta_blit.c
src/amd/vulkan/radv_meta_blit2d.c
src/amd/vulkan/radv_meta_clear.c
src/amd/vulkan/radv_meta_decompress.c
src/amd/vulkan/radv_pipeline.c
src/amd/vulkan/vk_format.h

index 89ff82ec68d3fb1840152afa8cd73dfeade827b9..718e9c50e6ec7dd68f6308be80a395f806b94860 100644 (file)
@@ -881,7 +881,7 @@ radv_device_init_meta_blit_depth(struct radv_device *device,
                                               .sType = VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO,
                                                       .attachmentCount = 1,
                                                       .pAttachments = &(VkAttachmentDescription) {
-                                                      .format = 0,
+                                                      .format = VK_FORMAT_D32_SFLOAT,
                                                       .loadOp = VK_ATTACHMENT_LOAD_OP_LOAD,
                                                       .storeOp = VK_ATTACHMENT_STORE_OP_STORE,
                                                       .initialLayout = VK_IMAGE_LAYOUT_GENERAL,
@@ -1039,7 +1039,7 @@ radv_device_init_meta_blit_stencil(struct radv_device *device,
                                               .sType = VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO,
                                                       .attachmentCount = 1,
                                                       .pAttachments = &(VkAttachmentDescription) {
-                                                      .format = 0,
+                                                      .format = VK_FORMAT_S8_UINT,
                                                       .loadOp = VK_ATTACHMENT_LOAD_OP_LOAD,
                                                       .storeOp = VK_ATTACHMENT_STORE_OP_STORE,
                                                       .initialLayout = VK_IMAGE_LAYOUT_GENERAL,
index fb14cfbcdda5918a9baddf6ea3717d12eaa0bceb..2f18350fd71c48ae7c4b9225dd94faa1fc674cc8 100644 (file)
@@ -858,7 +858,7 @@ blit2d_init_depth_only_pipeline(struct radv_device *device,
                                                       .sType = VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO,
                                                               .attachmentCount = 1,
                                                               .pAttachments = &(VkAttachmentDescription) {
-                                                              .format = 0,
+                                                              .format = VK_FORMAT_D32_SFLOAT,
                                                               .loadOp = VK_ATTACHMENT_LOAD_OP_LOAD,
                                                               .storeOp = VK_ATTACHMENT_STORE_OP_STORE,
                                                               .initialLayout = VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
@@ -1013,7 +1013,7 @@ blit2d_init_stencil_only_pipeline(struct radv_device *device,
                                                       .sType = VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO,
                                                               .attachmentCount = 1,
                                                               .pAttachments = &(VkAttachmentDescription) {
-                                                              .format = 0,
+                                                              .format = VK_FORMAT_S8_UINT,
                                                               .loadOp = VK_ATTACHMENT_LOAD_OP_LOAD,
                                                               .storeOp = VK_ATTACHMENT_STORE_OP_STORE,
                                                               .initialLayout = VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
index 06485137fc7baa8b48a60ee29405b9826decb1c2..bd979973e71bf404c3ecb33881e41d4ff86aee92 100644 (file)
@@ -455,7 +455,7 @@ create_depthstencil_renderpass(struct radv_device *device,
                                               .sType = VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO,
                                                       .attachmentCount = 1,
                                                       .pAttachments = &(VkAttachmentDescription) {
-                                                      .format = VK_FORMAT_UNDEFINED,
+                                                      .format = VK_FORMAT_D32_SFLOAT_S8_UINT,
                                                       .samples = samples,
                                                       .loadOp = VK_ATTACHMENT_LOAD_OP_LOAD,
                                                       .storeOp = VK_ATTACHMENT_STORE_OP_STORE,
index 5a34863690762b16b6eae2ea64b639a0e273de8d..7afe08fbdb269a86a9a825c31f46e942e3bf9b65 100644 (file)
@@ -36,7 +36,7 @@ create_pass(struct radv_device *device)
        const VkAllocationCallbacks *alloc = &device->meta_state.alloc;
        VkAttachmentDescription attachment;
 
-       attachment.format = VK_FORMAT_UNDEFINED;
+       attachment.format = VK_FORMAT_D32_SFLOAT_S8_UINT;
        attachment.samples = 1;
        attachment.loadOp = VK_ATTACHMENT_LOAD_OP_LOAD;
        attachment.storeOp = VK_ATTACHMENT_STORE_OP_STORE;
index 49610a1a223a0a45f960ba4e59a6524797b68ac0..061121b824549a7f9ace072f90a63bb6ff9f4a00 100644 (file)
@@ -1217,12 +1217,24 @@ radv_pipeline_init_depth_stencil_state(struct radv_pipeline *pipeline,
        memset(ds, 0, sizeof(*ds));
        if (!vkds)
                return;
-       ds->db_depth_control = S_028800_Z_ENABLE(vkds->depthTestEnable ? 1 : 0) |
-               S_028800_Z_WRITE_ENABLE(vkds->depthWriteEnable ? 1 : 0) |
-               S_028800_ZFUNC(vkds->depthCompareOp) |
-               S_028800_DEPTH_BOUNDS_ENABLE(vkds->depthBoundsTestEnable ? 1 : 0);
 
-       if (vkds->stencilTestEnable) {
+       RADV_FROM_HANDLE(radv_render_pass, pass, pCreateInfo->renderPass);
+       struct radv_subpass *subpass = pass->subpasses + pCreateInfo->subpass;
+       if (subpass->depth_stencil_attachment.attachment == VK_ATTACHMENT_UNUSED)
+               return;
+
+       struct radv_render_pass_attachment *attachment = pass->attachments + subpass->depth_stencil_attachment.attachment;
+       bool has_depth_attachment = vk_format_is_depth(attachment->format);
+       bool has_stencil_attachment = vk_format_is_stencil(attachment->format);
+
+       if (has_depth_attachment) {
+               ds->db_depth_control = S_028800_Z_ENABLE(vkds->depthTestEnable ? 1 : 0) |
+                                      S_028800_Z_WRITE_ENABLE(vkds->depthWriteEnable ? 1 : 0) |
+                                      S_028800_ZFUNC(vkds->depthCompareOp) |
+                                      S_028800_DEPTH_BOUNDS_ENABLE(vkds->depthBoundsTestEnable ? 1 : 0);
+       }
+
+       if (has_stencil_attachment && vkds->stencilTestEnable) {
                ds->db_depth_control |= S_028800_STENCIL_ENABLE(1) | S_028800_BACKFACE_ENABLE(1);
                ds->db_depth_control |= S_028800_STENCILFUNC(vkds->front.compareOp);
                ds->db_stencil_control |= S_02842C_STENCILFAIL(si_translate_stencil_op(vkds->front.failOp));
index af71e29f6adee49eead61d449e3d513dd726e327..c2c7ca4ce249c8bb987ed3628832dd913ade661e 100644 (file)
@@ -366,6 +366,19 @@ vk_format_is_depth(VkFormat format)
        return vk_format_has_depth(desc);
 }
 
+static inline bool
+vk_format_is_stencil(VkFormat format)
+{
+       const struct vk_format_description *desc = vk_format_description(format);
+
+       assert(desc);
+       if (!desc) {
+               return false;
+       }
+
+       return vk_format_has_stencil(desc);
+}
+
 static inline bool
 vk_format_is_color(VkFormat format)
 {