8f6df770ce
Add bool members is_read and is_written to SPIRType::Image. Output correct texture read/write access by marking whether textures are read from and written to by the shader. Override bitcast_glsl_op() to use Metal as_type<type> functions. Add implementations of SPIR-V functions inverse(), degrees() & radians(). Map inverseSqrt() to rsqrt(). Map roundEven() to rint(). GLSL functions imageSize() and textureSize() map to equivalent expression using MSL get_width() & get_height() functions. Map several SPIR-V integer bitfield functions to MSL equivalents. Map SPIR-V atomic functions to MSL equivalents. Map texture packing and unpacking functions to MSL equivalents. Refactor existing, and add new, image query functions. Reorganize header lines into includes and pragmas. Simplify type_to_glsl() logic. Add MSL test case vert/functions.vert for added function implementations. Add MSL test case comp/atomic.comp for added function implementations. test_shaders.py use macOS compilation for MSL shader compilation validations.
31 lines
1014 B
GLSL
31 lines
1014 B
GLSL
#include <metal_stdlib>
|
|
#include <simd/simd.h>
|
|
|
|
using namespace metal;
|
|
|
|
struct main0_in
|
|
{
|
|
float4 VertGeom [[user(locn0)]];
|
|
};
|
|
|
|
struct main0_out
|
|
{
|
|
float4 FragColor0 [[color(0)]];
|
|
float4 FragColor1 [[color(1)]];
|
|
};
|
|
|
|
fragment main0_out main0(main0_in in [[stage_in]], texture2d<float> TextureBase [[texture(0)]], sampler TextureBaseSmplr [[sampler(0)]], texture2d<float> TextureDetail [[texture(1)]], sampler TextureDetailSmplr [[sampler(1)]])
|
|
{
|
|
main0_out out = {};
|
|
float4 texSample0 = TextureBase.sample(TextureBaseSmplr, in.VertGeom.xy);
|
|
float4 texSample1 = TextureDetail.sample(TextureDetailSmplr, in.VertGeom.xy, int2(3, 2));
|
|
int4 iResult0 = as_type<int4>(texSample0);
|
|
int4 iResult1 = as_type<int4>(texSample1);
|
|
out.FragColor0 = as_type<float4>(iResult0) * as_type<float4>(iResult1);
|
|
uint4 uResult0 = as_type<uint4>(texSample0);
|
|
uint4 uResult1 = as_type<uint4>(texSample1);
|
|
out.FragColor1 = as_type<float4>(uResult0) * as_type<float4>(uResult1);
|
|
return out;
|
|
}
|
|
|