Skip to content

Commit

Permalink
[spv-in] Fix OpImageQueries to allow Uints
Browse files Browse the repository at this point in the history
  • Loading branch information
evahop committed Jul 10, 2023
1 parent 04ef22f commit 5a0c47e
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 21 deletions.
36 changes: 25 additions & 11 deletions src/front/spv/image.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use crate::arena::{Arena, Handle, UniqueArena};
use crate::arena::{Handle, UniqueArena};

use super::{Error, LookupExpression, LookupHelper as _};

Expand Down Expand Up @@ -666,6 +666,7 @@ impl<I: Iterator<Item = u32>> super::Frontend<I> {
) -> Result<(), Error> {
let start = self.data_offset;
let result_type_id = self.next()?;
let result_type = self.lookup_type.lookup(result_type_id)?.handle;
let result_id = self.next()?;
let image_id = self.next()?;
let level = if at_level {
Expand All @@ -685,10 +686,16 @@ impl<I: Iterator<Item = u32>> super::Frontend<I> {
image: image_lexp.handle,
query: crate::ImageQuery::Size { level },
};
let expr = crate::Expression::As {
expr: ctx.expressions.append(expr, self.span_from_with_op(start)),
kind: crate::ScalarKind::Sint,
convert: Some(4),
let expr = if let Some(crate::ScalarKind::Sint) =
ctx.type_arena[result_type].inner.scalar_kind()
{
crate::Expression::As {
expr: ctx.expressions.append(expr, self.span_from_with_op(start)),
kind: crate::ScalarKind::Sint,
convert: Some(4),
}
} else {
expr
};
self.lookup_expression.insert(
result_id,
Expand All @@ -704,11 +711,12 @@ impl<I: Iterator<Item = u32>> super::Frontend<I> {
pub(super) fn parse_image_query_other(
&mut self,
query: crate::ImageQuery,
expressions: &mut Arena<crate::Expression>,
ctx: &mut super::BlockContext,
block_id: spirv::Word,
) -> Result<(), Error> {
let start = self.data_offset;
let result_type_id = self.next()?;
let result_type = self.lookup_type.lookup(result_type_id)?.handle;
let result_id = self.next()?;
let image_id = self.next()?;

Expand All @@ -720,15 +728,21 @@ impl<I: Iterator<Item = u32>> super::Frontend<I> {
image: image_lexp.handle,
query,
};
let expr = crate::Expression::As {
expr: expressions.append(expr, self.span_from_with_op(start)),
kind: crate::ScalarKind::Sint,
convert: Some(4),
let expr = if let Some(crate::ScalarKind::Sint) =
ctx.type_arena[result_type].inner.scalar_kind()
{
crate::Expression::As {
expr: ctx.expressions.append(expr, self.span_from_with_op(start)),
kind: crate::ScalarKind::Sint,
convert: Some(4),
}
} else {
expr
};
self.lookup_expression.insert(
result_id,
LookupExpression {
handle: expressions.append(expr, self.span_from_with_op(start)),
handle: ctx.expressions.append(expr, self.span_from_with_op(start)),
type_id: result_type_id,
block_id,
},
Expand Down
12 changes: 2 additions & 10 deletions src/front/spv/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2686,19 +2686,11 @@ impl<I: Iterator<Item = u32>> Frontend<I> {
}
Op::ImageQueryLevels => {
inst.expect(4)?;
self.parse_image_query_other(
crate::ImageQuery::NumLevels,
ctx.expressions,
block_id,
)?;
self.parse_image_query_other(crate::ImageQuery::NumLevels, ctx, block_id)?;
}
Op::ImageQuerySamples => {
inst.expect(4)?;
self.parse_image_query_other(
crate::ImageQuery::NumSamples,
ctx.expressions,
block_id,
)?;
self.parse_image_query_other(crate::ImageQuery::NumSamples, ctx, block_id)?;
}
// other ops
Op::Select => {
Expand Down

0 comments on commit 5a0c47e

Please sign in to comment.