mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-05-06 01:50:38 +00:00
Add helpers for creating samplers
This commit is contained in:
@@ -439,13 +439,7 @@ void main()
|
||||
descset));
|
||||
}
|
||||
|
||||
VkSampler sampler = VK_NULL_HANDLE;
|
||||
|
||||
VkSamplerCreateInfo sampInfo = {VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO};
|
||||
sampInfo.magFilter = VK_FILTER_LINEAR;
|
||||
sampInfo.minFilter = VK_FILTER_LINEAR;
|
||||
|
||||
vkCreateSampler(device, &sampInfo, NULL, &sampler);
|
||||
VkSampler sampler = createSampler(vkh::SamplerCreateInfo(VK_FILTER_LINEAR));
|
||||
|
||||
vkh::DescriptorImageInfo iminfo(badimgview, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, sampler);
|
||||
vkh::WriteDescriptorSet up(VK_NULL_HANDLE, 0, 0, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
|
||||
@@ -603,7 +597,6 @@ void main()
|
||||
vkDeviceWaitIdle(device);
|
||||
|
||||
vkDestroyDescriptorPool(device, descpool, NULL);
|
||||
vkDestroySampler(device, sampler, NULL);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -513,6 +513,68 @@ struct ImageCreateInfo : public VkImageCreateInfo
|
||||
operator const VkImageCreateInfo *() const { return this; }
|
||||
};
|
||||
|
||||
struct SamplerCreateInfo : public VkSamplerCreateInfo
|
||||
{
|
||||
// simplified constructor, filter and address mode identical in all directions
|
||||
SamplerCreateInfo(VkFilter filter,
|
||||
VkSamplerAddressMode addressMode = VK_SAMPLER_ADDRESS_MODE_REPEAT,
|
||||
float maxAnisotropy = 0.0f,
|
||||
VkBorderColor borderColor = VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK,
|
||||
float mipLodBias = 0.0f, float minLod = 0.0f, float maxLod = 0.0f,
|
||||
VkCompareOp compareOp = VK_COMPARE_OP_NEVER,
|
||||
VkBool32 unnormalizedCoordinates = VK_FALSE, VkSamplerCreateFlags flags = 0)
|
||||
: SamplerCreateInfo(filter, filter,
|
||||
filter == VK_FILTER_NEAREST ? VK_SAMPLER_MIPMAP_MODE_NEAREST
|
||||
: VK_SAMPLER_MIPMAP_MODE_LINEAR,
|
||||
addressMode, addressMode, addressMode, maxAnisotropy, borderColor,
|
||||
mipLodBias, minLod, maxLod, compareOp, unnormalizedCoordinates, flags)
|
||||
{
|
||||
}
|
||||
|
||||
SamplerCreateInfo(VkFilter minFilter, VkFilter magFilter,
|
||||
VkSamplerMipmapMode mipmapMode = VK_SAMPLER_MIPMAP_MODE_LINEAR,
|
||||
VkSamplerAddressMode addressModeU = VK_SAMPLER_ADDRESS_MODE_REPEAT,
|
||||
VkSamplerAddressMode addressModeV = VK_SAMPLER_ADDRESS_MODE_REPEAT,
|
||||
VkSamplerAddressMode addressModeW = VK_SAMPLER_ADDRESS_MODE_REPEAT,
|
||||
float maxAnisotropy = 0.0f,
|
||||
VkBorderColor borderColor = VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK,
|
||||
float mipLodBias = 0.0f, float minLod = 0.0f, float maxLod = 0.0f,
|
||||
VkCompareOp compareOp = VK_COMPARE_OP_NEVER,
|
||||
VkBool32 unnormalizedCoordinates = VK_FALSE, VkSamplerCreateFlags flags = 0)
|
||||
{
|
||||
sType = VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO;
|
||||
pNext = NULL;
|
||||
|
||||
this->flags = flags;
|
||||
this->magFilter = magFilter;
|
||||
this->minFilter = minFilter;
|
||||
this->mipmapMode = mipmapMode;
|
||||
this->addressModeU = addressModeU;
|
||||
this->addressModeV = addressModeV;
|
||||
this->addressModeW = addressModeW;
|
||||
|
||||
this->mipLodBias = mipLodBias;
|
||||
|
||||
this->anisotropyEnable = (maxAnisotropy > 1.0f);
|
||||
this->maxAnisotropy = maxAnisotropy;
|
||||
|
||||
this->compareEnable = compareOp != VK_COMPARE_OP_NEVER;
|
||||
this->compareOp = compareOp;
|
||||
this->minLod = minLod;
|
||||
this->maxLod = maxLod;
|
||||
this->borderColor = borderColor;
|
||||
this->unnormalizedCoordinates = unnormalizedCoordinates;
|
||||
}
|
||||
|
||||
SamplerCreateInfo &next(const void *next)
|
||||
{
|
||||
this->pNext = next;
|
||||
return *this;
|
||||
}
|
||||
|
||||
operator const VkSamplerCreateInfo *() const { return this; }
|
||||
};
|
||||
|
||||
struct ImageViewCreateInfo : public VkImageViewCreateInfo
|
||||
{
|
||||
ImageViewCreateInfo(VkImage image, VkImageViewType viewType, VkFormat format,
|
||||
|
||||
@@ -291,11 +291,7 @@ void main()
|
||||
}));
|
||||
|
||||
VkSampler invalidSampler = (VkSampler)0x1234;
|
||||
VkSampler validSampler = VK_NULL_HANDLE;
|
||||
VkSamplerCreateInfo sampInfo = {VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO};
|
||||
sampInfo.magFilter = VK_FILTER_LINEAR;
|
||||
sampInfo.minFilter = VK_FILTER_LINEAR;
|
||||
vkCreateSampler(device, &sampInfo, NULL, &validSampler);
|
||||
VkSampler validSampler = createSampler(vkh::SamplerCreateInfo(VK_FILTER_LINEAR));
|
||||
|
||||
VkDescriptorSetLayout immutsetlayout = createDescriptorSetLayout(vkh::DescriptorSetLayoutCreateInfo({
|
||||
{0, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 1, VK_SHADER_STAGE_VERTEX_BIT, &validSampler},
|
||||
@@ -855,10 +851,10 @@ void main()
|
||||
// create the specific resources that will only be referenced through descriptor updates
|
||||
for(int i = 0; i < 4; i++)
|
||||
{
|
||||
vkCreateSampler(device, &sampInfo, NULL, &refsamp[i]);
|
||||
refsamp[i] = createSampler(vkh::SamplerCreateInfo(VK_FILTER_LINEAR));
|
||||
setName(refsamp[i], "refsamp" + std::to_string(i));
|
||||
|
||||
vkCreateSampler(device, &sampInfo, NULL, &refcombinedsamp[i]);
|
||||
refcombinedsamp[i] = createSampler(vkh::SamplerCreateInfo(VK_FILTER_LINEAR));
|
||||
setName(refcombinedsamp[i], "refcombinedsamp" + std::to_string(i));
|
||||
|
||||
VkFormat fmt = VK_FORMAT_R32G32B32A32_SFLOAT;
|
||||
@@ -1291,8 +1287,6 @@ void main()
|
||||
vkDestroyFence(device, fence, NULL);
|
||||
vkDestroySemaphore(device, sem, NULL);
|
||||
|
||||
vkDestroySampler(device, validSampler, NULL);
|
||||
|
||||
vkDestroyImageView(device, view1, NULL);
|
||||
vkDestroyImageView(device, view3, NULL);
|
||||
|
||||
|
||||
@@ -203,18 +203,10 @@ void main()
|
||||
|
||||
badcb.upload(&flags, sizeof(flags));
|
||||
|
||||
VkSampler checkersampler = VK_NULL_HANDLE;
|
||||
VkSampler smileysampler = VK_NULL_HANDLE;
|
||||
|
||||
VkSamplerCreateInfo sampInfo = {VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO};
|
||||
sampInfo.magFilter = VK_FILTER_NEAREST;
|
||||
sampInfo.minFilter = VK_FILTER_NEAREST;
|
||||
|
||||
vkCreateSampler(device, &sampInfo, NULL, &checkersampler);
|
||||
|
||||
sampInfo.addressModeU = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE;
|
||||
|
||||
vkCreateSampler(device, &sampInfo, NULL, &smileysampler);
|
||||
VkSampler checkersampler = createSampler(vkh::SamplerCreateInfo(VK_FILTER_NEAREST));
|
||||
VkSampler smileysampler = createSampler(
|
||||
vkh::SamplerCreateInfo(VK_FILTER_NEAREST, VK_FILTER_NEAREST, VK_SAMPLER_MIPMAP_MODE_LINEAR,
|
||||
VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE));
|
||||
|
||||
auto SetupBuffer = [this]() {
|
||||
VkBuffer cb = VK_NULL_HANDLE;
|
||||
@@ -580,8 +572,6 @@ void main()
|
||||
TrashDescSet(descset);
|
||||
|
||||
vkDestroyDescriptorPool(device, descpool, NULL);
|
||||
vkDestroySampler(device, checkersampler, NULL);
|
||||
vkDestroySampler(device, smileysampler, NULL);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -3730,30 +3730,12 @@ OpMemberDecorate %cbuffer_struct 17 Offset 216 ; double doublePackSource
|
||||
vkDeviceWaitIdle(device);
|
||||
}
|
||||
|
||||
VkSampler pointsampler = VK_NULL_HANDLE;
|
||||
VkSampler linearsampler = VK_NULL_HANDLE;
|
||||
VkSampler mipsampler = VK_NULL_HANDLE;
|
||||
VkSampler shadowsampler = VK_NULL_HANDLE;
|
||||
|
||||
VkSamplerCreateInfo sampInfo = {VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO};
|
||||
sampInfo.magFilter = VK_FILTER_NEAREST;
|
||||
sampInfo.minFilter = VK_FILTER_NEAREST;
|
||||
|
||||
vkCreateSampler(device, &sampInfo, NULL, &pointsampler);
|
||||
|
||||
sampInfo.magFilter = VK_FILTER_LINEAR;
|
||||
sampInfo.minFilter = VK_FILTER_LINEAR;
|
||||
|
||||
vkCreateSampler(device, &sampInfo, NULL, &linearsampler);
|
||||
|
||||
sampInfo.mipmapMode = VK_SAMPLER_MIPMAP_MODE_LINEAR;
|
||||
|
||||
vkCreateSampler(device, &sampInfo, NULL, &mipsampler);
|
||||
|
||||
sampInfo.compareEnable = VK_TRUE;
|
||||
sampInfo.compareOp = VK_COMPARE_OP_LESS_OR_EQUAL;
|
||||
|
||||
vkCreateSampler(device, &sampInfo, NULL, &shadowsampler);
|
||||
VkSampler pointsampler = createSampler(vkh::SamplerCreateInfo(VK_FILTER_NEAREST));
|
||||
VkSampler linearsampler = createSampler(vkh::SamplerCreateInfo(VK_FILTER_LINEAR));
|
||||
VkSampler mipsampler = createSampler(vkh::SamplerCreateInfo(VK_FILTER_LINEAR));
|
||||
VkSampler shadowsampler = createSampler(vkh::SamplerCreateInfo(
|
||||
VK_FILTER_LINEAR, VK_SAMPLER_ADDRESS_MODE_REPEAT, 0.0f,
|
||||
VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK, 0.0f, 0.0f, 0.0f, VK_COMPARE_OP_LESS_OR_EQUAL));
|
||||
|
||||
VkDescriptorSet descset0 = allocateDescriptorSet(setlayout0);
|
||||
VkDescriptorSet descset1;
|
||||
@@ -4178,11 +4160,6 @@ OpMemberDecorate %cbuffer_struct 17 Offset 216 ; double doublePackSource
|
||||
Present();
|
||||
}
|
||||
|
||||
vkDestroySampler(device, pointsampler, NULL);
|
||||
vkDestroySampler(device, linearsampler, NULL);
|
||||
vkDestroySampler(device, mipsampler, NULL);
|
||||
vkDestroySampler(device, shadowsampler, NULL);
|
||||
|
||||
return 0;
|
||||
}
|
||||
};
|
||||
|
||||
@@ -569,6 +569,9 @@ void VulkanGraphicsTest::Shutdown()
|
||||
for(VkDescriptorSetLayout layout : setlayouts)
|
||||
vkDestroyDescriptorSetLayout(device, layout, NULL);
|
||||
|
||||
for(VkSampler sampler : samplers)
|
||||
vkDestroySampler(device, sampler, NULL);
|
||||
|
||||
for(auto it : imageAllocs)
|
||||
vmaDestroyImage(allocator, it.first, it.second);
|
||||
|
||||
@@ -928,6 +931,14 @@ VkDescriptorSetLayout VulkanGraphicsTest::createDescriptorSetLayout(
|
||||
return ret;
|
||||
}
|
||||
|
||||
VkSampler VulkanGraphicsTest::createSampler(const VkSamplerCreateInfo *info)
|
||||
{
|
||||
VkSampler ret;
|
||||
CHECK_VKR(vkCreateSampler(device, info, NULL, &ret));
|
||||
samplers.push_back(ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
VulkanWindow::VulkanWindow(VulkanGraphicsTest *test, GraphicsWindow *win)
|
||||
{
|
||||
m_Test = test;
|
||||
|
||||
@@ -220,6 +220,7 @@ struct VulkanGraphicsTest : public GraphicsTest
|
||||
VkBufferView createBufferView(const VkBufferViewCreateInfo *info);
|
||||
VkPipelineLayout createPipelineLayout(const VkPipelineLayoutCreateInfo *info);
|
||||
VkDescriptorSetLayout createDescriptorSetLayout(const VkDescriptorSetLayoutCreateInfo *info);
|
||||
VkSampler createSampler(const VkSamplerCreateInfo *info);
|
||||
|
||||
void getPhysFeatures2(void *nextStruct);
|
||||
|
||||
@@ -267,6 +268,7 @@ struct VulkanGraphicsTest : public GraphicsTest
|
||||
std::vector<VkBufferView> bufferviews;
|
||||
std::vector<VkPipelineLayout> pipelayouts;
|
||||
std::vector<VkDescriptorSetLayout> setlayouts;
|
||||
std::vector<VkSampler> samplers;
|
||||
|
||||
std::map<VkImage, VmaAllocation> imageAllocs;
|
||||
std::map<VkBuffer, VmaAllocation> bufferAllocs;
|
||||
|
||||
@@ -631,13 +631,7 @@ void main()
|
||||
if(!Init())
|
||||
return 3;
|
||||
|
||||
VkSampler sampler = VK_NULL_HANDLE;
|
||||
|
||||
VkSamplerCreateInfo sampInfo = {VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO};
|
||||
sampInfo.magFilter = VK_FILTER_LINEAR;
|
||||
sampInfo.minFilter = VK_FILTER_LINEAR;
|
||||
|
||||
vkCreateSampler(device, &sampInfo, NULL, &sampler);
|
||||
VkSampler sampler = createSampler(vkh::SamplerCreateInfo(VK_FILTER_LINEAR));
|
||||
|
||||
setlayout = createDescriptorSetLayout(vkh::DescriptorSetLayoutCreateInfo({
|
||||
{0, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 1, VK_SHADER_STAGE_FRAGMENT_BIT, &sampler},
|
||||
|
||||
@@ -859,16 +859,10 @@ void main()
|
||||
|
||||
for(size_t i = 0; i < ARRAY_COUNT(ycbcr); i++)
|
||||
{
|
||||
VkSamplerCreateInfo sampInfo = {VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO};
|
||||
VkSamplerYcbcrConversionInfo ycbcrChain = {VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO};
|
||||
|
||||
sampInfo.pNext = &ycbcrChain;
|
||||
|
||||
sampInfo.magFilter = VK_FILTER_LINEAR;
|
||||
sampInfo.minFilter = VK_FILTER_LINEAR;
|
||||
|
||||
ycbcrChain.conversion = ycbcr[i].conv;
|
||||
vkCreateSampler(device, &sampInfo, NULL, &ycbcr[i].sampler);
|
||||
ycbcr[i].sampler = createSampler(vkh::SamplerCreateInfo(VK_FILTER_LINEAR).next(&ycbcrChain));
|
||||
|
||||
setlayout = createDescriptorSetLayout(vkh::DescriptorSetLayoutCreateInfo({
|
||||
{0, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 1, VK_SHADER_STAGE_FRAGMENT_BIT,
|
||||
@@ -986,11 +980,7 @@ void main()
|
||||
vkDeviceWaitIdle(device);
|
||||
|
||||
for(size_t i = 0; i < ARRAY_COUNT(ycbcr); i++)
|
||||
{
|
||||
vkDestroySampler(device, ycbcr[i].sampler, NULL);
|
||||
|
||||
vkDestroySamplerYcbcrConversionKHR(device, ycbcr[i].conv, NULL);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user