Use depth image specifically for depth-compare tests in shader debug zoo

* The spec doesn't guarantee that non-depth formats support comparisons like
  this.
This commit is contained in:
baldurk
2022-02-08 18:07:38 +00:00
parent 9a75846343
commit f37516bfc3
2 changed files with 39 additions and 7 deletions
+8
View File
@@ -1140,6 +1140,14 @@ struct ClearColorValue
operator const VkClearColorValue *() const { return (VkClearColorValue *)this; }
};
struct ClearDepthStencilValue
{
float depth;
uint32_t stencil;
operator const VkClearDepthStencilValue *() const { return (VkClearDepthStencilValue *)this; }
};
struct ClearValue
{
ClearValue() {}
+31 -7
View File
@@ -167,6 +167,8 @@ layout(set = 0, r32ui, binding = 22) uniform uimage2D atomicimg;
layout(set = 0, binding = 30) uniform sampler2DArray queryTest;
layout(set = 0, binding = 31) uniform sampler2DMSArray queryTestMS;
layout(set = 0, binding = 32) uniform texture2D depthImage;
#if TEST_DESC_INDEXING
layout(set = 1, binding = 1) uniform sampler pointSamplers[14];
@@ -1088,10 +1090,10 @@ void main()
}
case 112:
{
float x = texture(sampler2DShadow(sampledImage, shadowSampler), vec3(inpos, 0.1f));
float y = texture(sampler2DShadow(sampledImage, shadowSampler), vec3(inpos, 0.3f));
float z = texture(sampler2DShadow(sampledImage, shadowSampler), vec3(inpos, 0.7f));
float w = texture(sampler2DShadow(sampledImage, shadowSampler), vec3(inpos, 0.9f));
float x = texture(sampler2DShadow(depthImage, shadowSampler), vec3(inpos, 0.1f));
float y = texture(sampler2DShadow(depthImage, shadowSampler), vec3(inpos, 0.3f));
float z = texture(sampler2DShadow(depthImage, shadowSampler), vec3(inpos, 0.7f));
float w = texture(sampler2DShadow(depthImage, shadowSampler), vec3(inpos, 0.9f));
Color = vec4(x, y, z, w);
break;
}
@@ -1120,7 +1122,7 @@ void main()
{
vec2 coord = vec2(zerof + 0.6, zerof + 0.43);
Color = textureGather(sampler2DShadow(sampledImage, shadowSampler), coord, 0.8f);
Color = textureGather(sampler2DShadow(depthImage, shadowSampler), coord, 0.8f);
break;
}
case 117:
@@ -3595,6 +3597,7 @@ OpMemberDecorate %cbuffer_struct 17 Offset 216 ; double doublePackSource
{22, VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, 1, VK_SHADER_STAGE_FRAGMENT_BIT},
{30, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 1, VK_SHADER_STAGE_FRAGMENT_BIT},
{31, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 1, VK_SHADER_STAGE_FRAGMENT_BIT},
{32, VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, 1, VK_SHADER_STAGE_FRAGMENT_BIT},
}));
std::vector<VkDescriptorSetLayout> setLayouts = {setlayout0};
@@ -3814,6 +3817,17 @@ OpMemberDecorate %cbuffer_struct 17 Offset 216 ; double doublePackSource
VK_BUFFER_USAGE_TRANSFER_SRC_BIT),
VmaAllocationCreateInfo({0, VMA_MEMORY_USAGE_CPU_TO_GPU}));
AllocatedImage shadowimg(this,
vkh::ImageCreateInfo(16, 16, 0, VK_FORMAT_D32_SFLOAT,
VK_IMAGE_USAGE_TRANSFER_DST_BIT |
VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT |
VK_IMAGE_USAGE_SAMPLED_BIT),
VmaAllocationCreateInfo({0, VMA_MEMORY_USAGE_GPU_ONLY}));
VkImageView shadowview = createImageView(
vkh::ImageViewCreateInfo(shadowimg.image, VK_IMAGE_VIEW_TYPE_2D, VK_FORMAT_D32_SFLOAT, {},
vkh::ImageSubresourceRange(VK_IMAGE_ASPECT_DEPTH_BIT)));
uploadBuf.upload(rgba8.data.data(), rgba8.data.size() * sizeof(uint32_t));
std::vector<byte> typeData;
@@ -4114,6 +4128,9 @@ OpMemberDecorate %cbuffer_struct 17 Offset 216 ; double doublePackSource
vkh::WriteDescriptorSet(
descset0, 31, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
{vkh::DescriptorImageInfo(queryTestMSView, VK_IMAGE_LAYOUT_GENERAL, mipsampler)}),
vkh::WriteDescriptorSet(
descset0, 32, VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE,
{vkh::DescriptorImageInfo(shadowview, VK_IMAGE_LAYOUT_GENERAL, VK_NULL_HANDLE)}),
});
if(descIndexing)
@@ -4140,8 +4157,7 @@ OpMemberDecorate %cbuffer_struct 17 Offset 216 ; double doublePackSource
linearsampler)}),
vkh::WriteDescriptorSet(
descset1, 3, i, VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE,
{vkh::DescriptorImageInfo(smileyview, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,
VK_NULL_HANDLE)}),
{vkh::DescriptorImageInfo(shadowview, VK_IMAGE_LAYOUT_GENERAL, VK_NULL_HANDLE)}),
vkh::WriteDescriptorSet(
descset1, 4, i, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
{vkh::DescriptorImageInfo(smileyview, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,
@@ -4195,6 +4211,10 @@ OpMemberDecorate %cbuffer_struct 17 Offset 216 ; double doublePackSource
vkh::ImageMemoryBarrier(VK_ACCESS_SHADER_WRITE_BIT | VK_ACCESS_SHADER_READ_BIT,
VK_ACCESS_TRANSFER_WRITE_BIT, VK_IMAGE_LAYOUT_UNDEFINED,
VK_IMAGE_LAYOUT_GENERAL, storezoo_u2D.image),
vkh::ImageMemoryBarrier(VK_ACCESS_SHADER_WRITE_BIT | VK_ACCESS_SHADER_READ_BIT,
VK_ACCESS_TRANSFER_WRITE_BIT, VK_IMAGE_LAYOUT_UNDEFINED,
VK_IMAGE_LAYOUT_GENERAL, shadowimg.image,
vkh::ImageSubresourceRange(VK_IMAGE_ASPECT_DEPTH_BIT)),
},
{
vkh::BufferMemoryBarrier(VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT,
@@ -4205,6 +4225,10 @@ OpMemberDecorate %cbuffer_struct 17 Offset 216 ; double doublePackSource
VK_ACCESS_TRANSFER_WRITE_BIT, store_texbuffer.buffer),
});
vkCmdClearDepthStencilImage(cmd, shadowimg.image, VK_IMAGE_LAYOUT_GENERAL,
vkh::ClearDepthStencilValue({0.5f, 0}), 1,
vkh::ImageSubresourceRange(VK_IMAGE_ASPECT_DEPTH_BIT));
vkCmdClearColorImage(cmd, store_image.image, VK_IMAGE_LAYOUT_GENERAL,
vkh::ClearColorValue(6.66f, 6.66f, 6.66f, 6.66f), 1,
vkh::ImageSubresourceRange());