Make the vk_rayquery cvar a bit more robust
This commit is contained in:
parent
d7dcf60c7b
commit
e7e89fce09
6 changed files with 12 additions and 17 deletions
|
|
@ -38,8 +38,6 @@
|
|||
#include "hw_viewpointuniforms.h"
|
||||
#include "v_2ddrawer.h"
|
||||
|
||||
extern bool vk_rayquery;
|
||||
|
||||
VkDescriptorSetManager::VkDescriptorSetManager(VulkanRenderDevice* fb) : fb(fb)
|
||||
{
|
||||
CreateLevelMeshLayout();
|
||||
|
|
@ -114,7 +112,7 @@ void VkDescriptorSetManager::UpdateFixedSet()
|
|||
WriteDescriptors update;
|
||||
update.AddCombinedImageSampler(Fixed.Set.get(), 0, fb->GetTextureManager()->Shadowmap.View.get(), fb->GetSamplerManager()->ShadowmapSampler.get(), VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL);
|
||||
update.AddCombinedImageSampler(Fixed.Set.get(), 1, fb->GetTextureManager()->Lightmap.View.get(), fb->GetSamplerManager()->LightmapSampler.get(), VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL);
|
||||
if (vk_rayquery && fb->GetDevice()->SupportsExtension(VK_KHR_RAY_QUERY_EXTENSION_NAME) && fb->GetDevice()->PhysicalDevice.Features.RayQuery.rayQuery)
|
||||
if (fb->IsRayQueryEnabled())
|
||||
{
|
||||
update.AddAccelerationStructure(Fixed.Set.get(), 2, fb->GetLevelMesh()->GetAccelStruct());
|
||||
}
|
||||
|
|
@ -302,7 +300,7 @@ void VkDescriptorSetManager::CreateFixedLayout()
|
|||
DescriptorSetLayoutBuilder builder;
|
||||
builder.AddBinding(0, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 1, VK_SHADER_STAGE_FRAGMENT_BIT);
|
||||
builder.AddBinding(1, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 1, VK_SHADER_STAGE_FRAGMENT_BIT);
|
||||
if (vk_rayquery && fb->GetDevice()->SupportsExtension(VK_KHR_RAY_QUERY_EXTENSION_NAME) && fb->GetDevice()->PhysicalDevice.Features.RayQuery.rayQuery)
|
||||
if (fb->IsRayQueryEnabled())
|
||||
{
|
||||
builder.AddBinding(2, VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR, 1, VK_SHADER_STAGE_FRAGMENT_BIT);
|
||||
}
|
||||
|
|
@ -340,7 +338,7 @@ void VkDescriptorSetManager::CreateFixedPool()
|
|||
{
|
||||
DescriptorPoolBuilder poolbuilder;
|
||||
poolbuilder.AddPoolSize(VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 2 * MaxFixedSets);
|
||||
if (vk_rayquery && fb->GetDevice()->SupportsExtension(VK_KHR_RAY_QUERY_EXTENSION_NAME) && fb->GetDevice()->PhysicalDevice.Features.RayQuery.rayQuery)
|
||||
if (fb->IsRayQueryEnabled())
|
||||
{
|
||||
poolbuilder.AddPoolSize(VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR, 1 * MaxFixedSets);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -30,8 +30,6 @@
|
|||
#include "version.h"
|
||||
#include "cmdlib.h"
|
||||
|
||||
extern bool vk_rayquery;
|
||||
|
||||
VkShaderManager::VkShaderManager(VulkanRenderDevice* fb) : fb(fb)
|
||||
{
|
||||
}
|
||||
|
|
@ -174,7 +172,7 @@ std::unique_ptr<VulkanShader> VkShaderManager::LoadVertShader(FString shadername
|
|||
std::unique_ptr<VulkanShader> VkShaderManager::LoadFragShader(FString shadername, const char *frag_lump, const char *material_lump, const char* mateffect_lump, const char *light_lump, const char *defines, const VkShaderKey& key)
|
||||
{
|
||||
FString definesBlock;
|
||||
if (vk_rayquery && fb->GetDevice()->SupportsExtension(VK_KHR_RAY_QUERY_EXTENSION_NAME) && fb->GetDevice()->PhysicalDevice.Features.RayQuery.rayQuery) definesBlock << "\n#define SUPPORTS_RAYQUERY\n";
|
||||
if (fb->IsRayQueryEnabled()) definesBlock << "\n#define SUPPORTS_RAYQUERY\n";
|
||||
definesBlock << defines;
|
||||
definesBlock << "\n#define MAX_SURFACE_UNIFORMS " << std::to_string(MAX_SURFACE_UNIFORMS).c_str() << "\n";
|
||||
definesBlock << "#define MAX_LIGHT_DATA " << std::to_string(MAX_LIGHT_DATA).c_str() << "\n";
|
||||
|
|
@ -329,7 +327,7 @@ FString VkShaderManager::GetVersionBlock()
|
|||
versionBlock << "#extension GL_GOOGLE_include_directive : enable\n";
|
||||
versionBlock << "#extension GL_EXT_nonuniform_qualifier : enable\r\n";
|
||||
|
||||
if (vk_rayquery && fb->GetDevice()->SupportsExtension(VK_KHR_RAY_QUERY_EXTENSION_NAME) && fb->GetDevice()->PhysicalDevice.Features.RayQuery.rayQuery)
|
||||
if (fb->IsRayQueryEnabled())
|
||||
{
|
||||
versionBlock << "#extension GL_EXT_ray_query : enable\n";
|
||||
}
|
||||
|
|
|
|||
|
|
@ -28,11 +28,9 @@
|
|||
#include "hw_material.h"
|
||||
#include "texturemanager.h"
|
||||
|
||||
EXTERN_CVAR(Bool, vk_rayquery);
|
||||
|
||||
VkLevelMesh::VkLevelMesh(VulkanRenderDevice* fb) : fb(fb)
|
||||
{
|
||||
useRayQuery = vk_rayquery && fb->GetDevice()->SupportsExtension(VK_KHR_RAY_QUERY_EXTENSION_NAME) && fb->GetDevice()->PhysicalDevice.Features.RayQuery.rayQuery;
|
||||
useRayQuery = fb->IsRayQueryEnabled();
|
||||
|
||||
SetLevelMesh(nullptr);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,8 +11,6 @@
|
|||
|
||||
#define USE_DRAWINDIRECT
|
||||
|
||||
extern bool vk_rayquery;
|
||||
|
||||
static int lastSurfaceCount;
|
||||
static glcycle_t lightmapRaytraceLast;
|
||||
|
||||
|
|
@ -35,7 +33,7 @@ CVAR(Bool, lm_blur, true, 0);
|
|||
|
||||
VkLightmapper::VkLightmapper(VulkanRenderDevice* fb) : fb(fb)
|
||||
{
|
||||
useRayQuery = vk_rayquery && fb->GetDevice()->SupportsExtension(VK_KHR_RAY_QUERY_EXTENSION_NAME) && fb->GetDevice()->PhysicalDevice.Features.RayQuery.rayQuery;
|
||||
useRayQuery = fb->IsRayQueryEnabled();
|
||||
|
||||
templightlist.Resize(128);
|
||||
|
||||
|
|
|
|||
|
|
@ -138,8 +138,7 @@ void VulkanPrintLog(const char* typestr, const std::string& msg)
|
|||
VulkanRenderDevice::VulkanRenderDevice(void *hMonitor, bool fullscreen, std::shared_ptr<VulkanSurface> surface) : SystemBaseFrameBuffer(hMonitor, fullscreen)
|
||||
{
|
||||
VulkanDeviceBuilder builder;
|
||||
if (vk_rayquery)
|
||||
builder.OptionalRayQuery();
|
||||
builder.OptionalRayQuery();
|
||||
builder.RequireExtension(VK_EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME);
|
||||
builder.Surface(surface);
|
||||
builder.SelectDevice(vk_device);
|
||||
|
|
@ -154,6 +153,8 @@ VulkanRenderDevice::VulkanRenderDevice(void *hMonitor, bool fullscreen, std::sha
|
|||
{
|
||||
I_FatalError("This GPU does not support the minimum requirements of this application");
|
||||
}
|
||||
|
||||
mUseRayQuery = vk_rayquery && mDevice->SupportsExtension(VK_KHR_RAY_QUERY_EXTENSION_NAME) && mDevice->PhysicalDevice.Features.RayQuery.rayQuery;
|
||||
}
|
||||
|
||||
VulkanRenderDevice::~VulkanRenderDevice()
|
||||
|
|
|
|||
|
|
@ -47,6 +47,7 @@ public:
|
|||
VkRenderBuffers *GetBuffers() { return mActiveRenderBuffers; }
|
||||
FRenderState* RenderState() override;
|
||||
|
||||
bool IsRayQueryEnabled() const { return mUseRayQuery; }
|
||||
bool IsVulkan() override { return true; }
|
||||
|
||||
void Update() override;
|
||||
|
|
@ -119,6 +120,7 @@ private:
|
|||
VkRenderBuffers *mActiveRenderBuffers = nullptr;
|
||||
|
||||
bool mVSync = false;
|
||||
bool mUseRayQuery = false;
|
||||
|
||||
LevelMesh* levelMesh = nullptr;
|
||||
bool levelMeshChanged = true;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue