| 24 | } |
| 25 | |
| 26 | int main() |
| 27 | { |
| 28 | try |
| 29 | { |
| 30 | // Setup profiler and debugger |
| 31 | auto profiler = std::make_shared<LLGL::RenderingProfiler>(); |
| 32 | auto debugger = std::make_shared<LLGL::RenderingDebugger>(); |
| 33 | |
| 34 | // Load render system module |
| 35 | auto renderer = LLGL::RenderSystem::Load("OpenGL", profiler.get(), debugger.get()); |
| 36 | |
| 37 | // Create render context |
| 38 | LLGL::RenderContextDescriptor contextDesc; |
| 39 | contextDesc.videoMode.resolution = { 800, 600 }; |
| 40 | |
| 41 | /*auto context = */renderer->CreateRenderContext(contextDesc); |
| 42 | |
| 43 | // Create command buffer |
| 44 | auto commandQueue = renderer->GetCommandQueue(); |
| 45 | auto commands = renderer->CreateCommandBuffer(); |
| 46 | |
| 47 | // Quit if compute shaders are not supported |
| 48 | const auto& renderCaps = renderer->GetRenderingCaps(); |
| 49 | if (!renderCaps.features.hasComputeShaders) |
| 50 | throw std::runtime_error("compute shaders are not supported by renderer"); |
| 51 | |
| 52 | // Create storage buffer |
| 53 | static const unsigned int vecSize = 128; |
| 54 | auto vec = GetTestVector(vecSize); |
| 55 | |
| 56 | LLGL::BufferDescriptor storageBufferDesc; |
| 57 | { |
| 58 | storageBufferDesc.size = sizeof(Gs::Vector4f)*vecSize; |
| 59 | storageBufferDesc.bindFlags = LLGL::BindFlags::Storage; |
| 60 | storageBufferDesc.cpuAccessFlags = LLGL::CPUAccessFlags::Read; |
| 61 | storageBufferDesc.miscFlags = LLGL::MiscFlags::DynamicUsage; |
| 62 | } |
| 63 | auto storageBuffer = renderer->CreateBuffer(storageBufferDesc, vec.data()); |
| 64 | |
| 65 | // Load shader |
| 66 | auto computeShader = renderer->CreateShader({ LLGL::ShaderType::Compute, "Shaders/ComputeShader.glsl" }); |
| 67 | |
| 68 | if (computeShader->HasErrors()) |
| 69 | std::cerr << computeShader->GetReport() << std::endl; |
| 70 | |
| 71 | // Create shader program |
| 72 | LLGL::ShaderProgramDescriptor shaderProgramDesc; |
| 73 | { |
| 74 | shaderProgramDesc.computeShader = computeShader; |
| 75 | } |
| 76 | auto shaderProgram = renderer->CreateShaderProgram(shaderProgramDesc); |
| 77 | |
| 78 | if (shaderProgram->HasErrors()) |
| 79 | std::cerr << shaderProgram->GetReport() << std::endl; |
| 80 | |
| 81 | // Create timer query |
| 82 | LLGL::QueryHeapDescriptor queryDesc; |
| 83 | { |
nothing calls this directly
no test coverage detected