void DepthStencilBuffer::Create(uint32_t width, uint32_t height) { auto* device = GraphicsCore::GetDevice(); // デプスステンシルテクスチャ D3D11_TEXTURE2D_DESC descDepth; ZeroMemory(&descDepth, sizeof(descDepth)); descDepth.Width = width; descDepth.Height = height; descDepth.MipLevels = 1; descDepth.ArraySize = 1; descDepth.Format = DXGI_FORMAT_R24G8_TYPELESS; descDepth.SampleDesc.Count = 1; descDepth.SampleDesc.Quality = 0; descDepth.Usage = D3D11_USAGE_DEFAULT; descDepth.BindFlags = D3D11_BIND_DEPTH_STENCIL; descDepth.CPUAccessFlags = 0; descDepth.MiscFlags = 0; ID3D11Texture2D* texture2d; auto hr = device->CreateTexture2D(&descDepth, NULL, &texture2d); THROW_IF_FAILED(hr); resource_ = texture2d; // デプスステンシルビュー D3D11_DEPTH_STENCIL_VIEW_DESC descDSV; ZeroMemory(&descDSV, sizeof(descDSV)); descDSV.Format = DXGI_FORMAT_D24_UNORM_S8_UINT; descDSV.ViewDimension = D3D11_DSV_DIMENSION_TEXTURE2D; descDSV.Texture2D.MipSlice = 0; hr = device->CreateDepthStencilView(texture2d, &descDSV, &dsv_); THROW_IF_FAILED(hr); }
void VertexBuffer::Create(const void* data, uint32_t size, VertexAttributeFlags attributes, BufferUsage usage, bool unorderedAccess) { Assert(!resource_); size_ = size; // 頂点バッファの設定 D3D11_BUFFER_DESC bd; ZeroMemory(&bd, sizeof(bd)); bd.CPUAccessFlags = 0; bd.ByteWidth = size; if (unorderedAccess) { bd.BindFlags = D3D11_BIND_VERTEX_BUFFER | D3D11_BIND_UNORDERED_ACCESS; bd.Usage = D3D11_USAGE_DEFAULT; bd.MiscFlags = D3D11_RESOURCE_MISC_BUFFER_ALLOW_RAW_VIEWS; } else { bd.BindFlags = D3D11_BIND_VERTEX_BUFFER; if (usage == BUFFER_USAGE_DYNAMIC) { bd.Usage = D3D11_USAGE_DYNAMIC; bd.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE; } else if (usage == BUFFER_USAGE_DEFAULT) { bd.Usage = D3D11_USAGE_DEFAULT; } else { bd.Usage = D3D11_USAGE_IMMUTABLE; } } // サブリソースの設定 D3D11_SUBRESOURCE_DATA* pInit = nullptr; D3D11_SUBRESOURCE_DATA initData; if (data) { ZeroMemory(&initData, sizeof(initData)); initData.pSysMem = data; pInit = &initData; } // 頂点バッファ生成 ID3D11Buffer* buffer; THROW_IF_FAILED(GraphicsCore::GetDevice()->CreateBuffer(&bd, pInit, &buffer)); resource_ = buffer; stride_ = ComputeVertexStride(attributes); attributes_ = attributes; // アンオーダードアクセスビューを生成 if (unorderedAccess) { D3D11_UNORDERED_ACCESS_VIEW_DESC uavDesc; uavDesc.Buffer.FirstElement = 0; uavDesc.Buffer.Flags = D3D11_BUFFER_UAV_FLAG_RAW; uavDesc.Buffer.NumElements = size / 4; uavDesc.ViewDimension = D3D11_UAV_DIMENSION_BUFFER; uavDesc.Format = DXGI_FORMAT_R32_TYPELESS; THROW_IF_FAILED(GraphicsCore::GetDevice()->CreateUnorderedAccessView(resource_, &uavDesc, &uav_)); } }
tResult cSensorAnalyzer::Init(tInitStage eStage, __exception) { RETURN_IF_FAILED(cBaseQtFilter::Init(eStage, __exception_ptr)); if (eStage == StageFirst) { THROW_IF_FAILED(CreateInputPins(__exception_ptr)); } else if (StageNormal == eStage) { m_sensorPresets.resize(LIST_LENGTH); //THROW_IF_FAILED(LoadConfigurationData("default")); } else if(eStage == StageGraphReady) { //m_pWidget->SetSensorPresets(m_sensorPresets); cFilename filepath = GetPropertyStr("Directory for Sensorpresets"); ADTF_GET_CONFIG_FILENAME(filepath); cString path = filepath.CreateAbsolutePath("."); emit DirectoryReceived(QString(path.GetPtr())); // no ids were set so far m_bIDsVoltageSet= tFalse; m_bIDsInerMeasUnitSet= tFalse; m_bIDsWheelDataSet= tFalse; m_bIDsUltrasonicSet = tFalse; } RETURN_NOERROR; }
void Run_NumericTests() { HRESULT hr; CoreShimComActivation csact{ W("NETServer.dll"), W("NumericTesting") }; ComSmartPtr<INumericTesting> numericTesting; THROW_IF_FAILED(::CoCreateInstance(CLSID_NumericTesting, nullptr, CLSCTX_INPROC, IID_INumericTesting, (void**)&numericTesting)); int seed = 37; ::srand(seed); ::printf("Numeric RNG seed: %d\n", seed); int a = ::rand(); int b = ::rand(); MarshalByte(numericTesting, (byte)a, (byte)b); MarshalShort(numericTesting, (int16_t)a, (int16_t)b); MarshalUShort(numericTesting, (uint16_t)a, (uint16_t)b); MarshalInt(numericTesting, a, b); MarshalUInt(numericTesting, (uint32_t)a, (uint32_t)b); MarshalLong(numericTesting, (int64_t)a, (int64_t)b); MarshalULong(numericTesting, (uint64_t)a, (uint64_t)b); MarshalFloat(numericTesting, (float)a / 100.f, (float)b / 100.f); MarshalDouble(numericTesting, (double)a / 100.0, (double)b / 100.0); MarshalManyInts(numericTesting); }
void IndexBuffer::Create(const void* data, uint32_t size, IndexBufferStride stride, BufferUsage usage) { stride_ = stride; bufferSize_ = size; indexCount_ = indexStrideList[stride]; D3D11_BUFFER_DESC ibd; ibd.ByteWidth = size; ibd.BindFlags = D3D11_BIND_INDEX_BUFFER; ibd.CPUAccessFlags = 0; ibd.MiscFlags = 0; if (usage == BUFFER_USAGE_DYNAMIC) { ibd.Usage = D3D11_USAGE_DYNAMIC; ibd.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE; } else if (usage == BUFFER_USAGE_DEFAULT) { ibd.Usage = D3D11_USAGE_DEFAULT; } else { ibd.Usage = D3D11_USAGE_IMMUTABLE; } D3D11_SUBRESOURCE_DATA* pInit = nullptr; D3D11_SUBRESOURCE_DATA initData; if (data) { ZeroMemory(&initData, sizeof(initData)); initData.pSysMem = data; pInit = &initData; } ID3D11Buffer* buffer; HRESULT hr = GraphicsCore::GetDevice()->CreateBuffer(&ibd, pInit, &buffer); THROW_IF_FAILED(hr); resource_ = buffer; }
void ProceduralTexture::Create(const void* data, uint32_t width, uint32_t height, Format format, uint32_t bpp) { Assert(!resource_ && data); width_ = width; height_ = height; depth_ = 1; format_ = format; DXGI_FORMAT dxgiFormat = GetDXGIFormat(format); // テクスチャ生成 D3D11_TEXTURE2D_DESC objdesc; ZeroMemory(&objdesc, sizeof(objdesc)); objdesc.Width = width; objdesc.Height = height; objdesc.MipLevels = 1; objdesc.ArraySize = 1; objdesc.SampleDesc.Count = 1; objdesc.SampleDesc.Quality = 0; objdesc.MiscFlags = 0; objdesc.Format = dxgiFormat; objdesc.Usage = D3D11_USAGE_DEFAULT; objdesc.CPUAccessFlags = 0; objdesc.BindFlags = D3D11_BIND_SHADER_RESOURCE | D3D11_BIND_RENDER_TARGET; D3D11_SUBRESOURCE_DATA dataBin; dataBin.pSysMem = data; dataBin.SysMemPitch = bpp * width; dataBin.SysMemSlicePitch = 0; // テクスチャ生成 auto* device = GraphicsCore::GetDevice(); ID3D11Texture2D* texture; THROW_IF_FAILED(device->CreateTexture2D(&objdesc, &dataBin, &texture)); resource_ = texture; // シェーダリソースビュー D3D11_SHADER_RESOURCE_VIEW_DESC srvDesc; memset(&srvDesc, 0, sizeof(srvDesc)); srvDesc.Format = dxgiFormat; srvDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2D; srvDesc.Texture2D.MipLevels = 1; THROW_IF_FAILED(device->CreateShaderResourceView(texture, &srvDesc, &srv_)); }
void Run_StringTests() { HRESULT hr; CoreShimComActivation csact{ W("NETServer.dll"), W("StringTesting") }; ComSmartPtr<IStringTesting> stringTesting; THROW_IF_FAILED(::CoCreateInstance(CLSID_StringTesting, nullptr, CLSCTX_INPROC, IID_IStringTesting, (void**)&stringTesting)); Marshal_LPString(stringTesting); Marshal_LPWString(stringTesting); Marshal_BStrString(stringTesting); }
void Texture::LoadFromFile(const char* fileName) { wchar_t buffer[255] = { 0 }; size_t size; mbstowcs_s(&size, buffer, fileName, sizeof(buffer)); auto hr = DirectX::CreateDDSTextureFromFile(GraphicsCore::GetDevice(), buffer, &resource_, &srv_); THROW_IF_FAILED(hr); // 2D only ID3D11Texture2D* texture = (ID3D11Texture2D*)resource_; D3D11_TEXTURE2D_DESC desc; texture->GetDesc(&desc); width_ = desc.Width; height_ = desc.Height; depth_ = desc.ArraySize; }
void ConstantBuffer::Create(uint32_t size, BufferUsage usage) { Assert(size % 16 == 0); D3D11_BUFFER_DESC bd; ZeroMemory(&bd, sizeof(bd)); bd.BindFlags = D3D11_BIND_CONSTANT_BUFFER; bd.ByteWidth = size; switch (usage) { case BUFFER_USAGE_DYNAMIC: bd.Usage = D3D11_USAGE_DYNAMIC; bd.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE; break; default: bd.Usage = D3D11_USAGE_DEFAULT; bd.CPUAccessFlags = 0; break; } THROW_IF_FAILED(GraphicsCore::GetDevice()->CreateBuffer(&bd, nullptr, &buffer_)); size_ = size; }
tResult StateControlManagementSlim::Init(tInitStage eStage, __exception) { RETURN_IF_FAILED(cAsyncDataTriggeredFilter::Init(eStage, __exception_ptr)); // pins need to be created at StageFirst if (eStage == StageFirst) { //LOG_WARNING("StateControlManagement: StageFirst;"); /* get Information regarding input and output pins for specific types */ RETURN_IF_FAILED(TActionStruct_object.StageFirst(__exception_ptr)); RETURN_IF_FAILED(TFeedbackStruct_object.StageFirst(__exception_ptr)); // create and register the input pin RETURN_IF_FAILED(CreateInputPins(__exception_ptr)); RETURN_IF_FAILED(CreateOutputPins(__exception_ptr)); m_bDebugModeEnabled = GetPropertyBool("Debug Output to Console"); #ifdef WRITE_DEBUG_OUTPUT_TO_FILE // creating logfile log file for SCM //LOG_WARNING("SCM: debug mode: 'logging' for scm-data enabled, writing to /opt/scm_log-'date-and-time'.log"); time_t rawtime; struct tm * timeinfo; time(&rawtime); timeinfo = localtime(&rawtime); // cString fileDate = cString(asctime(timeinfo)); // fileDate.Replace(" ", "_"); // fileDate.Replace(":", "_"); // cString logFilename = "/opt/scm_log_" + fileDate + ".log"; // logFilename.Replace("\n", ""); // scm_logfile.open(logFilename, ios::out | ios::trunc); // scm_logfile << "# SCM data log, recorded at: " << asctime(timeinfo) << std::endl; //scm_logfile.close(); size_t N = 80; char dateAndTime[N]; strftime(dateAndTime, N, "%Y_%m_%d-%H_%M_%S", timeinfo); cString dateAndTime_str = cString(dateAndTime); cString logFilename = "/opt/scm_log_" + cString(dateAndTime) + ".log"; logFilename.Replace("\n", ""); LOG_WARNING("SCM: debug mode: 'logging' for scm-data enabled, writing to '" + logFilename + "'."); scm_logfile.open(logFilename, ios::out | ios::trunc); scm_logfile << "# SCM data log, recorded at: " << asctime(timeinfo) << std::endl; #endif /* StateController Management*/ i16CurrentScmManeuverID = -1; i16CurrentScmStepID = -1; i8CurrentActLvlMode = NOT_INITIALIZED; } else if (eStage == StageNormal) { //LOG_WARNING("StateControlManagement: StageNormal;"); m_bPrintStrucModeEnabled = GetPropertyBool("Print Structure to Console"); // load xml files for defining the structure of the StateController tResult scmLoadstate = LoadSCMStructureData(); if(scmLoadstate < 0) { LOG_ERROR(adtf_util::cString::Format("SCM: Structure could not be loaded!")); } THROW_IF_FAILED(scmLoadstate); if(m_bDebugModeEnabled && scmLoadstate == 0){ LOG_WARNING(adtf_util::cString::Format("SCM: Structure loaded successfully!")); } /* Initialization of SCM after successfully loading structure*/ i16CurrentScmManeuverID = 0; i16CurrentScmStepID = 0; /* START StateControl Management in startup-state, wait for first PASSIVE request to start, * e.g. verification of loaded maneuver list from JuryCommunication */ i8CurrentActLvlMode = PASSIVE; if(m_bDebugModeEnabled) LOG_WARNING(adtf_util::cString::Format("SCM: initialized maneuverID, stepID and actLvlmode:Passive")); } else if(eStage == StageGraphReady) { //LOG_WARNING("StateControlManagement: StageGraphReady;"); // IDs for ActionStruct and FeedbackStruct are set RETURN_IF_FAILED(TActionStruct_object.StageGraphReady()); RETURN_IF_FAILED(TFeedbackStruct_object.StageGraphReady()); /* START StateControl Management in startup-state (maneuver 0, step 0) in passive mode, wait for response from JCom * that maneuver list was successfully loaded */ if(m_bDebugModeEnabled) LOG_WARNING(adtf_util::cString::Format("SCM: waiting for feedback from JCom regarding loaded maneuverlist.")); } RETURN_NOERROR; }
void * GraphicsContext::Map(GPUResource& resource, uint32_t subResource) { D3D11_MAPPED_SUBRESOURCE mapResource; THROW_IF_FAILED(deviceContext_->Map(resource.GetResource(), subResource, D3D11_MAP_WRITE_DISCARD, 0 , &mapResource)); return mapResource.pData; }
void ColorBuffer::Create2D(Format format, uint32_t width, uint32_t height, uint32_t arraySize, uint32_t mips, bool unorderedAccess) { Assert(!resource_); mips = se::Max<uint32_t>(1, mips); width_ = width; height_ = height; depth_ = arraySize; format_ = format; DXGI_FORMAT dxgiFormat = GetDXGIFormat(format); // テクスチャ生成 D3D11_TEXTURE2D_DESC objdesc; ZeroMemory(&objdesc, sizeof(objdesc)); objdesc.Width = width; objdesc.Height = height; objdesc.MipLevels = mips; objdesc.ArraySize = arraySize; objdesc.SampleDesc.Count = 1; objdesc.SampleDesc.Quality = 0; objdesc.MiscFlags = 0; objdesc.Format = dxgiFormat; objdesc.Usage = D3D11_USAGE_DEFAULT; objdesc.CPUAccessFlags = 0; objdesc.BindFlags = D3D11_BIND_SHADER_RESOURCE | D3D11_BIND_RENDER_TARGET; if(unorderedAccess) objdesc.BindFlags |= D3D11_BIND_UNORDERED_ACCESS; // テクスチャ生成 auto* device = GraphicsCore::GetDevice(); ID3D11Texture2D* texture; THROW_IF_FAILED(device->CreateTexture2D(&objdesc, nullptr, &texture)); resource_ = texture; // シェーダリソースビュー bool isArray = (arraySize > 1); D3D11_SHADER_RESOURCE_VIEW_DESC srvDesc; memset(&srvDesc, 0, sizeof(srvDesc)); srvDesc.Format = dxgiFormat; if (isArray) { srvDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2DARRAY; srvDesc.Texture2DArray.ArraySize = arraySize; srvDesc.Texture2DArray.MipLevels = mips; } else { srvDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2D; srvDesc.Texture2D.MipLevels = mips; } THROW_IF_FAILED(device->CreateShaderResourceView(texture, &srvDesc, &srv_)); // レンダーターゲットビュー D3D11_RENDER_TARGET_VIEW_DESC rdesc; rdesc.Format = dxgiFormat; rdesc.ViewDimension = (arraySize > 1 || mips > 1) ? D3D11_RTV_DIMENSION_TEXTURE2DARRAY : D3D11_RTV_DIMENSION_TEXTURE2D; rdesc.Texture2DArray.ArraySize = 1; rdesc.Texture2DArray.MipSlice = 0; rdesc.Texture2DArray.FirstArraySlice = 0; THROW_IF_FAILED(device->CreateRenderTargetView(texture, &rdesc, &rtv_)); // アンオーダードアクセスビューを生成 if (unorderedAccess) { D3D11_UNORDERED_ACCESS_VIEW_DESC uavDesc; if (isArray) { uavDesc.Texture2DArray.ArraySize = arraySize; uavDesc.Texture2DArray.FirstArraySlice = 0; uavDesc.Texture2DArray.MipSlice = 0; uavDesc.ViewDimension = D3D11_UAV_DIMENSION_TEXTURE2DARRAY; } else { uavDesc.Texture2D.MipSlice = 0; uavDesc.ViewDimension = D3D11_UAV_DIMENSION_TEXTURE2D; } uavDesc.Format = dxgiFormat; THROW_IF_FAILED(GraphicsCore::GetDevice()->CreateUnorderedAccessView(resource_, &uavDesc, &uav_)); } }