package speiger.src.coreengine.platform.graphics.api.core;

import speiger.src.coreengine.platform.graphics.api.buffer.VertexBuffer;
import speiger.src.coreengine.platform.graphics.api.compute.BarrierType;
import speiger.src.coreengine.platform.graphics.api.compute.ComputePipeline;
import speiger.src.coreengine.platform.graphics.api.sampler.Sampler;
import speiger.src.coreengine.platform.graphics.api.texture.Texture;
import speiger.src.coreengine.platform.graphics.api.utils.AccessType;
import speiger.src.coreengine.platform.graphics.api.utils.GraphicsResource;

public interface ComputeCommandBuffer extends GraphicsResource, CommandBuffer {
	ComputeCommandBuffer begin();
	ComputeCommandBuffer pipeline(ComputePipeline pipeline);
	
	
	ComputeCommandBuffer texture(int binding, Texture texture, Sampler sampler);
	ComputeCommandBuffer texture(int binding, Texture texture, AccessType access);
	
	ComputeCommandBuffer uniform(int binding, VertexBuffer buffer);
	ComputeCommandBuffer uniform(int binding, VertexBuffer buffer, long offset, long size);
	
	ComputeCommandBuffer storage(int binding, VertexBuffer buffer);
	ComputeCommandBuffer storage(int binding, VertexBuffer buffer, long offset, long size);
	
	ComputeCommandBuffer dispatch(int numGroupsX, int numGroupsY, int numGroupsZ);
	
	ComputeCommandBuffer barrier(BarrierType... types);
	
	ComputeCommandBuffer end();
}
