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