static void ReadResources(const uint32_t* pui32Tokens,//in ShaderInfo* psShaderInfo)//out { ResourceBinding* psResBindings; ConstantBuffer* psConstantBuffers; const uint32_t* pui32ConstantBuffers; const uint32_t* pui32ResourceBindings; const uint32_t* pui32FirstToken = pui32Tokens; uint32_t i, k; const uint32_t ui32NumConstantBuffers = *pui32Tokens++; const uint32_t ui32ConstantBufferOffset = *pui32Tokens++; uint32_t ui32NumResourceBindings = *pui32Tokens++; uint32_t ui32ResourceBindingOffset = *pui32Tokens++; uint32_t ui32ShaderModel = *pui32Tokens++; uint32_t ui32CompileFlags = *pui32Tokens++;//D3DCompile flags? http://msdn.microsoft.com/en-us/library/gg615083(v=vs.85).aspx //Resources pui32ResourceBindings = (const uint32_t*)((const char*)pui32FirstToken + ui32ResourceBindingOffset); psResBindings = malloc(sizeof(ResourceBinding)*ui32NumResourceBindings); psShaderInfo->ui32NumResourceBindings = ui32NumResourceBindings; psShaderInfo->psResourceBindings = psResBindings; k=0; for(i=0; i < ui32NumResourceBindings; ++i) { pui32ResourceBindings = ReadResourceBinding(pui32FirstToken, pui32ResourceBindings, psResBindings+i); if(psResBindings[i].eType == RTYPE_CBUFFER) { ASSERT(k < MAX_CBUFFERS); psShaderInfo->aui32ConstBufferBindpointRemap[psResBindings[i].ui32BindPoint] = k++; } } //Constant buffers pui32ConstantBuffers = (const uint32_t*)((const char*)pui32FirstToken + ui32ConstantBufferOffset); psConstantBuffers = malloc(sizeof(ConstantBuffer) * ui32NumConstantBuffers); psShaderInfo->ui32NumConstantBuffers = ui32NumConstantBuffers; psShaderInfo->psConstantBuffers = psConstantBuffers; for(i=0; i < ui32NumConstantBuffers; ++i) { pui32ConstantBuffers = ReadConstantBuffer(psShaderInfo, pui32FirstToken, pui32ConstantBuffers, psConstantBuffers+i); } }
static void ReadResources(const uint32_t* pui32Tokens,//in ShaderInfo* psShaderInfo)//out { ResourceBinding* psResBindings; ConstantBuffer* psConstantBuffers; const uint32_t* pui32ConstantBuffers; const uint32_t* pui32ResourceBindings; const uint32_t* pui32FirstToken = pui32Tokens; uint32_t i; const uint32_t ui32NumConstantBuffers = *pui32Tokens++; const uint32_t ui32ConstantBufferOffset = *pui32Tokens++; uint32_t ui32NumResourceBindings = *pui32Tokens++; uint32_t ui32ResourceBindingOffset = *pui32Tokens++; uint32_t ui32ShaderModel = *pui32Tokens++; uint32_t ui32CompileFlags = *pui32Tokens++;//D3DCompile flags? http://msdn.microsoft.com/en-us/library/gg615083(v=vs.85).aspx //Resources pui32ResourceBindings = (const uint32_t*)((const char*)pui32FirstToken + ui32ResourceBindingOffset); psResBindings = hlslcc_malloc(sizeof(ResourceBinding)*ui32NumResourceBindings); psShaderInfo->ui32NumResourceBindings = ui32NumResourceBindings; psShaderInfo->psResourceBindings = psResBindings; for(i=0; i < ui32NumResourceBindings; ++i) { pui32ResourceBindings = ReadResourceBinding(pui32FirstToken, pui32ResourceBindings, psResBindings+i); ASSERT(psResBindings[i].ui32BindPoint < MAX_RESOURCE_BINDINGS); } //Constant buffers pui32ConstantBuffers = (const uint32_t*)((const char*)pui32FirstToken + ui32ConstantBufferOffset); psConstantBuffers = hlslcc_malloc(sizeof(ConstantBuffer) * ui32NumConstantBuffers); psShaderInfo->ui32NumConstantBuffers = ui32NumConstantBuffers; psShaderInfo->psConstantBuffers = psConstantBuffers; for(i=0; i < ui32NumConstantBuffers; ++i) { pui32ConstantBuffers = ReadConstantBuffer(psShaderInfo, pui32FirstToken, pui32ConstantBuffers, psConstantBuffers+i); } //Map resource bindings to constant buffers if(psShaderInfo->ui32NumConstantBuffers) { for(i=0; i < ui32NumResourceBindings; ++i) { ResourceGroup eRGroup; uint32_t cbufIndex = 0; eRGroup = ResourceTypeToResourceGroup(psResBindings[i].eType); //Find the constant buffer whose name matches the resource at the given resource binding point for(cbufIndex=0; cbufIndex < psShaderInfo->ui32NumConstantBuffers; cbufIndex++) { if(strcmp(psConstantBuffers[cbufIndex].Name, psResBindings[i].Name) == 0) { psShaderInfo->aui32ResourceMap[eRGroup][psResBindings[i].ui32BindPoint] = cbufIndex; } } } } }