#version 460 #extension GL_EXT_descriptor_heap : require #extension GL_EXT_samplerless_texture_functions : require #extension GL_EXT_structured_descriptor_heap : require #extension GL_EXT_scalar_block_layout : require layout(local_size_x = 1) in; layout(constant_id = 0) const uint materialsOffset = 1024; layout(push_constant) uniform MyPushData { vec4 cameraPos; uint buffersOffset; uint materialIndex; } pushData; layout(buffer_type, scalar) buffer DataBuffer { uint data0; uint data1; }; layout(heap_offset = 2048) resourceheap BufferHeap0 { uint count; DataBuffer dataBuffer; } bufferHeap0; layout(heap_offset = materialsOffset) resourceheap BufferHeap1 { uint count; DataBuffer dataBuffer; layout(rgba32f) image2D images[2]; texture2D textures[2]; } bufferHeap1; layout(heap_offset = pushData.buffersOffset) samplerheap SamplerHeap { sampler linearSamplers[2]; } samplerHeap; void main() { bufferHeap0.dataBuffer.data0 = bufferHeap1.dataBuffer.data1; vec4 texel = imageLoad(bufferHeap1.images[1], ivec2(0, 0)); vec4 sampled = textureLod(sampler2D(bufferHeap1.textures[1], samplerHeap.linearSamplers[1]), vec2(0.5), 0.0); imageStore(bufferHeap1.images[1], ivec2(0, 0), texel + sampled); }