首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从ispc导出的函数中按值返回结构?

从ispc导出的函数中按值返回结构?
EN

Stack Overflow用户
提问于 2019-10-21 05:50:09
回答 1查看 93关注 0票数 0

我不能在c++端从导出的ispc-function (使用ispc v1.12和msvc 2017 )中获得一个值的结构。程序可以顺利编译和运行(32位,调试模式),除非我有空字段需要非零值。在32位发布模式下,我的值略有不同。在64位中,我在c++端总是有零。我没有发现任何直接提及或示例这样的代码片段。捆绑的样本仅包含返回导出函数的void或基元类型。我的代码:

kernel.ispc:

代码语言:javascript
复制
struct fp32_2 { float v0, v1; };

export uniform fp32_2 loopback( uniform float arg0, uniform float arg1 ){
    uniform fp32_2 result;
    result.v0 = arg0;
    result.v1 = arg1;
    print( "ispc side: v0 = %\n", result.v0 );
    print( "ispc side: v1 = %\n", result.v1 );
    return result;
    }

kernel.h (由ispc生成,相关部分):

代码语言:javascript
复制
#ifndef __ISPC_STRUCT_fp32_2__
#define __ISPC_STRUCT_fp32_2__
struct fp32_2 {
    float v0;
    float v1;
};
#endif
...
extern "C"{
    extern struct fp32_2 loopback(float arg0, float arg1);
}

main.cpp:

代码语言:javascript
复制
#include "kernel.h"
#include <iostream>

int main(){
    auto res = ispc::loopback( 10.0f, 11.0f );
    std::cout << "c++ side: v0 = " << res.v0 << "\n";
    std::cout << "c++ side: v1 = " << res.v1 << "\n";
    }

ispc文件编译的命令行参数(用于32位调试模式):

代码语言:javascript
复制
ispc %(FullPath) --arch=x86 --target-os=windows --target=sse4-i32x4
-O1 --opt=disable-loop-unroll --emit-obj --outfile=$(IntDir)%(FileName).obj
--header-outfile=%(RootDir)%(Directory)%(Filename).h --werror -g

输出(32位调试模式或64位两种模式):

代码语言:javascript
复制
ispc side: v0 = 10.000000
ispc side: v1 = 11.000000
c++ side: v0 = 0
c++ side: v1 = 0

输出(32位释放模式):

代码语言:javascript
复制
ispc side: v0 = 10.000000
ispc side: v1 = 11.000000
c++ side: v0 = 0
c++ side: v1 = 5.39308e+33

每次运行我都得到相同的值。我遗漏了什么或做错了什么?

提前感谢

EN

回答 1

Stack Overflow用户

发布于 2020-02-12 07:58:17

这应该可以正常工作。我会在Github上提交一个问题,或者在listserv上联系他们。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58477625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档