MCPcopy Create free account
hub / github.com/Inori/GPCS4 / createRenderTarget

Method createRenderTarget

GPCS4/Graphics/Gnm/GnmResourceFactory.cpp:96–163  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

94 }
95
96 bool GnmResourceFactory::createRenderTarget(
97 const RenderTarget* target,
98 SceRenderTarget& targetImage)
99 {
100
101 VltImageCreateInfo imageInfo;
102 imageInfo.type = VK_IMAGE_TYPE_2D;
103 imageInfo.format = cvt::convertDataFormat(target->getDataFormat());
104 imageInfo.flags = 0;
105 imageInfo.sampleCount = cvt::convertNumFragments(target->getNumFragments()); // Should we use getNumSamples?
106 imageInfo.extent = { target->getWidth(), target->getHeight(), 1 };
107 imageInfo.numLayers = 1;
108 imageInfo.mipLevels = 1;
109
110 imageInfo.usage = VK_IMAGE_USAGE_SAMPLED_BIT |
111 VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT |
112 VK_IMAGE_USAGE_TRANSFER_SRC_BIT |
113 VK_IMAGE_USAGE_TRANSFER_DST_BIT;
114
115 imageInfo.stages = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT |
116 VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT |
117 VK_PIPELINE_STAGE_TRANSFER_BIT;
118
119 imageInfo.access = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT |
120 VK_ACCESS_SHADER_READ_BIT |
121 VK_ACCESS_TRANSFER_READ_BIT |
122 VK_ACCESS_TRANSFER_WRITE_BIT;
123
124 imageInfo.tiling = VK_IMAGE_TILING_OPTIMAL;
125 imageInfo.layout = optimizeLayout(imageInfo.usage);
126
127 VltImageViewCreateInfo viewInfo;
128 viewInfo.type = VK_IMAGE_VIEW_TYPE_2D;
129 viewInfo.format = imageInfo.format;
130 viewInfo.usage = imageInfo.usage;
131 viewInfo.aspect = VK_IMAGE_ASPECT_COLOR_BIT;
132 viewInfo.minLevel = 0;
133 viewInfo.numLevels = 1;
134 viewInfo.minLayer = 0;
135 viewInfo.numLayers = 1;
136
137 targetImage.image = m_device->createImage(imageInfo, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT);
138 targetImage.imageView = m_device->createImageView(targetImage.image, viewInfo);
139 targetImage.renderTarget = *target;
140
141 // Set debug name
142 auto imageName = fmt::format("ColorTarget_{}_{}",
143 s_objectId++,
144 fmt::ptr(target->getBaseAddress()));
145 auto viewName = fmt::format("ColorView_{}_{}",
146 s_objectId++,
147 fmt::ptr(target->getBaseAddress()));
148
149 VkDebugUtilsObjectNameInfoEXT nameInfo;
150 nameInfo.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT;
151 nameInfo.pNext = nullptr;
152 nameInfo.objectType = VK_OBJECT_TYPE_IMAGE;
153 nameInfo.pObjectName = imageName.c_str();

Callers 1

getColorTargetMethod · 0.80

Calls 14

convertDataFormatFunction · 0.85
convertNumFragmentsFunction · 0.85
setObjectNameMethod · 0.80
formatFunction · 0.50
ptrFunction · 0.50
getDataFormatMethod · 0.45
getNumFragmentsMethod · 0.45
getWidthMethod · 0.45
getHeightMethod · 0.45
createImageMethod · 0.45
createImageViewMethod · 0.45
getBaseAddressMethod · 0.45

Tested by

no test coverage detected