ISA.h 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. /*
  2. * Copyright (c) 2022, Stephan Unverwerth <s.unverwerth@serenityos.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #pragma once
  7. #include <AK/Types.h>
  8. namespace SoftGPU {
  9. constexpr u8 swizzle_pattern(u8 a, u8 b, u8 c, u8 d)
  10. {
  11. return a | (b << 2) | (c << 4) | (d << 6);
  12. }
  13. constexpr u8 swizzle_index(u8 pattern, u8 element)
  14. {
  15. return (pattern & (3 << (element * 2))) >> (element * 2);
  16. }
  17. enum class Opcode : u8 {
  18. Input,
  19. Output,
  20. Sample2D,
  21. Swizzle,
  22. Add,
  23. Sub,
  24. Mul,
  25. Div,
  26. };
  27. struct Instruction final {
  28. union Arguments {
  29. struct {
  30. u16 target_register;
  31. u8 input_index;
  32. } input;
  33. struct {
  34. u16 source_register;
  35. u8 output_index;
  36. } output;
  37. struct {
  38. u16 target_register;
  39. u16 coordinates_register;
  40. u8 sampler_index;
  41. } sample;
  42. struct {
  43. u16 target_register;
  44. u16 source_register;
  45. u8 pattern;
  46. } swizzle;
  47. struct {
  48. u16 target_register;
  49. u16 source_register1;
  50. u16 source_register2;
  51. } binop;
  52. } arguments;
  53. Opcode operation;
  54. };
  55. }