Lines Matching +full:microsoft +full:- +full:clc
2 * Copyright © Microsoft Corporation
40 #include <spirv-tools/libspirv.hpp>
46 return heap->GetCPUDescriptorHandleForHeapStart(); in GetCPUDescriptorHandleForHeapStart()
51 return heap->GetGPUDescriptorHandleForHeapStart(); in GetGPUDescriptorHandleForHeapStart()
56 return dev->GetCustomHeapProperties(0, type); in GetCustomHeapProperties()
63 heap->GetCPUDescriptorHandleForHeapStart(&ret); in GetCPUDescriptorHandleForHeapStart()
70 heap->GetGPUDescriptorHandleForHeapStart(&ret); in GetGPUDescriptorHandleForHeapStart()
77 dev->GetCustomHeapProperties(&ret, 0, type); in GetCustomHeapProperties()
83 using Microsoft::WRL::ComPtr;
141 debug->EnableDebugLayer(); in enable_d3d12_debug_layer()
178 for (unsigned i = 0; SUCCEEDED(factory->EnumAdapters1(i, &ret)); i++) { in choose_adapter()
180 ret->GetDesc1(&desc); in choose_adapter()
186 if (FAILED(factory->EnumWarpAdapter(__uuidof(IDXGIAdapter1), in choose_adapter()
250 if (FAILED(dev->CreateRootSignature(0, in create_root_signature()
251 sig->GetBufferPointer(), in create_root_signature()
252 sig->GetBufferSize(), in create_root_signature()
269 if (FAILED(dev->CreateComputePipelineState(&pipeline_desc, in create_pipeline_state()
295 if (FAILED(dev->CreateCommittedResource(&heap_pris, in create_buffer()
310 if (FAILED(upload_res->Map(0, &res_range, (void **)&ptr))) in create_upload_buffer_with_data()
311 throw runtime_error("Failed to map upload-buffer"); in create_upload_buffer_with_data()
314 upload_res->Unmap(0, &res_range); in create_upload_buffer_with_data()
327 cmdlist->CopyBufferRegion(res.Get(), 0, upload_res.Get(), 0, data_size); in create_sized_buffer_with_data()
340 cmdlist->CopyResource(readback_res.Get(), res.Get()); in get_buffer_data()
346 if (FAILED(readback_res->Map(0, &res_range, &ptr))) in get_buffer_data()
347 throw runtime_error("Failed to map readback-buffer"); in get_buffer_data()
352 readback_res->Unmap(0, &empty_range); in get_buffer_data()
367 cmdlist->ResourceBarrier(1, &barrier); in resource_barrier()
373 if (FAILED(cmdlist->Close())) in execute_cmdlist()
377 cmdqueue->ExecuteCommandLists(1, cmdlists); in execute_cmdlist()
378 cmdqueue_fence->SetEventOnCompletion(fence_value, event); in execute_cmdlist()
379 cmdqueue->Signal(cmdqueue_fence, fence_value); in execute_cmdlist()
383 if (FAILED(cmdalloc->Reset())) in execute_cmdlist()
386 if (FAILED(cmdlist->Reset(cmdalloc, NULL))) in execute_cmdlist()
404 dev->CreateUnorderedAccessView(res.Get(), NULL, &uav_desc, cpu_handle); in create_uav_buffer()
412 cbv_desc.BufferLocation = res ? res->GetGPUVirtualAddress() : 0; in create_cbv()
415 dev->CreateConstantBufferView(&cbv_desc, cpu_handle); in create_cbv()
478 if (args.size() != shader.dxil->kernel->num_args) in run_shader_with_raw_args()
489 if (!shader.dxil->metadata.local_size[0]) in run_shader_with_raw_args()
492 conf.local_size[0] = shader.dxil->metadata.local_size[0]; in run_shader_with_raw_args()
494 if (!shader.dxil->metadata.local_size[1]) in run_shader_with_raw_args()
497 conf.local_size[1] = shader.dxil->metadata.local_size[1]; in run_shader_with_raw_args()
499 if (!shader.dxil->metadata.local_size[2]) in run_shader_with_raw_args()
502 conf.local_size[2] = shader.dxil->metadata.local_size[2]; in run_shader_with_raw_args()
521 for (unsigned i = 0; i < shader.dxil->kernel->num_args; ++i) { in run_shader_with_raw_args()
523 size_t size = arg->get_elem_size() * arg->get_num_elems(); in run_shader_with_raw_args()
525 switch (shader.dxil->kernel->args[i].address_qualifier) { in run_shader_with_raw_args()
539 std::vector<uint8_t> argsbuf(dxil->metadata.kernel_inputs_buf_size); in run_shader_with_raw_args()
540 std::vector<ComPtr<ID3D12Resource>> argres(shader.dxil->kernel->num_args); in run_shader_with_raw_args()
551 for (unsigned i = 0; i < dxil->kernel->num_args; ++i) { in run_shader_with_raw_args()
553 size_t size = arg->get_elem_size() * arg->get_num_elems(); in run_shader_with_raw_args()
554 void *slot = argsbuf.data() + dxil->metadata.args[i].offset; in run_shader_with_raw_args()
556 switch (dxil->kernel->args[i].address_qualifier) { in run_shader_with_raw_args()
559 assert(dxil->metadata.args[i].size == sizeof(uint64_t)); in run_shader_with_raw_args()
561 if (arg->get_data()) in run_shader_with_raw_args()
562 *ptr_slot = (uint64_t)dxil->metadata.args[i].globconstptr.buf_id << 32; in run_shader_with_raw_args()
568 assert(dxil->metadata.args[i].size == sizeof(uint64_t)); in run_shader_with_raw_args()
570 *ptr_slot = dxil->metadata.args[i].localptr.sharedmem_offset; in run_shader_with_raw_args()
574 assert(size == dxil->metadata.args[i].size); in run_shader_with_raw_args()
575 memcpy(slot, arg->get_data(), size); in run_shader_with_raw_args()
583 for (unsigned i = 0; i < dxil->kernel->num_args; ++i) { in run_shader_with_raw_args()
586 if (dxil->kernel->args[i].address_qualifier == CLC_KERNEL_ARG_ADDRESS_GLOBAL || in run_shader_with_raw_args()
587 dxil->kernel->args[i].address_qualifier == CLC_KERNEL_ARG_ADDRESS_CONSTANT) { in run_shader_with_raw_args()
589 dxil->metadata.args[i].globconstptr.buf_id, in run_shader_with_raw_args()
590 arg->get_data(), arg->get_num_elems(), in run_shader_with_raw_args()
591 arg->get_elem_size()); in run_shader_with_raw_args()
595 if (dxil->metadata.printf.uav_id > 0) in run_shader_with_raw_args()
596 add_uav_resource(resources, 0, dxil->metadata.printf.uav_id, NULL, 1024 * 1024 / 4, 4); in run_shader_with_raw_args()
598 for (unsigned i = 0; i < dxil->metadata.num_consts; ++i) in run_shader_with_raw_args()
599 add_uav_resource(resources, 0, dxil->metadata.consts[i].uav_id, in run_shader_with_raw_args()
600 dxil->metadata.consts[i].data, in run_shader_with_raw_args()
601 dxil->metadata.consts[i].size / 4, 4); in run_shader_with_raw_args()
604 add_cbv_resource(resources, 0, dxil->metadata.kernel_inputs_cbv_id, in run_shader_with_raw_args()
607 add_cbv_resource(resources, 0, dxil->metadata.work_properties_cbv_id, in run_shader_with_raw_args()
613 cmdlist->SetDescriptorHeaps(1, &uav_heap); in run_shader_with_raw_args()
614 cmdlist->SetComputeRootSignature(root_sig.Get()); in run_shader_with_raw_args()
615 cmdlist->SetComputeRootDescriptorTable(0, GetGPUDescriptorHandleForHeapStart(uav_heap)); in run_shader_with_raw_args()
616 cmdlist->SetPipelineState(pipeline_state.Get()); in run_shader_with_raw_args()
618 cmdlist->Dispatch(compile_args.x / conf.local_size[0], in run_shader_with_raw_args()
639 if (!(args[i]->get_direction() & SHADER_ARG_OUTPUT)) in run_shader_with_raw_args()
642 assert(dxil->kernel->args[i].address_qualifier == CLC_KERNEL_ARG_ADDRESS_GLOBAL); in run_shader_with_raw_args()
643 get_buffer_data(argres[i], args[i]->get_data(), in run_shader_with_raw_args()
644 args[i]->get_elem_size() * args[i]->get_num_elems()); in run_shader_with_raw_args()
648 dev->QueryInterface(info_queue.ReleaseAndGetAddressOf()); in run_shader_with_raw_args()
651 EXPECT_EQ(0, info_queue->GetNumStoredMessages()); in run_shader_with_raw_args()
652 for (unsigned i = 0; i < info_queue->GetNumStoredMessages(); ++i) { in run_shader_with_raw_args()
654 info_queue->GetMessageA(i, nullptr, &message_size); in run_shader_with_raw_args()
656 info_queue->GetMessageA(i, message, &message_size); in run_shader_with_raw_args()
657 FAIL() << message->pDescription; in run_shader_with_raw_args()
674 throw runtime_error("failed to create CLC compiler context"); in SetUp()
681 throw runtime_error("failed to serialize CLC compiler context"); in SetUp()
688 throw runtime_error("failed to deserialize CLC compiler context"); in SetUp()
709 if (FAILED(dev->CreateFence(0, D3D12_FENCE_FLAG_NONE, in SetUp()
719 if (FAILED(dev->CreateCommandQueue(&queue_desc, in SetUp()
724 if (FAILED(dev->CreateCommandAllocator(D3D12_COMMAND_LIST_TYPE_COMPUTE, in SetUp()
728 if (FAILED(dev->CreateCommandList(0, D3D12_COMMAND_LIST_TYPE_COMPUTE, in SetUp()
737 if (FAILED(dev->CreateDescriptorHeap(&heap_desc, in SetUp()
741 uav_heap_incr = dev->GetDescriptorHandleIncrementSize(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); in SetUp()
754 uav_heap->Release(); in TearDown()
755 cmdlist->Release(); in TearDown()
756 cmdalloc->Release(); in TearDown()
757 cmdqueue->Release(); in TearDown()
758 cmdqueue_fence->Release(); in TearDown()
759 dev->Release(); in TearDown()
760 adapter->Release(); in TearDown()
761 factory->Release(); in TearDown()
870 free(spirv->data); in assemble()
873 shader.obj->size = binary.size() * 4; in assemble()
874 shader.obj->data = malloc(shader.obj->size); in assemble()
875 memcpy(shader.obj->data, binary.data(), shader.obj->size); in assemble()