Fix assertion failure with 'uniform texture2D'

Bug: oss-fuzz:48371
Change-Id: Ia92a652022985ea738791f3e2e57d360a04b05bd
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/554517
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
Reviewed-by: John Stiles <johnstiles@google.com>
This commit is contained in:
Ethan Nicholas 2022-06-29 15:03:50 -04:00 committed by SkCQ
parent 02fd3fc63d
commit 26afe80a62
4 changed files with 15 additions and 1 deletions

View File

@ -307,6 +307,7 @@ sksl_metal_tests = [
"/sksl/metal/NumericGlobals.sksl",
"/sksl/metal/OpaqueTypeInInterfaceBlock.sksl",
"/sksl/metal/OpaqueTypeInStruct.sksl",
"/sksl/metal/Ossfuzz48371.sksl",
"/sksl/metal/OutParams.sksl",
"/sksl/metal/OutVarsRequireLocation.sksl",
"/sksl/metal/SamplerGlobals.sksl",

View File

@ -0,0 +1 @@
uniform texture2D s;

View File

@ -2553,7 +2553,8 @@ void MetalCodeGenerator::writeUniformStruct() {
const GlobalVarDeclaration& decls = e->as<GlobalVarDeclaration>();
const Variable& var = decls.declaration()->as<VarDeclaration>().var();
if (var.modifiers().fFlags & Modifiers::kUniform_Flag &&
var.type().typeKind() != Type::TypeKind::kSampler) {
var.type().typeKind() != Type::TypeKind::kSampler &&
var.type().typeKind() != Type::TypeKind::kTexture) {
int uniformSet = this->getUniformSet(var.modifiers());
// Make sure that the program's uniform-set value is consistent throughout.
if (-1 == fUniformBuffer) {

View File

@ -0,0 +1,11 @@
#include <metal_stdlib>
#include <simd/simd.h>
using namespace metal;
struct Inputs {
};
struct Outputs {
half4 sk_FragColor [[color(0)]];
};
struct Globals {
texture2d<half, access::read> s;
};