xref: /aosp_15_r20/external/mesa3d/src/amd/vulkan/layers/radv_rage2.c (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1 /*
2  * Copyright © 2023 Valve Corporation
3  *
4  * SPDX-License-Identifier: MIT
5  */
6 
7 #include "radv_cmd_buffer.h"
8 #include "radv_device.h"
9 #include "radv_entrypoints.h"
10 #include "vk_common_entrypoints.h"
11 #include "vk_framebuffer.h"
12 
13 VKAPI_ATTR void VKAPI_CALL
rage2_CmdBeginRenderPass(VkCommandBuffer commandBuffer,const VkRenderPassBeginInfo * pRenderPassBegin,VkSubpassContents contents)14 rage2_CmdBeginRenderPass(VkCommandBuffer commandBuffer, const VkRenderPassBeginInfo *pRenderPassBegin,
15                          VkSubpassContents contents)
16 {
17    VK_FROM_HANDLE(vk_framebuffer, framebuffer, pRenderPassBegin->framebuffer);
18    VK_FROM_HANDLE(radv_cmd_buffer, cmd_buffer, commandBuffer);
19    struct radv_device *device = radv_cmd_buffer_device(cmd_buffer);
20 
21    VkRenderPassBeginInfo render_pass_begin = {
22       .sType = pRenderPassBegin->sType,
23       .pNext = pRenderPassBegin->pNext,
24       .renderPass = pRenderPassBegin->renderPass,
25       .framebuffer = pRenderPassBegin->framebuffer,
26       .clearValueCount = pRenderPassBegin->clearValueCount,
27       .pClearValues = pRenderPassBegin->pClearValues,
28    };
29 
30    /* RAGE2 seems to incorrectly set the render area and with dynamic rendering the concept of
31     * framebuffer dimensions goes away. Forcing the render area to be the framebuffer dimensions
32     * restores previous logic and it fixes rendering issues.
33     */
34    render_pass_begin.renderArea.offset.x = 0;
35    render_pass_begin.renderArea.offset.y = 0;
36    render_pass_begin.renderArea.extent.width = framebuffer->width;
37    render_pass_begin.renderArea.extent.height = framebuffer->height;
38 
39    device->layer_dispatch.app.CmdBeginRenderPass(commandBuffer, &render_pass_begin, contents);
40 }
41