diff --git a/data/shaders/glsl/texturemipmapgen/texture.frag b/data/shaders/glsl/texturemipmapgen/texture.frag index edb92b59..3717d5ec 100644 --- a/data/shaders/glsl/texturemipmapgen/texture.frag +++ b/data/shaders/glsl/texturemipmapgen/texture.frag @@ -5,16 +5,25 @@ layout (set = 0, binding = 2) uniform sampler samplers[3]; layout (location = 0) in vec2 inUV; layout (location = 1) in float inLodBias; -layout (location = 2) flat in int inSamplerIndex; -layout (location = 3) in vec3 inNormal; -layout (location = 4) in vec3 inViewVec; -layout (location = 5) in vec3 inLightVec; +layout (location = 2) in vec3 inNormal; +layout (location = 3) in vec3 inViewVec; +layout (location = 4) in vec3 inLightVec; + +layout (binding = 0) uniform UBO +{ + mat4 projection; + mat4 view; + mat4 model; + vec4 viewPos; + float lodBias; + int samplerIndex; +} ubo; layout (location = 0) out vec4 outFragColor; void main() { - vec4 color = texture(sampler2D(textureColor, samplers[inSamplerIndex]), inUV, inLodBias); + vec4 color = texture(sampler2D(textureColor, samplers[uniform.samplerIndex]), inUV, inLodBias); vec3 N = normalize(inNormal); vec3 L = normalize(inLightVec); diff --git a/data/shaders/glsl/texturemipmapgen/texture.vert b/data/shaders/glsl/texturemipmapgen/texture.vert index 55770880..5d04b795 100644 --- a/data/shaders/glsl/texturemipmapgen/texture.vert +++ b/data/shaders/glsl/texturemipmapgen/texture.vert @@ -16,21 +16,14 @@ layout (binding = 0) uniform UBO layout (location = 0) out vec2 outUV; layout (location = 1) out float outLodBias; -layout (location = 2) flat out int outSamplerIndex; -layout (location = 3) out vec3 outNormal; -layout (location = 4) out vec3 outViewVec; -layout (location = 5) out vec3 outLightVec; - -out gl_PerVertex -{ - vec4 gl_Position; -}; +layout (location = 2) out vec3 outNormal; +layout (location = 3) out vec3 outViewVec; +layout (location = 4) out vec3 outLightVec; void main() { outUV = inUV * vec2(2.0, 1.0); outLodBias = ubo.lodBias; - outSamplerIndex = ubo.samplerIndex; vec3 worldPos = vec3(ubo.model * vec4(inPos, 1.0)); diff --git a/data/shaders/hlsl/texturemipmapgen/texture.frag b/data/shaders/hlsl/texturemipmapgen/texture.frag index 9f58e19d..b14d63d1 100644 --- a/data/shaders/hlsl/texturemipmapgen/texture.frag +++ b/data/shaders/hlsl/texturemipmapgen/texture.frag @@ -3,19 +3,30 @@ Texture2D textureColor : register(t1); SamplerState samplers[3] : register(s2); +struct UBO +{ + float4x4 projection; + float4x4 view; + float4x4 model; + float4 viewPos; + float lodBias; + int samplerIndex; +}; + +cbuffer ubo : register(b0) { UBO ubo; } + struct VSOutput { [[vk::location(0)]] float2 UV : TEXCOORD0; [[vk::location(1)]] float LodBias : TEXCOORD3; -[[vk::location(2)]] int SamplerIndex : TEXCOORD4; -[[vk::location(3)]] float3 Normal : NORMAL0; -[[vk::location(4)]] float3 ViewVec : TEXCOORD1; -[[vk::location(5)]] float3 LightVec : TEXCOORD2; +[[vk::location(2)]] float3 Normal : NORMAL0; +[[vk::location(3)]] float3 ViewVec : TEXCOORD1; +[[vk::location(4)]] float3 LightVec : TEXCOORD2; }; float4 main(VSOutput input) : SV_TARGET { - float4 color = textureColor.Sample(samplers[input.SamplerIndex], input.UV, int2(0, 0), input.LodBias); + float4 color = textureColor.Sample(samplers[ubo.samplerIndex], input.UV, int2(0, 0), input.LodBias); float3 N = normalize(input.Normal); float3 L = normalize(input.LightVec); diff --git a/data/shaders/hlsl/texturemipmapgen/texture.frag.spv b/data/shaders/hlsl/texturemipmapgen/texture.frag.spv index 89a19160..838dd550 100644 Binary files a/data/shaders/hlsl/texturemipmapgen/texture.frag.spv and b/data/shaders/hlsl/texturemipmapgen/texture.frag.spv differ diff --git a/data/shaders/hlsl/texturemipmapgen/texture.vert b/data/shaders/hlsl/texturemipmapgen/texture.vert index 8b5f3036..6bcd982d 100644 --- a/data/shaders/hlsl/texturemipmapgen/texture.vert +++ b/data/shaders/hlsl/texturemipmapgen/texture.vert @@ -24,10 +24,9 @@ struct VSOutput float4 Pos : SV_POSITION; [[vk::location(0)]] float2 UV : TEXCOORD0; [[vk::location(1)]] float LodBias : TEXCOORD3; -[[vk::location(2)]] int SamplerIndex : TEXCOORD4; -[[vk::location(3)]] float3 Normal : NORMAL0; -[[vk::location(4)]] float3 ViewVec : TEXCOORD1; -[[vk::location(5)]] float3 LightVec : TEXCOORD2; +[[vk::location(2)]] float3 Normal : NORMAL0; +[[vk::location(3)]] float3 ViewVec : TEXCOORD1; +[[vk::location(4)]] float3 LightVec : TEXCOORD2; }; VSOutput main(VSInput input) @@ -35,7 +34,6 @@ VSOutput main(VSInput input) VSOutput output = (VSOutput)0; output.UV = input.UV * float2(2.0, 1.0); output.LodBias = ubo.lodBias; - output.SamplerIndex = ubo.samplerIndex; float3 worldPos = mul(ubo.model, float4(input.Pos, 1.0)).xyz; diff --git a/data/shaders/hlsl/texturemipmapgen/texture.vert.spv b/data/shaders/hlsl/texturemipmapgen/texture.vert.spv index de4cb544..cbfc816b 100644 Binary files a/data/shaders/hlsl/texturemipmapgen/texture.vert.spv and b/data/shaders/hlsl/texturemipmapgen/texture.vert.spv differ diff --git a/examples/texturemipmapgen/texturemipmapgen.cpp b/examples/texturemipmapgen/texturemipmapgen.cpp index 1fae3773..d74dab51 100644 --- a/examples/texturemipmapgen/texturemipmapgen.cpp +++ b/examples/texturemipmapgen/texturemipmapgen.cpp @@ -443,7 +443,7 @@ public: { std::vector setLayoutBindings = { // Binding 0: Vertex shader uniform buffer - vks::initializers::descriptorSetLayoutBinding(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, VK_SHADER_STAGE_VERTEX_BIT, 0), + vks::initializers::descriptorSetLayoutBinding(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT, 0), // Binding 1: Sampled image vks::initializers::descriptorSetLayoutBinding(VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, VK_SHADER_STAGE_FRAGMENT_BIT, 1), // Binding 2: Sampler array (3 descriptors)