mirror of
https://github.com/Rust-GPU/rust-gpu.git
synced 2026-06-08 10:39:50 +09:00
* Accept `#[rust_gpu::spirv()]` attributes rather than `#[spirv()]` in backend * Implemented `#[spirv(..)]` proc macro attribute for all platforms that conditionally translates to `#[rust_gpu::spirv()]` based on platform * Changed `SpirvBuilder` to always apply `register_tool(rust_gpu)` attribute to shader crates * Updated docs * Added changelog
43 lines
1.6 KiB
Rust
43 lines
1.6 KiB
Rust
// Test `OpImageSampleDrefExplicitLod`
|
|
// build-pass
|
|
|
|
use spirv_std::spirv;
|
|
use spirv_std::{Image, Sampler};
|
|
|
|
#[spirv(fragment)]
|
|
pub fn main(
|
|
#[spirv(descriptor_set = 0, binding = 0)] image: &Image!(2D, type=f32, sampled),
|
|
#[spirv(descriptor_set = 1, binding = 1)] image_array: &Image!(2D, type=f32, arrayed, sampled),
|
|
#[spirv(descriptor_set = 2, binding = 2)] sampler: &Sampler,
|
|
output: &mut f32,
|
|
) {
|
|
let v2 = glam::Vec2::new(0.0, 1.0);
|
|
let v2_dx = glam::Vec2::new(0.0, 1.0);
|
|
let v2_dy = glam::Vec2::new(0.0, 1.0);
|
|
let v3 = glam::Vec3A::new(0.0, 0.0, 1.0);
|
|
*output = image.sample_depth_reference_by_gradient(*sampler, v2, 1.0, v2_dx, v2_dy);
|
|
*output += image_array.sample_depth_reference_by_gradient(*sampler, v3, 1.0, v2_dx, v2_dy);
|
|
}
|
|
|
|
// NOTE(eddyb) this is separate because it runs afoul of this rule:
|
|
// > VUID-StandaloneSpirv-OpImage-04777
|
|
// > `OpImage*Dref*` instructions **must** not consume an image whose `Dim` is 3D
|
|
// FIXME(eddyb) look into whether non-Vulkan `OpImage*Dref*` usage can ever be 3D
|
|
#[cfg(not(any(
|
|
target_env = "vulkan1.0",
|
|
target_env = "vulkan1.1",
|
|
target_env = "vulkan1.1spv1.4",
|
|
target_env = "vulkan1.2"
|
|
)))]
|
|
#[spirv(fragment)]
|
|
pub fn main_cubemap(
|
|
#[spirv(descriptor_set = 2, binding = 2)] sampler: &Sampler,
|
|
#[spirv(descriptor_set = 3, binding = 3)] cubemap: &Image!(3D, type=f32, sampled),
|
|
output: &mut f32,
|
|
) {
|
|
let v3 = glam::Vec3A::new(0.0, 0.0, 1.0);
|
|
let v3_dx = glam::Vec3A::new(0.0, 1.0, 0.5);
|
|
let v3_dy = glam::Vec3A::new(0.0, 1.0, 0.5);
|
|
*output += cubemap.sample_depth_reference_by_gradient(*sampler, v3, 1.0, v3_dx, v3_dy);
|
|
}
|