Archived
1
Fork 0

Configure dof downscale in graphics presets

This commit is contained in:
Joshua Goins 2018-11-08 13:01:54 -05:00
parent f0bb00b251
commit f16e8b2aab
6 changed files with 30 additions and 28 deletions

View file

@ -1,8 +1,11 @@
[Low] [Low]
shadowResolution=128 shadowResolution=128
dofDownscale=8
[Medium] [Medium]
shadowResolution=256 shadowResolution=256
dofDownscale=4
[High] [High]
shadowResolution=512 shadowResolution=512
dofDownscale=2

View file

@ -6,39 +6,37 @@ class Renderer;
struct RenderTarget; struct RenderTarget;
class Camera; class Camera;
const int dofFramebufferDownscaleFactor = 4;
class DoFPass { class DoFPass {
public: public:
DoFPass(Renderer& renderer); DoFPass(Renderer& renderer);
~DoFPass(); ~DoFPass();
void render(VkCommandBuffer commandBuffer, Camera& camera, RenderTarget* target); void render(VkCommandBuffer commandBuffer, Camera& camera, RenderTarget* target);
void createDescriptorSet(RenderTarget* target); void createDescriptorSet(RenderTarget* target);
VkRenderPass getRenderPass() const { VkRenderPass getRenderPass() const {
return renderPass_; return renderPass_;
} }
private: private:
void createRenderPass(); void createRenderPass();
void createDescriptorSetLayout(); void createDescriptorSetLayout();
void createPipeline(); void createPipeline();
void createBokehImage(); void createBokehImage();
void createDescriptorSet(); void createDescriptorSet();
VkRenderPass renderPass_ = nullptr; VkRenderPass renderPass_ = nullptr;
VkDescriptorSetLayout setLayout_ = nullptr; VkDescriptorSetLayout setLayout_ = nullptr;
VkPipelineLayout pipelineLayout_ = nullptr; VkPipelineLayout pipelineLayout_ = nullptr;
VkPipeline pipeline_ = nullptr; VkPipeline pipeline_ = nullptr;
VkImage bokehImage_ = nullptr; VkImage bokehImage_ = nullptr;
VkDeviceMemory bokehMemory_ = nullptr; VkDeviceMemory bokehMemory_ = nullptr;
VkImageView bokehImageView_ = nullptr; VkImageView bokehImageView_ = nullptr;
VkSampler bokehSampler_ = nullptr; VkSampler bokehSampler_ = nullptr;
Renderer& renderer_; Renderer& renderer_;
}; };

View file

@ -69,7 +69,7 @@ struct RenderTarget {
}; };
struct GraphicsConfig { struct GraphicsConfig {
int shadowResolution; int shadowResolution, dofDownscale;
}; };
class World; class World;

View file

