diff --git a/renderdoc/data/embedded_files.h b/renderdoc/data/embedded_files.h index 4315d3d91..a6c8a38e2 100644 --- a/renderdoc/data/embedded_files.h +++ b/renderdoc/data/embedded_files.h @@ -61,5 +61,6 @@ DECLARE_EMBED(spirv_minmaxresult_comp); DECLARE_EMBED(spirv_histogram_comp); DECLARE_EMBED(spirv_outline_frag); DECLARE_EMBED(spirv_debuguniforms_h); +DECLARE_EMBED(spirv_texsample_h); #undef DECLARE_EMBED diff --git a/renderdoc/data/renderdoc.rc b/renderdoc/data/renderdoc.rc index 77b7d22c9..7f632ebd1 100644 --- a/renderdoc/data/renderdoc.rc +++ b/renderdoc/data/renderdoc.rc @@ -145,6 +145,7 @@ RESOURCE_spirv_minmaxresult_comp TYPE_EMBED "spv/minmaxresult.comp" RESOURCE_spirv_histogram_comp TYPE_EMBED "spv/histogram.comp" RESOURCE_spirv_outline_frag TYPE_EMBED "spv/outline.frag" RESOURCE_spirv_debuguniforms_h TYPE_EMBED "spv/debuguniforms.h" +RESOURCE_spirv_texsample_h TYPE_EMBED "spv/texsample.h" #ifndef APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// diff --git a/renderdoc/data/resource.h b/renderdoc/data/resource.h index 4893d30ab..a4cc862cf 100644 --- a/renderdoc/data/resource.h +++ b/renderdoc/data/resource.h @@ -47,6 +47,7 @@ #define RESOURCE_spirv_histogram_comp 414 #define RESOURCE_spirv_outline_frag 415 #define RESOURCE_spirv_debuguniforms_h 416 +#define RESOURCE_spirv_texsample_h 417 #if !defined(STRINGIZE) #define STRINGIZE2(a) #a diff --git a/renderdoc/data/spv/debuguniforms.h b/renderdoc/data/spv/debuguniforms.h index 87b1bd7ac..bbdf2b48d 100644 --- a/renderdoc/data/spv/debuguniforms.h +++ b/renderdoc/data/spv/debuguniforms.h @@ -130,7 +130,7 @@ BINDING (0, 0) uniform TexDisplayUBOData float RangeMinimum; float InverseRangeSize; - float MipLevel; + int MipLevel; int FlipY; vec3 TextureResolutionPS; diff --git a/renderdoc/data/spv/mesh.frag b/renderdoc/data/spv/mesh.frag index 720a17a0c..6bdb04633 100644 --- a/renderdoc/data/spv/mesh.frag +++ b/renderdoc/data/spv/mesh.frag @@ -30,11 +30,6 @@ in v2f layout (location = 0) out vec4 color_out; -#define MESHDISPLAY_SOLID 0x1 -#define MESHDISPLAY_FACELIT 0x2 -#define MESHDISPLAY_SECONDARY 0x3 -#define MESHDISPLAY_SECONDARY_ALPHA 0x4 - void main(void) { uint type = Mesh.displayFormat; diff --git a/renderdoc/data/spv/texdisplay.frag b/renderdoc/data/spv/texdisplay.frag index 6264ad60a..309ea7987 100644 --- a/renderdoc/data/spv/texdisplay.frag +++ b/renderdoc/data/spv/texdisplay.frag @@ -24,27 +24,68 @@ layout (location = 0) out vec4 color_out; -layout (binding = 1) uniform sampler2D tex; +//#include "texsample.h" // while includes aren't supported in glslang, this will be added in code void main(void) { + bool uintTex = (texdisplay.OutputDisplayFormat & TEXDISPLAY_UINT_TEX) != 0; + bool sintTex = (texdisplay.OutputDisplayFormat & TEXDISPLAY_SINT_TEX) != 0; + + int texType = (texdisplay.OutputDisplayFormat & TEXDISPLAY_TYPEMASK); + + vec4 col; + uvec4 ucol; + ivec4 scol; + // calc screen co-ords with origin top left, modified by Position vec2 scr = gl_FragCoord.xy - texdisplay.Position.xy; scr /= texdisplay.Scale; - - if(scr.x < 0.0f || scr.y < 0.0f || - scr.x > texdisplay.TextureResolutionPS.x || scr.y > texdisplay.TextureResolutionPS.y) + + if(texType == RESTYPE_TEX1D || texType == RESTYPE_TEXBUFFER) { - discard; + // by convention display 1D textures as 100 high + if(scr.x < 0.0f || scr.x > texdisplay.TextureResolutionPS.x || scr.y < 0.0f || scr.y > 100.0f) + discard; + } + else + { + if(scr.x < 0.0f || scr.y < 0.0f || + scr.x > texdisplay.TextureResolutionPS.x || scr.y > texdisplay.TextureResolutionPS.y) + { + discard; + } } if (texdisplay.FlipY != 0) scr.y = texdisplay.TextureResolutionPS.y - scr.y; - vec4 col = textureLod(tex, scr.xy / texdisplay.TextureResolutionPS.xy, float(texdisplay.MipLevel)); - - vec4 rawcol = col; + if(uintTex) + { + ucol = SampleTextureUInt4(texType, scr, texdisplay.Slice, texdisplay.MipLevel, + texdisplay.SampleIdx, texdisplay.TextureResolutionPS); + } + else if(sintTex) + { + scol = SampleTextureSInt4(texType, scr, texdisplay.Slice, texdisplay.MipLevel, + texdisplay.SampleIdx, texdisplay.TextureResolutionPS); + } + else + { + col = SampleTextureFloat4(texType, scr, texdisplay.Slice, texdisplay.MipLevel, + texdisplay.SampleIdx, texdisplay.TextureResolutionPS); + } + + if(texdisplay.RawOutput != 0) + { + if (uintTex) + color_out = uintBitsToFloat(ucol); + else if (sintTex) + color_out = intBitsToFloat(scol); + else + color_out = col; + return; + } // RGBM encoding if(texdisplay.HDRMul > 0.0f) @@ -118,5 +159,5 @@ void main(void) col.rgb = pow(clamp(col.rgb, 0.0f.xxx, 1.0f.xxx), 2.2f.xxx); } - color_out = (texdisplay.RawOutput != 0 ? rawcol : col); + color_out = col; } diff --git a/renderdoc/data/spv/texsample.h b/renderdoc/data/spv/texsample.h new file mode 100644 index 000000000..d7b3f00ac --- /dev/null +++ b/renderdoc/data/spv/texsample.h @@ -0,0 +1,155 @@ +/****************************************************************************** + * The MIT License (MIT) + * + * Copyright (c) 2015 Baldur Karlsson + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + ******************************************************************************/ + +// these bindings are defined based on the RESTYPE_ defines in debuguniforms.h + +// binding = 5 + RESTYPE_x +layout (binding = 6) uniform sampler1DArray tex1DArray; +layout (binding = 7) uniform sampler2DArray tex2DArray; +layout (binding = 8) uniform sampler3D tex3D; +layout (binding = 9) uniform samplerBuffer texBuffer; +layout (binding = 10) uniform sampler2DMS tex2DMS; + +vec4 SampleTextureFloat4(int type, vec2 pos, float slice, int mipLevel, int sampleIdx, vec3 texRes) +{ + vec4 col; + + if (type == RESTYPE_TEX1D) + { + col = textureLod(tex1DArray, vec2(pos.x / texRes.x, slice), float(mipLevel)); + } + else if (type == RESTYPE_TEX2D) + { + col = textureLod(tex2DArray, vec3(pos / texRes.xy, slice), float(mipLevel)); + } + else if (type == RESTYPE_TEX3D) + { + col = textureLod(tex3D, vec3(pos / texRes.xy, slice / texRes.z), float(mipLevel)); + } + else if (type == RESTYPE_TEXBUFFER) + { + col = texelFetch(texBuffer, int(pos.x)); + } + else if (type == RESTYPE_TEX2DMS) + { + if(sampleIdx < 0) + { + int sampleCount = -sampleIdx; + + col = vec4(0, 0, 0, 0); + + // worst resolve you've seen in your life + for(int i=0; i < sampleCount; i++) + col += texelFetch(tex2DMS, ivec2(pos), i); + + col /= float(sampleCount); + } + else + { + col = texelFetch(tex2DMS, ivec2(pos), sampleIdx); + } + } + + return col; +} + +// these bindings are defined based on the RESTYPE_ defines in debuguniforms.h + +// binding = 10 + RESTYPE_x +layout (binding = 11) uniform usampler1DArray texUInt1DArray; +layout (binding = 12) uniform usampler2DArray texUInt2DArray; +layout (binding = 13) uniform usampler3D texUInt3D; +layout (binding = 14) uniform usamplerBuffer texUIntBuffer; +layout (binding = 15) uniform usampler2DMS texUInt2DMS; + +uvec4 SampleTextureUInt4(int type, vec2 pos, float slice, int mipLevel, int sampleIdx, vec3 texRes) +{ + uvec4 col; + + if (type == RESTYPE_TEX1D) + { + col = texelFetch(texUInt1DArray, ivec2(pos.x, slice), mipLevel); + } + else if (type == RESTYPE_TEX2D) + { + col = texelFetch(texUInt2DArray, ivec3(pos, slice), mipLevel); + } + else if (type == RESTYPE_TEX3D) + { + col = texelFetch(texUInt3D, ivec3(pos, slice), mipLevel); + } + else if (type == RESTYPE_TEXBUFFER) + { + col = texelFetch(texUIntBuffer, int(pos.x)); + } + else if (type == RESTYPE_TEX2DMS) + { + if(sampleIdx < 0) + sampleIdx = 0; + + col = texelFetch(texUInt2DMS, ivec2(pos), sampleIdx); + } + + return col; +} + +// these bindings are defined based on the RESTYPE_ defines in debuguniforms.h + +// binding = 15 + RESTYPE_x +layout (binding = 16) uniform isampler1DArray texSInt1DArray; +layout (binding = 17) uniform isampler2DArray texSInt2DArray; +layout (binding = 18) uniform isampler3D texSInt3D; +layout (binding = 19) uniform isamplerBuffer texSIntBuffer; +layout (binding = 20) uniform isampler2DMS texSInt2DMS; + +ivec4 SampleTextureSInt4(int type, vec2 pos, float slice, int mipLevel, int sampleIdx, vec3 texRes) +{ + ivec4 col; + + if (type == RESTYPE_TEX1D) + { + col = texelFetch(texSInt1DArray, ivec2(pos.x, slice), mipLevel); + } + else if (type == RESTYPE_TEX2D) + { + col = texelFetch(texSInt2DArray, ivec3(pos, slice), mipLevel); + } + else if (type == RESTYPE_TEX3D) + { + col = texelFetch(texSInt3D, ivec3(pos, slice), mipLevel); + } + else if (type == RESTYPE_TEXBUFFER) + { + col = texelFetch(texSIntBuffer, int(pos.x)); + } + else if (type == RESTYPE_TEX2DMS) + { + if(sampleIdx < 0) + sampleIdx = 0; + + col = texelFetch(texSInt2DMS, ivec2(pos), sampleIdx); + } + + return col; +} diff --git a/renderdoc/driver/vulkan/vk_common.cpp b/renderdoc/driver/vulkan/vk_common.cpp index 07995d9ff..ea9402d67 100644 --- a/renderdoc/driver/vulkan/vk_common.cpp +++ b/renderdoc/driver/vulkan/vk_common.cpp @@ -49,6 +49,32 @@ VkAccessFlags MakeAccessMask(VkImageLayout layout) return VkAccessFlags(0); } +int SampleCount(VkSampleCountFlagBits countFlag) +{ + switch(countFlag) + { + case VK_SAMPLE_COUNT_1_BIT: + return 1; + case VK_SAMPLE_COUNT_2_BIT: + return 2; + case VK_SAMPLE_COUNT_4_BIT: + return 4; + case VK_SAMPLE_COUNT_8_BIT: + return 8; + case VK_SAMPLE_COUNT_16_BIT: + return 16; + case VK_SAMPLE_COUNT_32_BIT: + return 32; + case VK_SAMPLE_COUNT_64_BIT: + return 64; + default: + RDCERR("Unrecognised/not single flag %x", countFlag); + break; + } + + return 1; +} + ResourceFormat MakeResourceFormat(VkFormat fmt) { ResourceFormat ret; diff --git a/renderdoc/driver/vulkan/vk_common.h b/renderdoc/driver/vulkan/vk_common.h index da098e1df..39ffcca48 100644 --- a/renderdoc/driver/vulkan/vk_common.h +++ b/renderdoc/driver/vulkan/vk_common.h @@ -54,6 +54,8 @@ VkPrimitiveTopology MakeVkPrimitiveTopology(PrimitiveTopology Topo); // set conservative access bits for this image layout VkAccessFlags MakeAccessMask(VkImageLayout layout); +int SampleCount(VkSampleCountFlagBits countFlag); + // structure for casting to easily iterate and template specialising Serialise struct VkGenericStruct { diff --git a/renderdoc/driver/vulkan/vk_debug.cpp b/renderdoc/driver/vulkan/vk_debug.cpp index 80575774b..a2ebe2395 100644 --- a/renderdoc/driver/vulkan/vk_debug.cpp +++ b/renderdoc/driver/vulkan/vk_debug.cpp @@ -384,7 +384,21 @@ VulkanDebugManager::VulkanDebugManager(WrappedVulkan *driver, VkDevice dev) { VkDescriptorSetLayoutBinding layoutBinding[] = { { 0, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, 1, VK_SHADER_STAGE_ALL, NULL, }, - { 1, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 1, VK_SHADER_STAGE_ALL, NULL, } + { 6, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 1, VK_SHADER_STAGE_ALL, NULL, }, + { 7, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 1, VK_SHADER_STAGE_ALL, NULL, }, + { 8, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 1, VK_SHADER_STAGE_ALL, NULL, }, + { 9, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 1, VK_SHADER_STAGE_ALL, NULL, }, + { 10, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 1, VK_SHADER_STAGE_ALL, NULL, }, + { 11, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 1, VK_SHADER_STAGE_ALL, NULL, }, + { 12, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 1, VK_SHADER_STAGE_ALL, NULL, }, + { 13, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 1, VK_SHADER_STAGE_ALL, NULL, }, + { 14, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 1, VK_SHADER_STAGE_ALL, NULL, }, + { 15, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 1, VK_SHADER_STAGE_ALL, NULL, }, + { 16, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 1, VK_SHADER_STAGE_ALL, NULL, }, + { 17, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 1, VK_SHADER_STAGE_ALL, NULL, }, + { 18, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 1, VK_SHADER_STAGE_ALL, NULL, }, + { 19, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 1, VK_SHADER_STAGE_ALL, NULL, }, + { 20, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 1, VK_SHADER_STAGE_ALL, NULL, }, }; VkDescriptorSetLayoutCreateInfo descsetLayoutInfo = { @@ -636,12 +650,16 @@ VulkanDebugManager::VulkanDebugManager(WrappedVulkan *driver, VkDevice dev) sources.resize(4); sources[0] = "#version 430 core\n"; sources[1] = GetEmbeddedResource(spirv_debuguniforms_h); - sources[2] = ""; // #defines + sources[2] = ""; // #defines/#includes for(size_t i=0; i < ARRAY_COUNT(module); i++) { + sources[2] = ""; sources[3] = shaderSources[i]; + if(sources[3].find("#include \"texsample.h\"") != string::npos) + sources[2] = GetEmbeddedResource(spirv_texsample_h); + string err = GetSPIRVBlob(shaderStages[i], sources, &shaderSPIRV[i]); RDCASSERT(err.empty() && shaderSPIRV); diff --git a/renderdoc/driver/vulkan/vk_replay.cpp b/renderdoc/driver/vulkan/vk_replay.cpp index f9d35d217..f5e2e821e 100644 --- a/renderdoc/driver/vulkan/vk_replay.cpp +++ b/renderdoc/driver/vulkan/vk_replay.cpp @@ -956,7 +956,7 @@ bool VulkanReplay::RenderTextureInternal(TextureDisplay cfg, VkRenderPassBeginIn data->FlipY = cfg.FlipY ? 1 : 0; - data->MipLevel = (float)cfg.mip; + data->MipLevel = (int)cfg.mip; data->Slice = 0; if(iminfo.type != VK_IMAGE_TYPE_3D) data->Slice = (float)cfg.sliceFace; @@ -973,11 +973,45 @@ bool VulkanReplay::RenderTextureInternal(TextureDisplay cfg, VkRenderPassBeginIn data->NumSamples = iminfo.samples; data->SampleIdx = cfg.sampleIdx; + + if(cfg.sampleIdx == ~0U) + data->SampleIdx = -SampleCount(iminfo.samples); data->OutputRes.x = (float)m_DebugWidth; data->OutputRes.y = (float)m_DebugHeight; - int displayformat = 0; + int textype = 0; + + if(iminfo.type == VK_IMAGE_TYPE_1D) + textype = RESTYPE_TEX1D; + if(iminfo.type == VK_IMAGE_TYPE_3D) + textype = RESTYPE_TEX3D; + if(iminfo.type == VK_IMAGE_TYPE_2D) + { + textype = RESTYPE_TEX2D; + if(iminfo.samples != VK_SAMPLE_COUNT_1_BIT) + textype = RESTYPE_TEX2DMS; + } + + int displayformat = textype; + int descSetBinding = textype; + + if(IsUIntFormat(iminfo.format)) + { + descSetBinding += 10; + displayformat |= TEXDISPLAY_UINT_TEX; + } + else if(IsSIntFormat(iminfo.format)) + { + descSetBinding += 15; + displayformat |= TEXDISPLAY_SINT_TEX; + } + else + { + descSetBinding += 5; + } + + // VKTODOMED: RESTYPE_TEXBUFFER if(!IsSRGBFormat(iminfo.format) && cfg.linearDisplayAsGamma) displayformat |= TEXDISPLAY_GAMMA_CURVE; @@ -988,7 +1022,6 @@ bool VulkanReplay::RenderTextureInternal(TextureDisplay cfg, VkRenderPassBeginIn if(cfg.overlay == eTexOverlay_Clipping) displayformat |= TEXDISPLAY_CLIPPING; - // VKTODOMED handle different texture types/displays data->OutputDisplayFormat = displayformat; data->RawOutput = cfg.rawoutput ? 1 : 0; @@ -1010,7 +1043,7 @@ bool VulkanReplay::RenderTextureInternal(TextureDisplay cfg, VkRenderPassBeginIn VkWriteDescriptorSet writeSet[] = { { VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET, NULL, - Unwrap(descset), 1, 0, 1, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, + Unwrap(descset), descSetBinding, 0, 1, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, &imdesc, NULL, NULL }, { diff --git a/renderdoc/driver/vulkan/vk_resources.cpp b/renderdoc/driver/vulkan/vk_resources.cpp index 3a5b33c07..bb606481e 100644 --- a/renderdoc/driver/vulkan/vk_resources.cpp +++ b/renderdoc/driver/vulkan/vk_resources.cpp @@ -242,6 +242,73 @@ bool IsSRGBFormat(VkFormat f) return false; } +bool IsUIntFormat(VkFormat f) +{ + switch(f) + { + case VK_FORMAT_R8_UINT: + case VK_FORMAT_R8G8_UINT: + case VK_FORMAT_R8G8B8_UINT: + case VK_FORMAT_B8G8R8_UINT: + case VK_FORMAT_R8G8B8A8_UINT: + case VK_FORMAT_B8G8R8A8_UINT: + case VK_FORMAT_A8B8G8R8_UINT_PACK32: + case VK_FORMAT_A2R10G10B10_UINT_PACK32: + case VK_FORMAT_A2B10G10R10_UINT_PACK32: + case VK_FORMAT_R16_UINT: + case VK_FORMAT_R16G16_UINT: + case VK_FORMAT_R16G16B16_UINT: + case VK_FORMAT_R16G16B16A16_UINT: + case VK_FORMAT_R32_UINT: + case VK_FORMAT_R32G32_UINT: + case VK_FORMAT_R32G32B32_UINT: + case VK_FORMAT_R32G32B32A32_UINT: + case VK_FORMAT_R64_UINT: + case VK_FORMAT_R64G64_UINT: + case VK_FORMAT_R64G64B64_UINT: + case VK_FORMAT_R64G64B64A64_UINT: + case VK_FORMAT_S8_UINT: + return true; + default: + break; + } + + return false; +} + +bool IsSIntFormat(VkFormat f) +{ + switch(f) + { + case VK_FORMAT_R8_SINT: + case VK_FORMAT_R8G8_SINT: + case VK_FORMAT_R8G8B8_SINT: + case VK_FORMAT_B8G8R8_SINT: + case VK_FORMAT_R8G8B8A8_SINT: + case VK_FORMAT_B8G8R8A8_SINT: + case VK_FORMAT_A8B8G8R8_SINT_PACK32: + case VK_FORMAT_A2R10G10B10_SINT_PACK32: + case VK_FORMAT_A2B10G10R10_SINT_PACK32: + case VK_FORMAT_R16_SINT: + case VK_FORMAT_R16G16_SINT: + case VK_FORMAT_R16G16B16_SINT: + case VK_FORMAT_R16G16B16A16_SINT: + case VK_FORMAT_R32_SINT: + case VK_FORMAT_R32G32_SINT: + case VK_FORMAT_R32G32B32_SINT: + case VK_FORMAT_R32G32B32A32_SINT: + case VK_FORMAT_R64_SINT: + case VK_FORMAT_R64G64_SINT: + case VK_FORMAT_R64G64B64_SINT: + case VK_FORMAT_R64G64B64A64_SINT: + return true; + default: + break; + } + + return false; +} + uint32_t GetByteSize(uint32_t Width, uint32_t Height, uint32_t Depth, VkFormat Format, uint32_t mip) { uint32_t w = RDCMAX(Width>>mip, 1U); diff --git a/renderdoc/driver/vulkan/vk_resources.h b/renderdoc/driver/vulkan/vk_resources.h index e313bd57a..370419970 100644 --- a/renderdoc/driver/vulkan/vk_resources.h +++ b/renderdoc/driver/vulkan/vk_resources.h @@ -791,5 +791,7 @@ bool IsBlockFormat(VkFormat f); bool IsDepthStencilFormat(VkFormat f); bool IsDepthOnlyFormat(VkFormat f); bool IsSRGBFormat(VkFormat f); +bool IsUIntFormat(VkFormat f); +bool IsSIntFormat(VkFormat f); uint32_t GetByteSize(uint32_t Width, uint32_t Height, uint32_t Depth, VkFormat Format, uint32_t mip); diff --git a/renderdoc/renderdoc.vcxproj b/renderdoc/renderdoc.vcxproj index ed28b77ac..3749b38d8 100644 --- a/renderdoc/renderdoc.vcxproj +++ b/renderdoc/renderdoc.vcxproj @@ -256,6 +256,7 @@ + diff --git a/renderdoc/renderdoc.vcxproj.filters b/renderdoc/renderdoc.vcxproj.filters index 2a0e7765f..a799c5be6 100644 --- a/renderdoc/renderdoc.vcxproj.filters +++ b/renderdoc/renderdoc.vcxproj.filters @@ -234,6 +234,9 @@ Resources\spv + + Resources\spv +