我收到以下错误:
WARNING: uniforms initializing is allowed from GLSL version 1.20
WARNING: Only GLSL version > 110 allows postfix "F" or "f" for float
Run Code Online (Sandbox Code Playgroud)
虽然我知道如何解决这个问题,但我想知道为什么会发生这种情况,因为这个机器出现了OpenGL 3.1,因此有GLSL 1.4:
12:40:58 [INFO] Intel(R) HD Graphics Family
12:40:58 [INFO] OpenGL 3.1.0 - Build 8.15.10.2509
Run Code Online (Sandbox Code Playgroud)
编辑:有问题的着色器是一个fragement着色器(没有顶点着色器):
uniform sampler2D sampler;
uniform sampler2D bump;
uniform float imageSize;
uniform float range = 50;
void main() {
vec2 pos = gl_TexCoord[0].xy;
float height = texture2D(bump, gl_TexCoord[0].xy).r - 0.5;
pos.y += height * range / imageSize;
gl_FragColor = texture2D(sampler, pos);
//gl_FragColor …
Run Code Online (Sandbox Code Playgroud) 我想知道为什么gcc为函数引入了一个新的序言(以及结语) - 尤其是main(),因为我只分析它.例如,之前,它是:
push ebp
mov ebp, esp
sub esp, 0x... ; Allocate memory space into the stack
; ... Some code
; Epilogue
leave
ret
Run Code Online (Sandbox Code Playgroud)
现在这有点复杂(至少要理解):
lea ecx,[esp+0x4]
and esp,0xfffffff0
push DWORD PTR [ecx-0x4]
push ebp
mov ebp,esp
push ecx
sub esp,0x64
; Some code
; Epilogue
add esp,0x64
pop ecx
pop ebp
lea esp,[ecx-0x4]
ret
Run Code Online (Sandbox Code Playgroud)
我明白具体是什么,但我无法弄清楚它的目的 .是否使得利用(堆栈溢出)尝试更棘手?另一个召集会议?只是为了让堆栈更安全?(因为我在战争游戏中遇到了这个东西)
最后,我的gcc版本是:gcc版本4.3.2(Debian 4.3.2-1.1)
提前致谢!
我是英特尔TBB的新手.我正在使用concurrent_queue,以便在我的项目中实现细粒度的并行性.我几乎没有怀疑.这就是我的实施方式.
thread_fun(arguments) {
while(concurrent_queue.try_pop(v))
operation on v; //each thread executes its own operation(seperate v for each thread)
}
main() {
for(..)
concurrent_queue.push(); //fill the queue
_beginthreadex(..); //create 8 win32 threads and pass concurrent_queue as an argument
}
Run Code Online (Sandbox Code Playgroud)
我明确提到了线程的数量.我读到TBB将根据处理器核心数创建线程.我怎样才能实现这一目标?所以我不需要使用_beginthreadex函数显式创建线程?
我是否通过使用concurrent_queue实现了细粒度的并行性?
任务级并行性是什么意思?你如何用intel tbb实现任务级并行?我从队列中弹出元素.流行操作是否被视为一项任务?这意味着,所有弹出操作都被视为不同的任务.我用8个线程一次弹出8个元素.这意味着,我正在实现任务级并行性.我对么?
如果我在四核处理器(支持8个线程)上将线程数增加到32,那么concurrent_queue如何工作?是否只有8个线程同时在队列上执行或共32个线程同时执行?
请帮我.
我正在用MSVC++中的机器代码进行一些实验,并创建了一个函数,允许我在带有符号位移的寄存器周围构建mov操作.一切顺利,直到我的功能建立起来mov [esp-4], eax
.突然,我的程序开始崩溃了.在看完拆卸后,我发现了一些相当奇怪的东西.对于此mov
取消引用ESP
寄存器的偏移量,在参数字节和有符号位移之间放置了一个额外的字节.这个字节似乎总是0x24.因此,出于好奇,我拆解了下面的__asm
块并获得了一些有趣的结果:
mov [eax - 4], eax
mov [ecx - 4], eax
mov [edx - 4], eax
mov [ebx - 4], eax
mov [esp - 4], eax
mov [ebp - 4], eax
mov [esi - 4], eax
mov [edi - 4], eax
Run Code Online (Sandbox Code Playgroud)
机器代码将上述内容翻译成:
89 40 FC
89 41 FC
89 42 FC
89 43 FC
89 44 24 FC <--- WAT!
89 45 FC
89 46 FC
89 47 FC
Run Code Online (Sandbox Code Playgroud)
我在Windows计算器中键入了十六进制24并将其切换为二进制.结果是 …
我有OSX Yosemite 10.10和Intel i5处理器.我安装了Android SDK和Eclipse.它的工作原理但问题是,当我创建AVD启动它时,它会显示以下错误:
Starting emulator for AVD 'Nexus4-18-xhdpi'
emulator: ERROR: x86 emulation currently requires hardware acceleration!
Please ensure Intel HAXM is properly installed and usable.
CPU acceleration status: HAX is not installed on this machine (/dev/HAX is missing).
Run Code Online (Sandbox Code Playgroud)
我是android编程的新手,并不知道如何解决它或查看/ dev/Hav.请帮忙.谢谢.
我们的任务是比较整数值并打印出适当的提示以显示哪些值更大.
我在下面的代码分别将'i'和'j'初始化为5和4.目标是比较"变量"而不是直接值本身.所以在这个例子中,我把'i'和'j'放在cmp中,而不是5和4.
global _main
extern _printf, _system
section .text
_main:
; clear screen
push clr
call _system
add esp, 4
;Test prints out i. Successfully does the job.
push dword [i] ; why did it work here and not in *cmp*?
push prompt2
call _printf
add esp, 8
;compare values and do a conditional jump.
CMP dword [i], dword [j] ; compares values stored in i and j. i and j are base 10 nums. This is where …
Run Code Online (Sandbox Code Playgroud) 我想将值从YMM复制到RAX寄存器,但我没有找到正确的指令来执行此操作.我想做的事情如下:
mov rax, ymm0
Run Code Online (Sandbox Code Playgroud)
例如对于XMM我可以这样做:movq rax, xmm0
.我想要类似于此的东西.
我目前正在学习汇编语言,遵循Kip Irvine的书"用于x86处理器的汇编语言".
在书中,作者说过
NOT运算符具有最高优先级,后跟AND和OR
我知道在Java中,&&(和)运算符的优先级高于|| (或)运算符,但从作者所说的来看,似乎在汇编语言中,AND和OR运算符似乎具有相同的优先级.
我的理解是否正确?
此外,哪里是寻找此类信息的最佳地点?
具体是:
mov %eax, %ds
Run Code Online (Sandbox Code Playgroud)
慢于
mov %eax, %ebx
Run Code Online (Sandbox Code Playgroud)
或者他们是相同的速度.我在网上研究过,但一直无法找到明确的答案.
我不确定这是否是一个愚蠢的问题,但我认为修改分段寄存器可以使处理器做额外的工作.
NB我关注旧的x86 linux cpus,而不是现代的x86_64 cpus,其中分段的工作方式不同.