mirror of
https://github.com/wheremyfoodat/Panda3DS.git
synced 2025-04-11 08:39:48 +12:00
Add shader-module loading
Loads spirv files from the embedded virtual file system and loads them into vulkan shader-modules.
This commit is contained in:
parent
4b193c8d6b
commit
13e52ac047
1 changed files with 30 additions and 0 deletions
|
@ -1,5 +1,6 @@
|
|||
#include "renderer_vk/renderer_vk.hpp"
|
||||
|
||||
#include <cmrc/cmrc.hpp>
|
||||
#include <limits>
|
||||
#include <span>
|
||||
#include <unordered_set>
|
||||
|
@ -10,6 +11,26 @@
|
|||
#include "renderer_vk/vk_memory.hpp"
|
||||
#include "renderer_vk/vk_pica.hpp"
|
||||
|
||||
CMRC_DECLARE(RendererVK);
|
||||
|
||||
static vk::UniqueShaderModule createShaderModule(vk::Device device, std::span<const std::byte> shaderCode) {
|
||||
vk::ShaderModuleCreateInfo shaderModuleInfo = {};
|
||||
shaderModuleInfo.pCode = reinterpret_cast<const u32*>(shaderCode.data());
|
||||
shaderModuleInfo.codeSize = shaderCode.size();
|
||||
|
||||
vk::UniqueShaderModule shaderModule = {};
|
||||
if (auto createResult = device.createShaderModuleUnique(shaderModuleInfo); createResult.result == vk::Result::eSuccess) {
|
||||
shaderModule = std::move(createResult.value);
|
||||
} else {
|
||||
Helpers::panic("Error creating shader module: %s\n", vk::to_string(createResult.result).c_str());
|
||||
}
|
||||
return shaderModule;
|
||||
}
|
||||
|
||||
static inline vk::UniqueShaderModule createShaderModule(vk::Device device, cmrc::file shaderFile) {
|
||||
return createShaderModule(device, std::span<const std::byte>(reinterpret_cast<const std::byte*>(shaderFile.begin()), shaderFile.size()));
|
||||
}
|
||||
|
||||
// Finds the first queue family that satisfies `queueMask` and excludes `queueExcludeMask` bits
|
||||
// Returns -1 if not found
|
||||
// Todo: Smarter selection for present/graphics/compute/transfer
|
||||
|
@ -921,6 +942,15 @@ void RendererVK::initGraphicsContext(SDL_Window* window) {
|
|||
Helpers::panic("Error allocating framebuffer memory: %s\n", vk::to_string(result).c_str());
|
||||
}
|
||||
}
|
||||
|
||||
auto vk_resources = cmrc::RendererVK::get_filesystem();
|
||||
auto displayVertexShader = vk_resources.open("vulkan_display.vert.spv");
|
||||
auto displayFragmentShader = vk_resources.open("vulkan_display.frag.spv");
|
||||
|
||||
vk::UniqueShaderModule displayVertexShaderModule = createShaderModule(device.get(), displayVertexShader);
|
||||
vk::UniqueShaderModule displayFragmentShaderModule = createShaderModule(device.get(), displayFragmentShader);
|
||||
|
||||
vk::RenderPass screenTextureRenderPass = getRenderPass(screenTextureInfo.format, {});
|
||||
}
|
||||
|
||||
void RendererVK::clearBuffer(u32 startAddress, u32 endAddress, u32 value, u32 control) {}
|
||||
|
|
Loading…
Add table
Reference in a new issue