Skip to content

Commit 34ab2fb

Browse files
committed
Added renderdoc layer and cleanup
Also added stubs for compute
1 parent 5872d10 commit 34ab2fb

File tree

4 files changed

+57
-86
lines changed

4 files changed

+57
-86
lines changed

controller.cpp

+22-14
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,12 @@
2222
#include <cstdio>
2323
#include <limits>
2424

25-
const char* layer = "VK_LAYER_LUNARG_standard_validation";
25+
const char* layers[] = {
26+
"VK_LAYER_LUNARG_standard_validation",
27+
"VK_LAYER_RENDERDOC_Capture"
28+
};
29+
30+
const uint32_t numLayers = 2;
2631

2732
Controller::Controller()
2833
{
@@ -115,24 +120,27 @@ bool Controller::Init()
115120

116121
supported = false;
117122

118-
for(uint32_t i = 0; i < layerCount; ++i)
123+
for(uint32_t i = 0; i < numLayers; ++i)
119124
{
120-
if (strcmp(layer, availableLayers[i].layerName) == 0)
125+
for(uint32_t j = 0; j < layerCount; ++j)
121126
{
122-
supported = true;
123-
break;
127+
if (strcmp(layers[i], availableLayers[j].layerName) == 0)
128+
{
129+
supported = true;
130+
break;
131+
}
132+
133+
std::cout << availableLayers[j].layerName << std::endl;
124134
}
125135

126-
std::cout << availableLayers[i].layerName << std::endl;
127-
}
128-
129-
if (supported == false)
130-
{
131-
std::cout << "Layer not supported:" << layer << std::endl;
136+
if (supported == false)
137+
{
138+
std::cout << "Layer not supported:" << layers[i] << std::endl;
139+
}
132140
}
133141

134142
createInfo.enabledLayerCount = 1;
135-
createInfo.ppEnabledLayerNames = &layer;
143+
createInfo.ppEnabledLayerNames = layers;
136144

137145

138146
VkResult result = vkCreateInstance(&createInfo, nullptr, &instance);
@@ -216,7 +224,7 @@ bool Controller::SetupQueue()
216224

217225
for (uint32_t i = 0; i < queueFamilyCount; ++i)
218226
{
219-
std::cout << queueFamilies[i].queueCount << ", " << std::hex << queueFamilies[i].queueFlags << std::endl;
227+
std::cout << "queue families: " << queueFamilies[i].queueCount << ", " << std::hex << queueFamilies[i].queueFlags << std::dec << std::endl;
220228

221229
if (queueFamilies[i].queueCount > 0 && queueFamilies[i].queueFlags & VK_QUEUE_GRAPHICS_BIT)
222230
{
@@ -286,7 +294,7 @@ bool Controller::SetupDevice(VkSurfaceKHR& surface)
286294
deviceCreateInfo.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO;
287295
deviceCreateInfo.pEnabledFeatures = &deviceFeatures;
288296
deviceCreateInfo.enabledLayerCount = 1;
289-
deviceCreateInfo.ppEnabledLayerNames = &layer;
297+
deviceCreateInfo.ppEnabledLayerNames = layers;
290298
deviceCreateInfo.pQueueCreateInfos = &queueCreateInfo;
291299
deviceCreateInfo.queueCreateInfoCount = 1;
292300
deviceCreateInfo.enabledExtensionCount = requestedDeviceExtensionCount;

makefile

+3-3
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,14 @@
1111
# You should have received a copy of the GNU General Public License
1212
# along with this program. If not, see <http://www.gnu.org/licenses/>.
1313

14-
VULKAN_PATH = /c/Dev/VulkanSDK/1.0.26.0
14+
VULKAN_PATH = /c/Dev/VulkanSDK/1.0.30.0
1515
GLFW_PATH = /c/Dev/glfw/glfw-3.2.1.bin.WIN32
1616
GLM_PATH = /C/Dev/glm
1717

1818
CFLAGS = -std=c++11 -Wall
1919
INCLUDE = -I$(VULKAN_PATH)/include -I$(GLFW_PATH)/include -I$(GLM_PATH)
20-
LDFLAGS = -L$(VULKAN_PATH)/lib -L$(GLFW_PATH)/lib-mingw
21-
LDLIBS = -lvulkan -lglfw3 -lgdi32
20+
LDFLAGS = -L$(VULKAN_PATH)/Bin32 -L$(GLFW_PATH)/lib-mingw
21+
LDLIBS = -lvulkan-1 -lglfw3 -lgdi32
2222
DEFINES = -DVK_USE_PLATFORM_WIN32_KHR
2323
OBJS = renderer.o system.o controller.o compositor.o
2424

renderer.cpp

+22-58
Original file line numberDiff line numberDiff line change
@@ -34,53 +34,30 @@
3434
#include <glm/gtc/type_ptr.hpp>
3535
#include <glm/ext.hpp> //"glm/gtx/string_cast.hpp"
3636

37-
float vertexInfo2[][3] = {
38-
{-0.5f, -0.5f, 0.0f}, {1.0f, 0.0f, 0.0f},
39-
{0.5f, -0.5f, 0.0f}, {0.0f, 1.0f, 0.0f},
40-
{0.5f, 0.5f, 0.0f}, {0.0f, 0.0f, 1.0f},
41-
{-0.5f, 0.5f, 0.0f}, {1.0f, 1.0f, 1.0f}
42-
};
43-
44-
const uint16_t indices2[] = {
45-
0, 1, 2, 2, 3, 1
46-
};
47-
4837
Renderer::Renderer(VkExtent2D& extent, VkPhysicalDeviceMemoryProperties& memProps)
4938
: imageExtent(extent),
5039
memProperties(memProps)
51-
{
52-
numVertsX = 7;
53-
numVertsY = 7;
54-
40+
{
5541
numVerts = numVertsX * numVertsY;
5642
numPrims = (numVertsX - 1) * (numVertsY - 1) * 2;
43+
vertexInfoSize = sizeof(float) * numComponents * numVerts * 2;
44+
numIndices = numPrims * numComponents;
45+
indicesBufferSize = sizeof(uint16_t) * numIndices;
5746

58-
uint32_t numComponents = 3;
59-
60-
uint32_t vertInfoSize = sizeof(float)*numComponents*numVerts*2;
61-
62-
mat4Size = vertInfoSize;
63-
64-
vertexInfo = static_cast<float*>(malloc(vertInfoSize));
65-
66-
numIndices = numPrims * 3;
67-
68-
indicesBufferSize = sizeof(uint16_t)*numIndices;
69-
47+
vertexInfo = static_cast<float*>(malloc(vertexInfoSize));
7048
indices = static_cast<uint16_t*>(malloc(indicesBufferSize));
71-
7249
framebuffers = static_cast<VkFramebuffer*>(malloc(sizeof(VkFramebuffer)*numFBOs));
7350
drawCommandBuffers = static_cast<VkCommandBuffer*>(malloc(sizeof(VkCommandBuffer)*numDrawCmdBuffers));
7451
attributeDescriptions = static_cast<VkVertexInputAttributeDescription*>(malloc(sizeof(VkVertexInputAttributeDescription)*numAttrDesc));
7552
}
7653

7754
Renderer::~Renderer()
7855
{
56+
free(vertexInfo);
57+
free(indices);
7958
free(framebuffers);
8059
free(drawCommandBuffers);
8160
free(attributeDescriptions);
82-
free(vertexInfo);
83-
free(indices);
8461
}
8562

8663
bool Renderer::Init(VkDevice& device, const VkFormat& surfaceFormat, const VkImageView* imageViews, uint32_t queueFamilyId)
@@ -105,8 +82,8 @@ bool Renderer::Init(VkDevice& device, const VkFormat& surfaceFormat, const VkIma
10582
for (uint32_t j = 0; j < numVertsX; ++j)
10683
{
10784
vertexInfo[index] = xPos;
108-
vertexInfo[index + 1] = yPos;
109-
vertexInfo[index + 2] = zPos;
85+
vertexInfo[index + 1] = zPos;
86+
vertexInfo[index + 2] = yPos;
11087

11188
vertexInfo[index + 3] = 0.0f;
11289
vertexInfo[index + 4] = 0.0f;
@@ -117,7 +94,6 @@ bool Renderer::Init(VkDevice& device, const VkFormat& surfaceFormat, const VkIma
11794
}
11895

11996
xPos = xStartPos;
120-
12197
yPos += delta;
12298
}
12399

@@ -140,11 +116,8 @@ bool Renderer::Init(VkDevice& device, const VkFormat& surfaceFormat, const VkIma
140116
}
141117

142118
SetupServerSideVertexBuffer(device);
143-
144119
SetupIndexBuffer(device);
145-
146120
SetupUniformBuffer(device);
147-
148121
SetupShaderParameters(device);
149122

150123
std::ifstream file("vert.spv", std::ios::ate | std::ios::binary);
@@ -499,18 +472,12 @@ void Renderer::ConstructFrames()
499472
renderPassBeginInfo.framebuffer = framebuffers[i];
500473

501474
vkBeginCommandBuffer(drawCommandBuffers[i], &beginInfo);
502-
503475
vkCmdBeginRenderPass(drawCommandBuffers[i], &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE);
504-
505476
vkCmdBindDescriptorSets(drawCommandBuffers[i], VK_PIPELINE_BIND_POINT_GRAPHICS, pipelineLayout, 0, 1, &descriptorSet, 0, nullptr);
506-
507477
vkCmdBindPipeline(drawCommandBuffers[i], VK_PIPELINE_BIND_POINT_GRAPHICS, pipeline);
508-
509478
vkCmdBindVertexBuffers(drawCommandBuffers[i], 0, 1, &vertexBuffer, offsets);
510479
vkCmdBindIndexBuffer(drawCommandBuffers[i], indexBuffer, 0, VK_INDEX_TYPE_UINT16);
511-
512480
vkCmdDrawIndexed(drawCommandBuffers[i], numIndices, 1, 0, 0, 0);
513-
514481
vkCmdEndRenderPass(drawCommandBuffers[i]);
515482

516483
result = vkEndCommandBuffer(drawCommandBuffers[i]);
@@ -589,7 +556,7 @@ bool Renderer::SetupShaderParameters(VkDevice& device)
589556
VkDescriptorBufferInfo bufferInfo = {};
590557
bufferInfo.buffer = uniformBuffer;
591558
bufferInfo.offset = 0;
592-
bufferInfo.range = mat4Size;
559+
bufferInfo.range = mvpSize;
593560

594561
VkWriteDescriptorSet descriptorWrite = {};
595562
descriptorWrite.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET;
@@ -638,12 +605,10 @@ bool Renderer::SetupClientSideVertexBuffer(VkDevice& device)
638605
{
639606
VkBufferCreateInfo bufferInfo = {};
640607
bufferInfo.sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO;
641-
bufferInfo.size = sizeof(float[3]) * numVertices * 2;
608+
bufferInfo.size = vertexInfoSize;
642609
bufferInfo.usage = VK_BUFFER_USAGE_VERTEX_BUFFER_BIT;
643610
bufferInfo.sharingMode = VK_SHARING_MODE_EXCLUSIVE;
644-
645-
std::cout << bufferInfo.size << std::endl;
646-
611+
647612
VkResult result = vkCreateBuffer(device, &bufferInfo, nullptr, &vertexBuffer);
648613

649614
if (result != VK_SUCCESS)
@@ -684,7 +649,7 @@ bool Renderer::SetupClientSideVertexBuffer(VkDevice& device)
684649

685650
bool Renderer::SetupServerSideVertexBuffer(VkDevice& device)
686651
{
687-
VkDeviceSize size = mat4Size; //sizeof(vertexInfo);
652+
VkDeviceSize size = vertexInfoSize;
688653

689654
VkMemoryPropertyFlags properties = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT;
690655
VkBufferUsageFlags usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT;
@@ -721,10 +686,12 @@ void Renderer::SetupDynamicTransfer(VkDevice& device)
721686
vkBeginCommandBuffer(dynamicTransferCommandBuffer, &beginInfo);
722687

723688
VkBufferCopy copyRegion = {};
724-
copyRegion.size = mat4Size;
725-
689+
copyRegion.size = mvpSize;
726690
vkCmdCopyBuffer(dynamicTransferCommandBuffer, uniformTransferBuffer, uniformBuffer, 1, &copyRegion);
727691

692+
copyRegion.size = vertexInfoSize;
693+
vkCmdCopyBuffer(dynamicTransferCommandBuffer, vertexTransferBuffer, vertexBuffer, 1, &copyRegion);
694+
728695
vkEndCommandBuffer(dynamicTransferCommandBuffer);
729696
}
730697

@@ -748,9 +715,6 @@ VkCommandBuffer& Renderer::TransferStaticBuffers(VkDevice& device)
748715
//copyRegion.srcOffset = 0;
749716
//copyRegion.dstOffset = 0;
750717

751-
copyRegion.size = mat4Size;//sizeof(vertexInfo);
752-
vkCmdCopyBuffer(staticTransferCommandBuffer, vertexTransferBuffer, vertexBuffer, 1, &copyRegion);
753-
754718
copyRegion.size = indicesBufferSize;
755719
vkCmdCopyBuffer(staticTransferCommandBuffer, indexTransferBuffer, indexBuffer, 1, &copyRegion);
756720

@@ -766,14 +730,14 @@ VkCommandBuffer& Renderer::TransferDynamicBuffers(VkDevice& device)
766730
auto currentTime = std::chrono::high_resolution_clock::now();
767731
float time = std::chrono::duration_cast<std::chrono::milliseconds>(currentTime - startTime).count() / 1000.0f;
768732

769-
glm::mat4 model = glm::rotate(glm::mat4(), time * glm::radians(90.0f), glm::vec3(0.0f, 0.0f, 1.0f));
770-
glm::mat4 view = glm::lookAt(glm::vec3(2.0f, 2.0f, 2.0f), glm::vec3(0.0f, 0.0f, 0.0f), glm::vec3(0.0f, 0.0f, 1.0f));
771-
glm::mat4 proj = glm::perspective(glm::radians(45.0f), imageExtent.width / (float) imageExtent.height, 0.1f, 100.0f);
733+
glm::mat4 model; // = glm::rotate(glm::mat4(), time * glm::radians(90.0f), glm::vec3(0.0f, 0.0f, 1.0f));
734+
glm::mat4 view = glm::lookAt(glm::vec3(0.0f, 3.0f, 3.0f), glm::vec3(0.0f, 0.0f, 0.0f), glm::vec3(0.0f, 1.0f, 0.0f));
735+
glm::mat4 proj = glm::perspective(glm::radians(90.0f), imageExtent.width / (float) imageExtent.height, 0.1f, 100.0f);
772736
proj[1][1] *= -1;
773737

774738
mvp = proj * view * model;
775739

776-
VkDeviceSize size = mat4Size;
740+
VkDeviceSize size = mvpSize;
777741

778742
void* data;
779743
vkMapMemory(device, uniformTransferBufferMemory, 0, size, 0, &data);
@@ -842,7 +806,7 @@ bool Renderer::SetupBuffer(VkDevice& device, VkBuffer& buffer, VkDeviceMemory& m
842806

843807
void Renderer::SetupUniformBuffer(VkDevice &device)
844808
{
845-
VkDeviceSize size = mat4Size;
809+
VkDeviceSize size = mvpSize;
846810

847811
VkMemoryPropertyFlags properties = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT;
848812
VkBufferUsageFlags usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT;

renderer.h

+10-11
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ class Renderer
4747
bool SetupServerSideVertexBuffer(VkDevice& device);
4848
void SetupUniformBuffer(VkDevice &device);
4949
void SetupDynamicTransfer(VkDevice &device);
50-
void SetupBufferTransfer(VkDevice &device);
50+
void SetupStaticTransfer(VkDevice &device);
5151

5252
bool SetupShaderParameters(VkDevice& device);
5353
uint32_t GetMemoryTypeIndex(VkDevice& device, VkBuffer& buffer, VkMemoryPropertyFlags properties, uint32_t& allocSize);
@@ -92,24 +92,23 @@ class Renderer
9292
const uint32_t numAttrDesc = 2;
9393
const uint32_t numVertices = 3;
9494

95-
//float mvp[4][4] = {};
9695
glm::mat4 mvp;
97-
//const uint32_t mat4Size = sizeof(float[4][4]);
98-
99-
uint32_t mat4Size;
10096

10197
float* vertexInfo;
102-
10398
uint16_t* indices;
104-
uint16_t numIndices;
105-
uint32_t indicesBufferSize;
10699

107-
uint32_t numVertsX;
108-
uint32_t numVertsY;
100+
const uint32_t mvpSize = sizeof(float)*16;
109101

102+
uint32_t vertexInfoSize;
103+
uint16_t numIndices;
104+
uint32_t indicesBufferSize;
110105
uint32_t numVerts;
111-
112106
uint32_t numPrims;
107+
108+
const uint32_t numVertsX = 10;
109+
const uint32_t numVertsY = 10;
110+
const uint32_t numComponents = 3;
111+
113112
};
114113

115114
#endif

0 commit comments

Comments
 (0)