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()
487 if (!shader.dxil->metadata.local_size[0]) in run_shader_with_raw_args()
490 conf.local_size[0] = shader.dxil->metadata.local_size[0]; in run_shader_with_raw_args()
492 if (!shader.dxil->metadata.local_size[1]) in run_shader_with_raw_args()
495 conf.local_size[1] = shader.dxil->metadata.local_size[1]; in run_shader_with_raw_args()
497 if (!shader.dxil->metadata.local_size[2]) in run_shader_with_raw_args()
500 conf.local_size[2] = shader.dxil->metadata.local_size[2]; in run_shader_with_raw_args()
519 for (unsigned i = 0; i < shader.dxil->kernel->num_args; ++i) { in run_shader_with_raw_args()
521 size_t size = arg->get_elem_size() * arg->get_num_elems(); in run_shader_with_raw_args()
523 switch (shader.dxil->kernel->args[i].address_qualifier) { in run_shader_with_raw_args()
537 std::vector<uint8_t> argsbuf(dxil->metadata.kernel_inputs_buf_size); in run_shader_with_raw_args()
538 std::vector<ComPtr<ID3D12Resource>> argres(shader.dxil->kernel->num_args); in run_shader_with_raw_args()
549 for (unsigned i = 0; i < dxil->kernel->num_args; ++i) { in run_shader_with_raw_args()
551 size_t size = arg->get_elem_size() * arg->get_num_elems(); in run_shader_with_raw_args()
552 void *slot = argsbuf.data() + dxil->metadata.args[i].offset; in run_shader_with_raw_args()
554 switch (dxil->kernel->args[i].address_qualifier) { in run_shader_with_raw_args()
557 assert(dxil->metadata.args[i].size == sizeof(uint64_t)); in run_shader_with_raw_args()
559 if (arg->get_data()) in run_shader_with_raw_args()
560 *ptr_slot = (uint64_t)dxil->metadata.args[i].globconstptr.buf_id << 32; in run_shader_with_raw_args()
566 assert(dxil->metadata.args[i].size == sizeof(uint64_t)); in run_shader_with_raw_args()
568 *ptr_slot = dxil->metadata.args[i].localptr.sharedmem_offset; in run_shader_with_raw_args()
572 assert(size == dxil->metadata.args[i].size); in run_shader_with_raw_args()
573 memcpy(slot, arg->get_data(), size); in run_shader_with_raw_args()
581 for (unsigned i = 0; i < dxil->kernel->num_args; ++i) { in run_shader_with_raw_args()
584 if (dxil->kernel->args[i].address_qualifier == CLC_KERNEL_ARG_ADDRESS_GLOBAL || in run_shader_with_raw_args()
585 dxil->kernel->args[i].address_qualifier == CLC_KERNEL_ARG_ADDRESS_CONSTANT) { in run_shader_with_raw_args()
587 dxil->metadata.args[i].globconstptr.buf_id, in run_shader_with_raw_args()
588 arg->get_data(), arg->get_num_elems(), in run_shader_with_raw_args()
589 arg->get_elem_size()); in run_shader_with_raw_args()
593 if (dxil->metadata.printf.uav_id > 0) in run_shader_with_raw_args()
594 add_uav_resource(resources, 0, dxil->metadata.printf.uav_id, NULL, 1024 * 1024 / 4, 4); in run_shader_with_raw_args()
596 for (unsigned i = 0; i < dxil->metadata.num_consts; ++i) in run_shader_with_raw_args()
597 add_uav_resource(resources, 0, dxil->metadata.consts[i].uav_id, in run_shader_with_raw_args()
598 dxil->metadata.consts[i].data, in run_shader_with_raw_args()
599 dxil->metadata.consts[i].size / 4, 4); in run_shader_with_raw_args()
602 add_cbv_resource(resources, 0, dxil->metadata.kernel_inputs_cbv_id, in run_shader_with_raw_args()
605 add_cbv_resource(resources, 0, dxil->metadata.work_properties_cbv_id, in run_shader_with_raw_args()
611 cmdlist->SetDescriptorHeaps(1, &uav_heap); in run_shader_with_raw_args()
612 cmdlist->SetComputeRootSignature(root_sig.Get()); in run_shader_with_raw_args()
613 cmdlist->SetComputeRootDescriptorTable(0, GetGPUDescriptorHandleForHeapStart(uav_heap)); in run_shader_with_raw_args()
614 cmdlist->SetPipelineState(pipeline_state.Get()); in run_shader_with_raw_args()
616 cmdlist->Dispatch(compile_args.x / conf.local_size[0], in run_shader_with_raw_args()
637 if (!(args[i]->get_direction() & SHADER_ARG_OUTPUT)) in run_shader_with_raw_args()
640 assert(dxil->kernel->args[i].address_qualifier == CLC_KERNEL_ARG_ADDRESS_GLOBAL); in run_shader_with_raw_args()
641 get_buffer_data(argres[i], args[i]->get_data(), in run_shader_with_raw_args()
642 args[i]->get_elem_size() * args[i]->get_num_elems()); in run_shader_with_raw_args()
646 dev->QueryInterface(info_queue.ReleaseAndGetAddressOf()); in run_shader_with_raw_args()
649 EXPECT_EQ(0, info_queue->GetNumStoredMessages()); in run_shader_with_raw_args()
650 for (unsigned i = 0; i < info_queue->GetNumStoredMessages(); ++i) { in run_shader_with_raw_args()
652 info_queue->GetMessageA(i, nullptr, &message_size); in run_shader_with_raw_args()
654 info_queue->GetMessageA(i, message, &message_size); in run_shader_with_raw_args()
655 FAIL() << message->pDescription; in run_shader_with_raw_args()
672 throw runtime_error("failed to create CLC compiler context"); in SetUp()
679 throw runtime_error("failed to serialize CLC compiler context"); in SetUp()
686 throw runtime_error("failed to deserialize CLC compiler context"); in SetUp()
707 if (FAILED(dev->CreateFence(0, D3D12_FENCE_FLAG_NONE, in SetUp()
717 if (FAILED(dev->CreateCommandQueue(&queue_desc, in SetUp()
722 if (FAILED(dev->CreateCommandAllocator(D3D12_COMMAND_LIST_TYPE_COMPUTE, in SetUp()
726 if (FAILED(dev->CreateCommandList(0, D3D12_COMMAND_LIST_TYPE_COMPUTE, in SetUp()
735 if (FAILED(dev->CreateDescriptorHeap(&heap_desc, in SetUp()
739 uav_heap_incr = dev->GetDescriptorHandleIncrementSize(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV); in SetUp()
752 uav_heap->Release(); in TearDown()
753 cmdlist->Release(); in TearDown()
754 cmdalloc->Release(); in TearDown()
755 cmdqueue->Release(); in TearDown()
756 cmdqueue_fence->Release(); in TearDown()
757 dev->Release(); in TearDown()
758 adapter->Release(); in TearDown()
759 factory->Release(); in TearDown()
865 free(spirv->data); in assemble()
868 shader.obj->size = binary.size() * 4; in assemble()
869 shader.obj->data = malloc(shader.obj->size); in assemble()
870 memcpy(shader.obj->data, binary.data(), shader.obj->size); in assemble()