turnip: don't set SP_FS_CTRL_REG0_VARYING if only fragcoord is used
[mesa.git] / src / freedreno / vulkan / tu_meta_buffer.c
1 #include "tu_private.h"
2 #include "tu_blit.h"
3 #include "tu_cs.h"
4
5 void
6 tu_CmdFillBuffer(VkCommandBuffer commandBuffer,
7 VkBuffer dstBuffer,
8 VkDeviceSize dstOffset,
9 VkDeviceSize fillSize,
10 uint32_t data)
11 {
12 TU_FROM_HANDLE(tu_cmd_buffer, cmd, commandBuffer);
13 TU_FROM_HANDLE(tu_buffer, buffer, dstBuffer);
14
15 if (fillSize == VK_WHOLE_SIZE)
16 fillSize = buffer->size - dstOffset;
17
18 tu_bo_list_add(&cmd->bo_list, buffer->bo, MSM_SUBMIT_BO_WRITE);
19
20 tu_blit(cmd, &(struct tu_blit) {
21 .dst = {
22 .fmt = VK_FORMAT_R32_UINT,
23 .va = tu_buffer_iova(buffer) + dstOffset,
24 .width = fillSize / 4,
25 .height = 1,
26 .samples = 1,
27 },
28 .layers = 1,
29 .clear_value[0] = data,
30 .type = TU_BLIT_CLEAR,
31 .buffer = true,
32 });
33 }
34
35 void
36 tu_CmdUpdateBuffer(VkCommandBuffer commandBuffer,
37 VkBuffer dstBuffer,
38 VkDeviceSize dstOffset,
39 VkDeviceSize dataSize,
40 const void *pData)
41 {
42 TU_FROM_HANDLE(tu_cmd_buffer, cmd, commandBuffer);
43 TU_FROM_HANDLE(tu_buffer, buffer, dstBuffer);
44
45 tu_bo_list_add(&cmd->bo_list, buffer->bo, MSM_SUBMIT_BO_WRITE);
46
47 struct ts_cs_memory tmp;
48 VkResult result = tu_cs_alloc(cmd->device, &cmd->sub_cs, DIV_ROUND_UP(dataSize, 64), 64, &tmp);
49 if (result != VK_SUCCESS) {
50 cmd->record_result = result;
51 return;
52 }
53
54 memcpy(tmp.map, pData, dataSize);
55
56 tu_blit(cmd, &(struct tu_blit) {
57 .dst = {
58 .fmt = VK_FORMAT_R32_UINT,
59 .va = tu_buffer_iova(buffer) + dstOffset,
60 .width = dataSize / 4,
61 .height = 1,
62 .samples = 1,
63 },
64 .src = {
65 .fmt = VK_FORMAT_R32_UINT,
66 .va = tmp.iova,
67 .width = dataSize / 4,
68 .height = 1,
69 .samples = 1,
70 },
71 .layers = 1,
72 .type = TU_BLIT_COPY,
73 .buffer = true,
74 });
75 }