2012-09-02 30 views
8

Khi biên dịch đoạn sau cho vòng lặp trong trình đổ bóng HLSL của tôi trong Shader Model 2.0, tôi nhận được Lỗi X3511.HLSL cho vòng lặp với Mô hình Shader 2.0: Lỗi X3511 không thể hủy vòng lặp

for (int x = -5; x <= 5; x++) 
{ 
    for (int y = -5; y <= 5; y++) 
    { 
      ... 

Lỗi đọc như sau: không có khả năng cuộn vòng lặp, vòng lặp không xuất hiện để chấm dứt một cách kịp thời (5 lần lặp), sử dụng [tháo vật cuộn tròn lại (n)] thuộc tính để buộc một số cao hơn chính xác.

Tôi biết thông báo lỗi này, nhưng tôi không sử dụng biến ở đây cho phần có điều kiện của câu lệnh - đó là một điều kiện x < = 5 được mã hóa cứng. Có gì sai ở đây?

Cảm ơn trước!

+0

Nó biên dịch khi tôi tháo thứ hai vòng lặp for. Vì vậy: Không có vòng lặp lồng nhau trong HLSL?!? – barnacleboy

+0

Tôi không chắc liệu nó có hoạt động với các vòng lặp lồng nhau hay không, nhưng bạn đã thử tăng số lần lặp lại với thuộc tính chưa? Như một dự đoán hoang dã, có lẽ '[unroll (11)]' trên cả hai vòng lặp sẽ hoạt động? –

+0

Rất tiếc, tôi không thể sử dụng tính năng cuộn khi biên dịch trong Shader Model 2.0. Tôi đang làm việc trên một ứng dụng xử lý hình ảnh, vì vậy tôi muốn đảm bảo rằng ứng dụng có thể chạy ít nhất trong Windows XP. – barnacleboy

Trả lời

8

Hãy thử điều này:

[unroll(121)] for (int i=0; i<121; i++) 
{ 
    int x = i/(int)11 - 5; 
    int y = i % (int)11 - 5; 
} 
+0

Vậy đó! Cảm ơn! :) – barnacleboy

Các vấn đề liên quan