@ -30,15 +30,15 @@ DoFPass::~DoFPass() {
void DoFPass::render(VkCommandBuffer commandBuffer, Camera& camera, RenderTarget* target) { void DoFPass::render(VkCommandBuffer commandBuffer, Camera& camera, RenderTarget* target) {
VkViewport viewport = {}; VkViewport viewport = {};
viewport.width = target->extent.width / dofFramebufferDownscaleFactor; viewport.width = target->extent.width / renderer_.getConfig().dofDownscale;
viewport.height = target->extent.height / dofFramebufferDownscaleFactor; viewport.height = target->extent.height / renderer_.getConfig().dofDownscale;
viewport.maxDepth = 1.0f; viewport.maxDepth = 1.0f;
vkCmdSetViewport(commandBuffer, 0, 1, &viewport); vkCmdSetViewport(commandBuffer, 0, 1, &viewport);
VkRect2D scissor = {}; VkRect2D scissor = {};
scissor.extent.width = target->extent.width / dofFramebufferDownscaleFactor; scissor.extent.width = target->extent.width / renderer_.getConfig().dofDownscale;
scissor.extent.height = target->extent.height / dofFramebufferDownscaleFactor; scissor.extent.height = target->extent.height / renderer_.getConfig().dofDownscale;
vkCmdSetScissor(commandBuffer, 0, 1, &scissor); vkCmdSetScissor(commandBuffer, 0, 1, &scissor);
@ -48,8 +48,8 @@ void DoFPass::render(VkCommandBuffer commandBuffer, Camera& camera, RenderTarget
renderPassBeginInfo.sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO; renderPassBeginInfo.sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO;
renderPassBeginInfo.framebuffer = target->farFieldFramebuffers[target->currentResource]; renderPassBeginInfo.framebuffer = target->farFieldFramebuffers[target->currentResource];
renderPassBeginInfo.renderPass = renderPass_; renderPassBeginInfo.renderPass = renderPass_;
renderPassBeginInfo.renderArea.extent.width = target->extent.width / dofFramebufferDownscaleFactor; renderPassBeginInfo.renderArea.extent.width = target->extent.width / renderer_.getConfig().dofDownscale;
renderPassBeginInfo.renderArea.extent.height = target->extent.height / dofFramebufferDownscaleFactor; renderPassBeginInfo.renderArea.extent.height = target->extent.height / renderer_.getConfig().dofDownscale;
renderPassBeginInfo.clearValueCount = 1; renderPassBeginInfo.clearValueCount = 1;
renderPassBeginInfo.pClearValues = &clearColor; renderPassBeginInfo.pClearValues = &clearColor;
@ -59,8 +59,8 @@ void DoFPass::render(VkCommandBuffer commandBuffer, Camera& camera, RenderTarget
glm::vec4 dpack; glm::vec4 dpack;
dpack[0] = camera.aperture; dpack[0] = camera.aperture;
dpack[1] = (camera.far - camera.focusDistance) / camera.far; dpack[1] = (camera.far - camera.focusDistance) / camera.far;
dpack[2] = target->extent.width / dofFramebufferDownscaleFactor; dpack[2] = target->extent.width / renderer_.getConfig().dofDownscale;
dpack[3] = target->extent.height / dofFramebufferDownscaleFactor; dpack[3] = target->extent.height / renderer_.getConfig().dofDownscale;
vkCmdBindPipeline(commandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, pipeline_); vkCmdBindPipeline(commandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, pipeline_);
vkCmdBindDescriptorSets(commandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, pipelineLayout_, 0, 1, &target->dofSets[target->currentResource], 0, nullptr); vkCmdBindDescriptorSets(commandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, pipelineLayout_, 0, 1, &target->dofSets[target->currentResource], 0, nullptr);
@ -68,7 +68,7 @@ void DoFPass::render(VkCommandBuffer commandBuffer, Camera& camera, RenderTarget
vkCmdPushConstants(commandBuffer, pipelineLayout_, VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT, 0, sizeof(glm::vec4), &dpack); vkCmdPushConstants(commandBuffer, pipelineLayout_, VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT, 0, sizeof(glm::vec4), &dpack);
if(camera.aperture > 0.0f) if(camera.aperture > 0.0f)
vkCmdDraw(commandBuffer, 3, (target->extent.width / dofFramebufferDownscaleFactor) * (target->extent.height / dofFramebufferDownscaleFactor), 0, 0); vkCmdDraw(commandBuffer, 3, (target->extent.width / renderer_.getConfig().dofDownscale) * (target->extent.height / renderer_.getConfig().dofDownscale), 0, 0);
vkCmdEndRenderPass(commandBuffer); vkCmdEndRenderPass(commandBuffer);

View file

@ -60,6 +60,7 @@ void loadGraphicsConfig() {
return; return;
graphicsConfig.shadowResolution = toInt(config.get(currentGraphicsPreset.c_str(), "shadowResolution")); graphicsConfig.shadowResolution = toInt(config.get(currentGraphicsPreset.c_str(), "shadowResolution"));
graphicsConfig.dofDownscale = toInt(config.get(currentGraphicsPreset.c_str(), "dofDownscale"));
} }
void readConfig() { void readConfig() {

View file

@ -382,8 +382,8 @@ RenderTarget* Renderer::createSurfaceRenderTarget(VkSurfaceKHR surface, RenderTa
imageCreateInfo.sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO; imageCreateInfo.sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO;
imageCreateInfo.imageType = VK_IMAGE_TYPE_2D; imageCreateInfo.imageType = VK_IMAGE_TYPE_2D;
imageCreateInfo.format = VK_FORMAT_R32G32B32A32_SFLOAT; imageCreateInfo.format = VK_FORMAT_R32G32B32A32_SFLOAT;
imageCreateInfo.extent.width = target->extent.width / dofFramebufferDownscaleFactor; imageCreateInfo.extent.width = target->extent.width / config_.dofDownscale;
imageCreateInfo.extent.height = target->extent.height / dofFramebufferDownscaleFactor; imageCreateInfo.extent.height = target->extent.height / config_.dofDownscale;
imageCreateInfo.extent.depth = 1; imageCreateInfo.extent.depth = 1;
imageCreateInfo.mipLevels = 1; imageCreateInfo.mipLevels = 1;
imageCreateInfo.arrayLayers = 1; imageCreateInfo.arrayLayers = 1;
@ -426,8 +426,8 @@ RenderTarget* Renderer::createSurfaceRenderTarget(VkSurfaceKHR surface, RenderTa
framebufferInfo.renderPass = dofPass_->getRenderPass(); framebufferInfo.renderPass = dofPass_->getRenderPass();
framebufferInfo.attachmentCount = 1; framebufferInfo.attachmentCount = 1;
framebufferInfo.pAttachments = &target->nearFieldImageViews[i]; framebufferInfo.pAttachments = &target->nearFieldImageViews[i];
framebufferInfo.width = target->extent.width / dofFramebufferDownscaleFactor; framebufferInfo.width = target->extent.width / config_.dofDownscale;
framebufferInfo.height = target->extent.height / dofFramebufferDownscaleFactor; framebufferInfo.height = target->extent.height / config_.dofDownscale;
framebufferInfo.layers = 1; framebufferInfo.layers = 1;
vkCreateFramebuffer(device_, &framebufferInfo, nullptr, &target->nearFieldFramebuffers[i]); vkCreateFramebuffer(device_, &framebufferInfo, nullptr, &target->nearFieldFramebuffers[i]);
@ -439,8 +439,8 @@ RenderTarget* Renderer::createSurfaceRenderTarget(VkSurfaceKHR surface, RenderTa
imageCreateInfo.sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO; imageCreateInfo.sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO;
imageCreateInfo.imageType = VK_IMAGE_TYPE_2D; imageCreateInfo.imageType = VK_IMAGE_TYPE_2D;
imageCreateInfo.format = VK_FORMAT_R32G32B32A32_SFLOAT; imageCreateInfo.format = VK_FORMAT_R32G32B32A32_SFLOAT;
imageCreateInfo.extent.width = target->extent.width / dofFramebufferDownscaleFactor; imageCreateInfo.extent.width = target->extent.width / config_.dofDownscale;
imageCreateInfo.extent.height = target->extent.height / dofFramebufferDownscaleFactor; imageCreateInfo.extent.height = target->extent.height / config_.dofDownscale;
imageCreateInfo.extent.depth = 1; imageCreateInfo.extent.depth = 1;
imageCreateInfo.mipLevels = 1; imageCreateInfo.mipLevels = 1;
imageCreateInfo.arrayLayers = 1; imageCreateInfo.arrayLayers = 1;
@ -483,8 +483,8 @@ RenderTarget* Renderer::createSurfaceRenderTarget(VkSurfaceKHR surface, RenderTa
framebufferInfo.renderPass = dofPass_->getRenderPass(); framebufferInfo.renderPass = dofPass_->getRenderPass();
framebufferInfo.attachmentCount = 1; framebufferInfo.attachmentCount = 1;
framebufferInfo.pAttachments = &target->farFieldImageViews[i]; framebufferInfo.pAttachments = &target->farFieldImageViews[i];
framebufferInfo.width = target->extent.width / dofFramebufferDownscaleFactor; framebufferInfo.width = target->extent.width / config_.dofDownscale;
framebufferInfo.height = target->extent.height / dofFramebufferDownscaleFactor; framebufferInfo.height = target->extent.height / config_.dofDownscale;
framebufferInfo.layers = 1; framebufferInfo.layers = 1;
vkCreateFramebuffer(device_, &framebufferInfo, nullptr, &target->farFieldFramebuffers[i]); vkCreateFramebuffer(device_, &framebufferInfo, nullptr, &target->farFieldFramebuffers[i]);