diff --git a/projects/saf_r/shaders/raytracing.comp b/projects/saf_r/shaders/raytracing.comp
index 90c5d8c2f006b7610ea30e934c813b1d63bb7ce7..fd6d689894f82028a2241df10fda9353e58697dd 100644
--- a/projects/saf_r/shaders/raytracing.comp
+++ b/projects/saf_r/shaders/raytracing.comp
@@ -1,8 +1,27 @@
 #version 450 core
 #extension GL_ARB_separate_shader_objects : enable
 
-layout(std430, binding = 0) coherent buffer safrBuffers{
-	int inumbers[];
+struct Material {
+	vec3 diffuse_color;
+	vec3 albedo;
+	float specular_exponent;
+};
+
+layout(std430, binding = 0) coherent buffer Lights{
+	vec3 position [];
+	float intensity [];
+};
+
+layout(std430, binding = 1) coherent buffer Materials{
+	vec3 diffuse_color;
+	vec3 albedo;
+	float specular_exponent;
+};
+
+layout(std430, binding = 2) coherent buffer Spheres{
+	vec3 center;
+	float radius;
+	Material material;
 };
 
 void main(){
diff --git a/projects/saf_r/src/main.cpp b/projects/saf_r/src/main.cpp
index 201b523236e87065d7d31bd380155d4919deedbc..f84fcd0ad25cdf6bd07ac0423fb6b392ef5dfadf 100644
--- a/projects/saf_r/src/main.cpp
+++ b/projects/saf_r/src/main.cpp
@@ -12,8 +12,6 @@
 #include "safrScene.hpp"
 
 
-
-
 int main(int argc, const char** argv) {
 	const char* applicationName = "SAF_R";
 
@@ -55,7 +53,6 @@ int main(int argc, const char** argv) {
 		computeShaderProgram.addShader(shaderStage, path);
 	});
 
-	//Out of range Problem
 	vkcv::DescriptorSetHandle computeDescriptorSet = core.createDescriptorSet(computeShaderProgram.getReflectedDescriptors()[0]);
 
 	const std::vector<vkcv::VertexAttachment> computeVertexAttachments = computeShaderProgram.getVertexAttachments();
@@ -82,9 +79,13 @@ int main(int argc, const char** argv) {
 	vkcv::DescriptorSetHandle descriptorSet = core.createDescriptorSet(descriptorBindings);
 
 	//materials for the spheres
+	std::vector<safrScene::Material> materials;
 	safrScene::Material ivory(glm::vec3(0.6, 0.3, 0.1), glm::vec3(0.4, 0.4, 0.3), 50.);
 	safrScene::Material red_rubber(glm::vec3(0.9, 0.1, 0.0), glm::vec3(0.3, 0.1, 0.1), 10.);
 	safrScene::Material mirror(glm::vec3(0.0, 10.0, 0.8), glm::vec3(1.0, 1.0, 1.0), 1425.);
+	materials.push_back(ivory);
+	materials.push_back(red_rubber);
+	materials.push_back(mirror);
 
 	//spheres for the scene
 	std::vector<safrScene::Sphere> spheres;
@@ -114,14 +115,25 @@ int main(int argc, const char** argv) {
 		vkcv::SamplerAddressMode::REPEAT
 	);
 
-	vkcv::Buffer<int> safrBuffer = core.createBuffer<int>(
+	//create Buffer for compute shader
+	vkcv::Buffer<safrScene::Light> lightsBuffer = core.createBuffer<safrScene::Light>(
+		vkcv::BufferType::STORAGE,
+		lights.size()
+		);
+	lightsBuffer.fill(lights);
+
+	vkcv::Buffer<safrScene::Sphere> sphereBuffer = core.createBuffer<safrScene::Sphere>(
+		vkcv::BufferType::STORAGE,
+		spheres.size()
+		);
+	sphereBuffer.fill(spheres);
+
+	vkcv::Buffer<safrScene::Material> materialBuffer = core.createBuffer<safrScene::Material>(
 		vkcv::BufferType::STORAGE,
-		2
+		materials.size()
 		);
+	materialBuffer.fill(materials);
 
-	std::vector<int> vec = { 42, 1337 };
-	safrBuffer.fill(vec);
-	//particleBuffer.fill(particleSystem.getParticles());
 
 	vkcv::DescriptorWrites setWrites;
 	setWrites.sampledImageWrites = { vkcv::SampledImageDescriptorWrite(0, texture.getHandle()) };
@@ -129,7 +141,9 @@ int main(int argc, const char** argv) {
 	core.writeDescriptorSet(descriptorSet, setWrites);
 
 	vkcv::DescriptorWrites computeWrites;
-	computeWrites.storageBufferWrites = { vkcv::BufferDescriptorWrite(0,safrBuffer.getHandle()) };
+	computeWrites.storageBufferWrites = { vkcv::BufferDescriptorWrite(0,lightsBuffer.getHandle()) };
+	computeWrites.storageBufferWrites = { vkcv::BufferDescriptorWrite(1,materialBuffer.getHandle()) };
+	computeWrites.storageBufferWrites = { vkcv::BufferDescriptorWrite(2,sphereBuffer.getHandle()) };
 	core.writeDescriptorSet(computeDescriptorSet, computeWrites);
 
 	const auto& context = core.getContext();
@@ -222,7 +236,7 @@ int main(int argc, const char** argv) {
 			{ vkcv::DescriptorSetUsage(0,core.getDescriptorSet(computeDescriptorSet).vulkanHandle) },
 			pushConstantsCompute);
 
-		core.recordBufferMemoryBarrier(cmdStream, safrBuffer.getHandle());
+		core.recordBufferMemoryBarrier(cmdStream, lightsBuffer.getHandle());
 
 		core.recordDrawcallsToCmdStream(
 			cmdStream,