Skip to content

Windows: slangc generate no code for compute shader #6784

@RickSchanze

Description

@RickSchanze

Compute shader below generate no code using command line:

slangc.exe ./irradiance.slang -target glsl -o irradiance.glsl -entry compute

irradiance.slang:

struct Params {
    float output_size_x;
    float output_size_y;
    float sample_delta;
    float sky_intensity;
}

ConstantBuffer<Params> params;
Texture2D<float3> input_equirect_map;
SamplerState common_samler;
RWTexture2D<float4> output_irradiance;
static const float PI = 3.1415926535;

float2 DirToUV(float3 dir) {
    float phi = atan2(dir.y, dir.x) + PI;      
    float theta = acos(dir.z);                
    return float2(phi / (2 * PI), theta / PI);
}

float3 SphericalToDir(float theta, float phi) {
    return float3(
        sin(theta) * cos(phi),
        sin(theta) * sin(phi),
        cos(theta)
    );
}

[shader("compute")]
[numthreads(16, 16, 1)]
void compute(uint3 tid: SV_DispatchThreadID) {
    float2 uv = (tid.xy + 0.5) / float2(params.output_size_x, params.output_size_y);
    float phi = uv.x * 2 * PI;
    float theta = (1 - uv.y) * PI; 
    float3 N = float3(sin(theta) * cos(phi), cos(theta), sin(theta) * sin(phi));
    float3 up = (0, 1, 0);
    float3 right = normalize(cross(up, N));
    up = normalize(cross(N, right));

    float3 irradiance = 0;
    float nSample = 0;

    for (float sample_phi = 0.0; sample_phi < 2.0 * PI; sample_phi += params.sample_delta) {
        for (float sample_theta = 0.0; sample_theta < 0.5 * PI; sample_theta + params.sample_delta) { //
            float3 tangent_sample = SphericalToDir(sample_theta, sample_phi);
            float3 world_sample = tangent_sample.x * right + tangent_sample.y * up + tangent_sample.z * N;
            float2 sample_uv = DirToUV(world_sample);
            float3 color = input_equirect_map.Sample(common_samler, sample_uv);
            irradiance += color * cos(theta) * sin(theta);
            nSample++;
        }
    }
    irradiance = PI * irradiance / nSample;
    output_irradiance[tid.xy] = float4(irradiance * params.sky_intensity, 1.0f);
}

And output is:

#version 450
layout(row_major) uniform;
layout(row_major) buffer;

#line 30 0
layout(local_size_x = 16, local_size_y = 16, local_size_z = 1) in;
void main()
{

#line 30
}

Can anyone explain why?

Metadata

Metadata

Assignees

Labels

Dev Reviewedgoal:quality & productivityQuality issues and issues that impact our productivity coding day to day inside slang

Type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions